Repository: kubernetes-sigs/kueue

Issue:
[flaky integration test]  Scheduler when ClusterQueue head has inadmissible workload sticky workload deleted, next workload can admit
/kind flake

**What happened**:
failure on unrelated branch: https://prow.k8s.io/view/gs/kubernetes-ci-logs/pr-logs/pull/kubernetes-sigs_kueue/7211/pull-kueue-test-integration-baseline-main/1977772558216335360
**What you expected to happen**:
no failure
**How to reproduce it (as minimally and precisely as possible)**:
ci
**Anything else we need to know?**:
```

Scheduler Fair Sharing Suite: [It] Scheduler when ClusterQueue head has inadmissible workload sticky workload deleted, next workload can admit expand_less	13s
{Timed out after 10.001s.
The function passed to Eventually failed at /home/prow/go/src/sigs.k8s.io/kueue/test/util/util.go:695 with:
Expected
    <int>: 0
to equal
    <int>: 1 failed [FAILED] Timed out after 10.001s.
The function passed to Eventually failed at /home/prow/go/src/sigs.k8s.io/kueue/test/util/util.go:695 with:
Expected
    <int>: 0
to equal
    <int>: 1
In [It] at: /home/prow/go/src/sigs.k8s.io/kueue/test/integration/singlecluster/scheduler/fairsharing/fair_sharing_test.go:946 @ 10/13/25 16:40:10.961
}
```

Discussion:
@mimowo: /kind flake
cc @mwysokin @pajakd @amy @mimowo: It seems just like a potential test flake, because FinishEvictionsOfAnyWorkloadsInCq returns the number of finished workloads, but that number is not awaited to match the expectation in the outside code. So, IIUC it is possible no workloads occasionally have the "Evicted" condition at this point visible from the test code, and so nothing is actually finished.

Maybe we should wrap this line [here](https://github.com/kubernetes-sigs/kueue/blob/af0d80ee04210a537fc25dda7a8e23445dbb2763/test/integration/singlecluster/scheduler/fairsharing/fair_sharing_test.go#L945) as `gomega.Expect(util.FinishEvictionsOfAnyWorkloadsInCq(ctx, k8sClient, cq2)).ToEqual(X)` whatever X should be, that will make the code loop until the expectation on the number of finished workloads is met.@mimowo: https://prow.k8s.io/view/gs/kubernetes-ci-logs/logs/periodic-kueue-test-integration-release-0-13/1979054011159941120@pajakd: /assign@pajakd: I think the above [comment](https://github.com/kubernetes-sigs/kueue/issues/7250#issuecomment-3398333757) has the right solution. Let me elaborate a bit why:

https://github.com/kubernetes-sigs/kueue/blob/ef20e3a7da8b611a58b568283a0377ab9628e8cc/test/integration/singlecluster/scheduler/fairsharing/fair_sharing_test.go#L954-L959

1. Lets say that (for some reason) the first time we try `FinishEvictionsOfAnyWorkloadsInCq` no workload is ready for eviction. 
2. Then this quietly passes and we move to `ExpectAdmittedWorkloadsTotalMetric`. 
3. `ExpectAdmittedWorkloadsTotalMetric` has another `Eventually` inside where we wait for 10s for this metric to become 1, but since we did not evict anything it will remain 0.
4. We wasted 10s waiting for the metric and we never retry `FinishEvictionsOfAnyWorkloadsInCq`

I could not reproduce the error but confirmed in the logs that there is an unfinished preemption blocking the admission of the workload from `cq1`. 

Solution patch:
diff --git a/cmd/kueuectl/app/completion/completion.go b/cmd/kueuectl/app/completion/completion.go
index b0c1c435c..8dfa22eaf 100644
--- a/cmd/kueuectl/app/completion/completion.go
+++ b/cmd/kueuectl/app/completion/completion.go
@@ -24,7 +24,7 @@ import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/utils/ptr"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/cmd/kueuectl/app/util"
 )
 
@@ -117,7 +117,7 @@ func WorkloadNameFunc(clientGetter util.ClientGetter, activeStatus *bool) func(*
 		}
 
 		if activeStatus != nil {
-			filteredItems := make([]v1beta1.Workload, 0, len(list.Items))
+			filteredItems := make([]kueue.Workload, 0, len(list.Items))
 			for _, wl := range list.Items {
 				if ptr.Deref(wl.Spec.Active, true) == *activeStatus {
 					filteredItems = append(filteredItems, wl)
@@ -154,12 +154,12 @@ func ClusterQueueNameFunc(clientGetter util.ClientGetter, activeStatus *bool) fu
 		}
 
 		if activeStatus != nil {
-			filteredItems := make([]v1beta1.ClusterQueue, 0, len(list.Items))
+			filteredItems := make([]kueue.ClusterQueue, 0, len(list.Items))
 			for _, cq := range list.Items {
-				stopPolicy := ptr.Deref(cq.Spec.StopPolicy, v1beta1.None)
-				if *activeStatus && stopPolicy == v1beta1.None {
+				stopPolicy := ptr.Deref(cq.Spec.StopPolicy, kueue.None)
+				if *activeStatus && stopPolicy == kueue.None {
 					filteredItems = append(filteredItems, cq)
-				} else if !*activeStatus && stopPolicy != v1beta1.None {
+				} else if !*activeStatus && stopPolicy != kueue.None {
 					filteredItems = append(filteredItems, cq)
 				}
 			}
@@ -197,12 +197,12 @@ func LocalQueueNameFunc(clientGetter util.ClientGetter, activeStatus *bool) func
 		}
 
 		if activeStatus != nil {
-			filteredItems := make([]v1beta1.LocalQueue, 0, len(list.Items))
+			filteredItems := make([]kueue.LocalQueue, 0, len(list.Items))
 			for _, lq := range list.Items {
-				stopPolicy := ptr.Deref(lq.Spec.StopPolicy, v1beta1.None)
-				if *activeStatus && stopPolicy == v1beta1.None {
+				stopPolicy := ptr.Deref(lq.Spec.StopPolicy, kueue.None)
+				if *activeStatus && stopPolicy == kueue.None {
 					filteredItems = append(filteredItems, lq)
-				} else if !*activeStatus && stopPolicy != v1beta1.None {
+				} else if !*activeStatus && stopPolicy != kueue.None {
 					filteredItems = append(filteredItems, lq)
 				}
 			}
diff --git a/cmd/kueuectl/app/create/create_clusterqueue.go b/cmd/kueuectl/app/create/create_clusterqueue.go
index 9d5dbc08a..5cb124856 100644
--- a/cmd/kueuectl/app/create/create_clusterqueue.go
+++ b/cmd/kueuectl/app/create/create_clusterqueue.go
@@ -33,7 +33,7 @@ import (
 	"k8s.io/kubectl/pkg/util/templates"
 	"k8s.io/utils/ptr"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/client-go/clientset/versioned/scheme"
 	kueuev1beta1 "sigs.k8s.io/kueue/client-go/clientset/versioned/typed/kueue/v1beta1"
 	"sigs.k8s.io/kueue/cmd/kueuectl/app/util"
@@ -91,11 +91,11 @@ type ClusterQueueOptions struct {
 	DryRunStrategy               util.DryRunStrategy
 	Name                         string
 	Cohort                       string
-	QueueingStrategy             v1beta1.QueueingStrategy
+	QueueingStrategy             kueue.QueueingStrategy
 	NamespaceSelector            metav1.LabelSelector
-	ReclaimWithinCohort          v1beta1.PreemptionPolicy
-	PreemptionWithinClusterQueue v1beta1.PreemptionPolicy
-	ResourceGroups               []v1beta1.ResourceGroup
+	ReclaimWithinCohort          kueue.PreemptionPolicy
+	PreemptionWithinClusterQueue kueue.PreemptionPolicy
+	ResourceGroups               []kueue.ResourceGroup
 
 	UserSpecifiedQueueingStrategy             string
 	UserSpecifiedNamespaceSelector            map[string]string
@@ -116,9 +116,9 @@ func NewClusterQueueOptions(streams genericiooptions.IOStreams) *ClusterQueueOpt
 	return &ClusterQueueOptions{
 		PrintFlags:                   genericclioptions.NewPrintFlags("created").WithTypeSetter(scheme.Scheme),
 		IOStreams:                    streams,
-		QueueingStrategy:             v1beta1.BestEffortFIFO,
-		ReclaimWithinCohort:          v1beta1.PreemptionPolicyNever,
-		PreemptionWithinClusterQueue: v1beta1.PreemptionPolicyNever,
+		QueueingStrategy:             kueue.BestEffortFIFO,
+		ReclaimWithinCohort:          kueue.PreemptionPolicyNever,
+		PreemptionWithinClusterQueue: kueue.PreemptionPolicyNever,
 	}
 }
 
@@ -184,7 +184,7 @@ func (o *ClusterQueueOptions) Complete(clientGetter util.ClientGetter, cmd *cobr
 	o.Name = args[0]
 
 	if cmd.Flags().Changed(queuingStrategy) {
-		o.QueueingStrategy = v1beta1.QueueingStrategy(o.UserSpecifiedQueueingStrategy)
+		o.QueueingStrategy = kueue.QueueingStrategy(o.UserSpecifiedQueueingStrategy)
 	}
 
 	if cmd.Flags().Changed(namespaceSelector) {
@@ -194,11 +194,11 @@ func (o *ClusterQueueOptions) Complete(clientGetter util.ClientGetter, cmd *cobr
 	}
 
 	if cmd.Flags().Changed(reclaimWithinCohort) {
-		o.ReclaimWithinCohort = v1beta1.PreemptionPolicy(o.UserSpecifiedReclaimWithinCohort)
+		o.ReclaimWithinCohort = kueue.PreemptionPolicy(o.UserSpecifiedReclaimWithinCohort)
 	}
 
 	if cmd.Flags().Changed(preemptionWithinClusterQueue) {
-		o.PreemptionWithinClusterQueue = v1beta1.PreemptionPolicy(o.UserSpecifiedPreemptionWithinClusterQueue)
+		o.PreemptionWithinClusterQueue = kueue.PreemptionPolicy(o.UserSpecifiedPreemptionWithinClusterQueue)
 	}
 
 	var err error
@@ -264,15 +264,15 @@ func (o *ClusterQueueOptions) Run(ctx context.Context) error {
 	return o.PrintObj(cq, o.Out)
 }
 
-func (o *ClusterQueueOptions) createClusterQueue() *v1beta1.ClusterQueue {
-	return &v1beta1.ClusterQueue{
-		TypeMeta:   metav1.TypeMeta{APIVersion: v1beta1.SchemeGroupVersion.String(), Kind: "ClusterQueue"},
+func (o *ClusterQueueOptions) createClusterQueue() *kueue.ClusterQueue {
+	return &kueue.ClusterQueue{
+		TypeMeta:   metav1.TypeMeta{APIVersion: kueue.SchemeGroupVersion.String(), Kind: "ClusterQueue"},
 		ObjectMeta: metav1.ObjectMeta{Name: o.Name},
-		Spec: v1beta1.ClusterQueueSpec{
-			Cohort:            v1beta1.CohortReference(o.Cohort),
+		Spec: kueue.ClusterQueueSpec{
+			Cohort:            kueue.CohortReference(o.Cohort),
 			QueueingStrategy:  o.QueueingStrategy,
 			NamespaceSelector: &o.NamespaceSelector,
-			Preemption: &v1beta1.ClusterQueuePreemption{
+			Preemption: &kueue.ClusterQueuePreemption{
 				ReclaimWithinCohort: o.ReclaimWithinCohort,
 				WithinClusterQueue:  o.PreemptionWithinClusterQueue,
 			},
@@ -312,8 +312,8 @@ func (o *ClusterQueueOptions) parseResourceGroups() error {
 	return nil
 }
 
-func parseUserSpecifiedResourceQuotas(resources []string, quotaType string) ([]v1beta1.ResourceGroup, error) {
-	var resourceGroups []v1beta1.ResourceGroup
+func parseUserSpecifiedResourceQuotas(resources []string, quotaType string) ([]kueue.ResourceGroup, error) {
+	var resourceGroups []kueue.ResourceGroup
 
 	regex := regexp.MustCompile(`^([a-z0-9][a-z0-9\-\.]{0,252}):((\w+[\.-]?)*\/?\w+=\w+;)*(\w+[\.-]?)*\/?\w+=\w+;?$`)
 	for _, r := range resources {
@@ -332,17 +332,17 @@ func parseUserSpecifiedResourceQuotas(resources []string, quotaType string) ([]v
 	return resourceGroups, nil
 }
 
-func toResourceGroup(spec, quotaType string) (v1beta1.ResourceGroup, error) {
+func toResourceGroup(spec, quotaType string) (kueue.ResourceGroup, error) {
 	flavorName, userSpecifiedResources := parseKeyValue(spec, ":")
 	resourceSpecs := strings.Split(userSpecifiedResources, ";")
 	flavorQuotas, err := toFlavorQuotas(flavorName, resourceSpecs, quotaType)
 	if err != nil {
-		return v1beta1.ResourceGroup{}, err
+		return kueue.ResourceGroup{}, err
 	}
 
-	return v1beta1.ResourceGroup{
+	return kueue.ResourceGroup{
 		CoveredResources: getCoveredResources(resourceSpecs),
-		Flavors: []v1beta1.FlavorQuotas{
+		Flavors: []kueue.FlavorQuotas{
 			flavorQuotas,
 		},
 	}, nil
@@ -358,32 +358,32 @@ func getCoveredResources(resourceSpecs []string) []corev1.ResourceName {
 	return coveredResources
 }
 
-func toFlavorQuotas(name string, resourceSpecs []string, quotaType string) (v1beta1.FlavorQuotas, error) {
-	resourceQuotas := make([]v1beta1.ResourceQuota, 0, len(resourceSpecs))
+func toFlavorQuotas(name string, resourceSpecs []string, quotaType string) (kueue.FlavorQuotas, error) {
+	resourceQuotas := make([]kueue.ResourceQuota, 0, len(resourceSpecs))
 	for _, spec := range resourceSpecs {
 		rq, err := toResourceQuota(spec, quotaType)
 		if err != nil {
-			return v1beta1.FlavorQuotas{}, err
+			return kueue.FlavorQuotas{}, err
 		}
 
 		resourceQuotas = append(resourceQuotas, rq)
 	}
 
-	return v1beta1.FlavorQuotas{
-		Name:      v1beta1.ResourceFlavorReference(name),
+	return kueue.FlavorQuotas{
+		Name:      kueue.ResourceFlavorReference(name),
 		Resources: resourceQuotas,
 	}, nil
 }
 
-func toResourceQuota(spec, quotaType string) (v1beta1.ResourceQuota, error) {
+func toResourceQuota(spec, quotaType string) (kueue.ResourceQuota, error) {
 	name, quota := parseKeyValue(spec, "=")
-	rq := v1beta1.ResourceQuota{
+	rq := kueue.ResourceQuota{
 		Name: corev1.ResourceName(name),
 	}
 
 	quantity, err := resource.ParseQuantity(quota)
 	if err != nil {
-		return v1beta1.ResourceQuota{}, errInvalidResourceQuota
+		return kueue.ResourceQuota{}, errInvalidResourceQuota
 	}
 
 	switch quotaType {
@@ -406,10 +406,10 @@ func parseKeyValue(str, sep string) (string, string) {
 	return strings.TrimSpace(pair[0]), strings.TrimSpace(pair[1])
 }
 
-func mergeResourcesByFlavor(resourceGroups []v1beta1.ResourceGroup) ([]v1beta1.ResourceGroup, error) {
-	var mergedResources []v1beta1.ResourceGroup
+func mergeResourcesByFlavor(resourceGroups []kueue.ResourceGroup) ([]kueue.ResourceGroup, error) {
+	var mergedResources []kueue.ResourceGroup
 
-	indexByFlavor := make(map[v1beta1.ResourceFlavorReference]int)
+	indexByFlavor := make(map[kueue.ResourceFlavorReference]int)
 	var index int
 	for _, rg := range resourceGroups {
 		flavorName := rg.Flavors[0].Name
@@ -432,11 +432,11 @@ func mergeResourcesByFlavor(resourceGroups []v1beta1.ResourceGroup) ([]v1beta1.R
 	return mergedResources, nil
 }
 
-func mergeResourceQuotas(rQuotas1, rQuotas2 []v1beta1.ResourceQuota) ([]v1beta1.ResourceQuota, error) {
-	var mergedResourceQuotas []v1beta1.ResourceQuota
+func mergeResourceQuotas(rQuotas1, rQuotas2 []kueue.ResourceQuota) ([]kueue.ResourceQuota, error) {
+	var mergedResourceQuotas []kueue.ResourceQuota
 
 	for _, rq1 := range rQuotas1 {
-		idx := slices.IndexFunc(rQuotas2, func(rq v1beta1.ResourceQuota) bool { return rq.Name == rq1.Name })
+		idx := slices.IndexFunc(rQuotas2, func(rq kueue.ResourceQuota) bool { return rq.Name == rq1.Name })
 		if idx == -1 {
 			// both ResourceQuota lists should contain exactly the same resource names
 			return mergedResourceQuotas, errResourceQuotaNotFound
@@ -459,8 +459,8 @@ func mergeResourceQuotas(rQuotas1, rQuotas2 []v1beta1.ResourceQuota) ([]v1beta1.
 	return mergedResourceQuotas, nil
 }
 
-func mergeFlavorsByCoveredResources(resourceGroups []v1beta1.ResourceGroup) ([]v1beta1.ResourceGroup, error) {
-	var mergedResources []v1beta1.ResourceGroup
+func mergeFlavorsByCoveredResources(resourceGroups []kueue.ResourceGroup) ([]kueue.ResourceGroup, error) {
+	var mergedResources []kueue.ResourceGroup
 
 	indexByResourceGroupID := make(map[string]int)
 	var index int
diff --git a/cmd/kueuectl/app/create/create_localqueue.go b/cmd/kueuectl/app/create/create_localqueue.go
index d760995e3..df6c7c37c 100644
--- a/cmd/kueuectl/app/create/create_localqueue.go
+++ b/cmd/kueuectl/app/create/create_localqueue.go
@@ -27,7 +27,7 @@ import (
 	"k8s.io/cli-runtime/pkg/printers"
 	"k8s.io/kubectl/pkg/util/templates"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/client-go/clientset/versioned/scheme"
 	kueuev1beta1 "sigs.k8s.io/kueue/client-go/clientset/versioned/typed/kueue/v1beta1"
 	"sigs.k8s.io/kueue/cmd/kueuectl/app/completion"
@@ -52,7 +52,7 @@ type LocalQueueOptions struct {
 	Name             string
 	Namespace        string
 	EnforceNamespace bool
-	ClusterQueue     v1beta1.ClusterQueueReference
+	ClusterQueue     kueue.ClusterQueueReference
 	IgnoreUnknownCq  bool
 
 	UserSpecifiedClusterQueue string
@@ -122,7 +122,7 @@ func (o *LocalQueueOptions) Complete(clientGetter util.ClientGetter, cmd *cobra.
 		return err
 	}
 
-	o.ClusterQueue = v1beta1.ClusterQueueReference(o.UserSpecifiedClusterQueue)
+	o.ClusterQueue = kueue.ClusterQueueReference(o.UserSpecifiedClusterQueue)
 
 	clientset, err := clientGetter.KueueClientSet()
 	if err != nil {
@@ -190,10 +190,10 @@ func (o *LocalQueueOptions) Run(ctx context.Context) error {
 	return o.PrintObj(lq, o.Out)
 }
 
-func (o *LocalQueueOptions) createLocalQueue() *v1beta1.LocalQueue {
-	return &v1beta1.LocalQueue{
-		TypeMeta:   metav1.TypeMeta{APIVersion: v1beta1.SchemeGroupVersion.String(), Kind: "LocalQueue"},
+func (o *LocalQueueOptions) createLocalQueue() *kueue.LocalQueue {
+	return &kueue.LocalQueue{
+		TypeMeta:   metav1.TypeMeta{APIVersion: kueue.SchemeGroupVersion.String(), Kind: "LocalQueue"},
 		ObjectMeta: metav1.ObjectMeta{Name: o.Name, Namespace: o.Namespace},
-		Spec:       v1beta1.LocalQueueSpec{ClusterQueue: o.ClusterQueue},
+		Spec:       kueue.LocalQueueSpec{ClusterQueue: o.ClusterQueue},
 	}
 }
diff --git a/cmd/kueuectl/app/create/create_resourceflavor.go b/cmd/kueuectl/app/create/create_resourceflavor.go
index 3286df5bd..d8048afdb 100644
--- a/cmd/kueuectl/app/create/create_resourceflavor.go
+++ b/cmd/kueuectl/app/create/create_resourceflavor.go
@@ -32,7 +32,7 @@ import (
 	"k8s.io/cli-runtime/pkg/printers"
 	"k8s.io/kubectl/pkg/util/templates"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/client-go/clientset/versioned/scheme"
 	kueuev1beta1 "sigs.k8s.io/kueue/client-go/clientset/versioned/typed/kueue/v1beta1"
 	"sigs.k8s.io/kueue/cmd/kueuectl/app/util"
@@ -186,11 +186,11 @@ func (o *ResourceFlavorOptions) Run(ctx context.Context) error {
 	return o.PrintObj(rf, o.Out)
 }
 
-func (o *ResourceFlavorOptions) createResourceFlavor() *v1beta1.ResourceFlavor {
-	return &v1beta1.ResourceFlavor{
-		TypeMeta:   metav1.TypeMeta{APIVersion: v1beta1.SchemeGroupVersion.String(), Kind: "ResourceFlavor"},
+func (o *ResourceFlavorOptions) createResourceFlavor() *kueue.ResourceFlavor {
+	return &kueue.ResourceFlavor{
+		TypeMeta:   metav1.TypeMeta{APIVersion: kueue.SchemeGroupVersion.String(), Kind: "ResourceFlavor"},
 		ObjectMeta: metav1.ObjectMeta{Name: o.Name},
-		Spec: v1beta1.ResourceFlavorSpec{
+		Spec: kueue.ResourceFlavorSpec{
 			NodeLabels:  o.NodeLabels,
 			NodeTaints:  o.NodeTaints,
 			Tolerations: o.Tolerations,
diff --git a/cmd/kueuectl/app/delete/delete_workload.go b/cmd/kueuectl/app/delete/delete_workload.go
index bf911fd47..3285371fd 100644
--- a/cmd/kueuectl/app/delete/delete_workload.go
+++ b/cmd/kueuectl/app/delete/delete_workload.go
@@ -34,7 +34,7 @@ import (
 	"k8s.io/utils/ptr"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/client-go/clientset/versioned/scheme"
 	kueuev1beta1 "sigs.k8s.io/kueue/client-go/clientset/versioned/typed/kueue/v1beta1"
 	"sigs.k8s.io/kueue/cmd/kueuectl/app/completion"
@@ -189,7 +189,7 @@ func GroupVersionResourceWithName(gvr schema.GroupVersionResource, name string)
 // Run delete a resource
 func (o *WorkloadOptions) Run(ctx context.Context) error {
 	var (
-		workloads               []*v1beta1.Workload
+		workloads               []*kueue.Workload
 		haveAssociatedResources bool
 		err                     error
 	)
@@ -233,7 +233,7 @@ func (o *WorkloadOptions) Run(ctx context.Context) error {
 	return nil
 }
 
-func (o *WorkloadOptions) getAllWorkloads(ctx context.Context) ([]*v1beta1.Workload, bool, error) {
+func (o *WorkloadOptions) getAllWorkloads(ctx context.Context) ([]*kueue.Workload, bool, error) {
 	var namespace string
 	if !o.AllNamespaces {
 		namespace = o.Namespace
@@ -246,7 +246,7 @@ func (o *WorkloadOptions) getAllWorkloads(ctx context.Context) ([]*v1beta1.Workl
 
 	var haveAssociatedWorkloads bool
 
-	workloads := make([]*v1beta1.Workload, 0, len(list.Items))
+	workloads := make([]*kueue.Workload, 0, len(list.Items))
 	for index := range list.Items {
 		wl := &list.Items[index]
 		workloads = append(workloads, wl)
@@ -258,10 +258,10 @@ func (o *WorkloadOptions) getAllWorkloads(ctx context.Context) ([]*v1beta1.Workl
 	return workloads, haveAssociatedWorkloads, nil
 }
 
-func (o *WorkloadOptions) getWorkloads(ctx context.Context) ([]*v1beta1.Workload, bool, error) {
+func (o *WorkloadOptions) getWorkloads(ctx context.Context) ([]*kueue.Workload, bool, error) {
 	var haveAssociatedWorkloads bool
 
-	workloads := make([]*v1beta1.Workload, 0, len(o.Names))
+	workloads := make([]*kueue.Workload, 0, len(o.Names))
 
 	for _, name := range o.Names {
 		wl, err := o.Client.Workloads(o.Namespace).Get(ctx, name, metav1.GetOptions{})
@@ -282,8 +282,8 @@ func (o *WorkloadOptions) getWorkloads(ctx context.Context) ([]*v1beta1.Workload
 	return workloads, haveAssociatedWorkloads, nil
 }
 
-func (o *WorkloadOptions) getWorkloadResources(workloads []*v1beta1.Workload) (map[*v1beta1.Workload][]GroupVersionResourceName, error) {
-	workloadResources := make(map[*v1beta1.Workload][]GroupVersionResourceName, len(workloads))
+func (o *WorkloadOptions) getWorkloadResources(workloads []*kueue.Workload) (map[*kueue.Workload][]GroupVersionResourceName, error) {
+	workloadResources := make(map[*kueue.Workload][]GroupVersionResourceName, len(workloads))
 
 	for _, wl := range workloads {
 		workloadResources[wl] = make([]GroupVersionResourceName, 0, len(wl.OwnerReferences))
@@ -306,7 +306,7 @@ func (o *WorkloadOptions) getWorkloadResources(workloads []*v1beta1.Workload) (m
 	return workloadResources, nil
 }
 
-func (o *WorkloadOptions) generateConfirmationMessage(workloadResources map[*v1beta1.Workload][]GroupVersionResourceName) string {
+func (o *WorkloadOptions) generateConfirmationMessage(workloadResources map[*kueue.Workload][]GroupVersionResourceName) string {
 	associatedResources := make([]string, 0, len(workloadResources))
 
 	for wl, resources := range workloadResources {
@@ -341,7 +341,7 @@ func (o *WorkloadOptions) confirmation(message string) bool {
 	return strings.EqualFold(input, "y")
 }
 
-func (o *WorkloadOptions) deleteWorkloads(ctx context.Context, workloadNameResources map[*v1beta1.Workload][]GroupVersionResourceName) error {
+func (o *WorkloadOptions) deleteWorkloads(ctx context.Context, workloadNameResources map[*kueue.Workload][]GroupVersionResourceName) error {
 	for wl, nrs := range workloadNameResources {
 		deleteOptions := metav1.DeleteOptions{}
 
diff --git a/cmd/kueuectl/app/list/list_clusterqueue.go b/cmd/kueuectl/app/list/list_clusterqueue.go
index 13885db68..1d4629a38 100644
--- a/cmd/kueuectl/app/list/list_clusterqueue.go
+++ b/cmd/kueuectl/app/list/list_clusterqueue.go
@@ -30,7 +30,7 @@ import (
 	"k8s.io/kubectl/pkg/util/templates"
 	"k8s.io/utils/clock"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/client-go/clientset/versioned/scheme"
 	kueuev1beta1 "sigs.k8s.io/kueue/client-go/clientset/versioned/typed/kueue/v1beta1"
 	"sigs.k8s.io/kueue/cmd/kueuectl/app/util"
@@ -207,12 +207,12 @@ func (o *ClusterQueueOptions) Run(ctx context.Context) error {
 	}
 }
 
-func (o *ClusterQueueOptions) filterList(cql *v1beta1.ClusterQueueList) {
+func (o *ClusterQueueOptions) filterList(cql *kueue.ClusterQueueList) {
 	if len(o.Active) == 0 {
 		return
 	}
 
-	filtered := make([]v1beta1.ClusterQueue, 0, len(cql.Items))
+	filtered := make([]kueue.ClusterQueue, 0, len(cql.Items))
 	for _, cq := range cql.Items {
 		if o.Active[0] && isActiveStatus(&cq) {
 			filtered = append(filtered, cq)
@@ -224,6 +224,6 @@ func (o *ClusterQueueOptions) filterList(cql *v1beta1.ClusterQueueList) {
 	cql.Items = filtered
 }
 
-func isActiveStatus(cq *v1beta1.ClusterQueue) bool {
-	return meta.IsStatusConditionTrue(cq.Status.Conditions, v1beta1.ClusterQueueActive)
+func isActiveStatus(cq *kueue.ClusterQueue) bool {
+	return meta.IsStatusConditionTrue(cq.Status.Conditions, kueue.ClusterQueueActive)
 }
diff --git a/cmd/kueuectl/app/list/list_clusterqueue_printer.go b/cmd/kueuectl/app/list/list_clusterqueue_printer.go
index bb71f3327..7730760df 100644
--- a/cmd/kueuectl/app/list/list_clusterqueue_printer.go
+++ b/cmd/kueuectl/app/list/list_clusterqueue_printer.go
@@ -26,7 +26,7 @@ import (
 	"k8s.io/cli-runtime/pkg/printers"
 	"k8s.io/utils/clock"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 )
 
 type listClusterQueuePrinter struct {
@@ -39,7 +39,7 @@ var _ printers.ResourcePrinter = (*listClusterQueuePrinter)(nil)
 func (p *listClusterQueuePrinter) PrintObj(obj runtime.Object, out io.Writer) error {
 	printer := printers.NewTablePrinter(p.printOptions)
 
-	list, ok := obj.(*v1beta1.ClusterQueueList)
+	list, ok := obj.(*kueue.ClusterQueueList)
 	if !ok {
 		return errors.New("invalid object type")
 	}
@@ -75,7 +75,7 @@ func newClusterQueueTablePrinter() *listClusterQueuePrinter {
 	}
 }
 
-func (p *listClusterQueuePrinter) printClusterQueueList(list *v1beta1.ClusterQueueList) []metav1.TableRow {
+func (p *listClusterQueuePrinter) printClusterQueueList(list *kueue.ClusterQueueList) []metav1.TableRow {
 	rows := make([]metav1.TableRow, len(list.Items))
 	for index := range list.Items {
 		rows[index] = p.printClusterQueue(&list.Items[index])
@@ -83,7 +83,7 @@ func (p *listClusterQueuePrinter) printClusterQueueList(list *v1beta1.ClusterQue
 	return rows
 }
 
-func (p *listClusterQueuePrinter) printClusterQueue(clusterQueue *v1beta1.ClusterQueue) metav1.TableRow {
+func (p *listClusterQueuePrinter) printClusterQueue(clusterQueue *kueue.ClusterQueue) metav1.TableRow {
 	row := metav1.TableRow{
 		Object: runtime.RawExtension{Object: clusterQueue},
 	}
diff --git a/cmd/kueuectl/app/list/list_localqueue.go b/cmd/kueuectl/app/list/list_localqueue.go
index fdce02bd8..d9d55cc6b 100644
--- a/cmd/kueuectl/app/list/list_localqueue.go
+++ b/cmd/kueuectl/app/list/list_localqueue.go
@@ -28,7 +28,7 @@ import (
 	"k8s.io/kubectl/pkg/util/templates"
 	"k8s.io/utils/clock"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/client-go/clientset/versioned/scheme"
 	kueuev1beta1 "sigs.k8s.io/kueue/client-go/clientset/versioned/typed/kueue/v1beta1"
 	"sigs.k8s.io/kueue/cmd/kueuectl/app/completion"
@@ -205,11 +205,11 @@ func (o *LocalQueueOptions) Run(ctx context.Context) error {
 	}
 }
 
-func (o *LocalQueueOptions) filterList(list *v1beta1.LocalQueueList) {
+func (o *LocalQueueOptions) filterList(list *kueue.LocalQueueList) {
 	if len(o.ClusterQueueFilter) > 0 {
-		filteredItems := make([]v1beta1.LocalQueue, 0, len(o.ClusterQueueFilter))
+		filteredItems := make([]kueue.LocalQueue, 0, len(o.ClusterQueueFilter))
 		for _, lq := range list.Items {
-			if lq.Spec.ClusterQueue == v1beta1.ClusterQueueReference(o.ClusterQueueFilter) {
+			if lq.Spec.ClusterQueue == kueue.ClusterQueueReference(o.ClusterQueueFilter) {
 				filteredItems = append(filteredItems, lq)
 			}
 		}
diff --git a/cmd/kueuectl/app/list/list_localqueue_printer.go b/cmd/kueuectl/app/list/list_localqueue_printer.go
index 616cb9ded..f5bc3bd15 100644
--- a/cmd/kueuectl/app/list/list_localqueue_printer.go
+++ b/cmd/kueuectl/app/list/list_localqueue_printer.go
@@ -26,7 +26,7 @@ import (
 	"k8s.io/cli-runtime/pkg/printers"
 	"k8s.io/utils/clock"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 )
 
 type listLocalQueuePrinter struct {
@@ -39,7 +39,7 @@ var _ printers.ResourcePrinter = (*listLocalQueuePrinter)(nil)
 func (p *listLocalQueuePrinter) PrintObj(obj runtime.Object, out io.Writer) error {
 	printer := printers.NewTablePrinter(p.printOptions)
 
-	list, ok := obj.(*v1beta1.LocalQueueList)
+	list, ok := obj.(*kueue.LocalQueueList)
 	if !ok {
 		return errors.New("invalid object type")
 	}
@@ -79,7 +79,7 @@ func newLocalQueueTablePrinter() *listLocalQueuePrinter {
 	}
 }
 
-func (p *listLocalQueuePrinter) printLocalQueueList(list *v1beta1.LocalQueueList) []metav1.TableRow {
+func (p *listLocalQueuePrinter) printLocalQueueList(list *kueue.LocalQueueList) []metav1.TableRow {
 	rows := make([]metav1.TableRow, len(list.Items))
 	for index := range list.Items {
 		rows[index] = p.printLocalQueue(&list.Items[index])
@@ -87,7 +87,7 @@ func (p *listLocalQueuePrinter) printLocalQueueList(list *v1beta1.LocalQueueList
 	return rows
 }
 
-func (p *listLocalQueuePrinter) printLocalQueue(localQueue *v1beta1.LocalQueue) metav1.TableRow {
+func (p *listLocalQueuePrinter) printLocalQueue(localQueue *kueue.LocalQueue) metav1.TableRow {
 	row := metav1.TableRow{
 		Object: runtime.RawExtension{Object: localQueue},
 	}
diff --git a/cmd/kueuectl/app/list/list_resourceflavor_printer.go b/cmd/kueuectl/app/list/list_resourceflavor_printer.go
index 2c29c861b..c70cc1d32 100644
--- a/cmd/kueuectl/app/list/list_resourceflavor_printer.go
+++ b/cmd/kueuectl/app/list/list_resourceflavor_printer.go
@@ -29,7 +29,7 @@ import (
 	"k8s.io/cli-runtime/pkg/printers"
 	"k8s.io/utils/clock"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 )
 
 type listResourceFlavorPrinter struct {
@@ -42,7 +42,7 @@ var _ printers.ResourcePrinter = (*listResourceFlavorPrinter)(nil)
 func (p *listResourceFlavorPrinter) PrintObj(obj runtime.Object, out io.Writer) error {
 	printer := printers.NewTablePrinter(p.printOptions)
 
-	list, ok := obj.(*v1beta1.ResourceFlavorList)
+	list, ok := obj.(*kueue.ResourceFlavorList)
 	if !ok {
 		return errors.New("invalid object type")
 	}
@@ -75,7 +75,7 @@ func newResourceFlavorTablePrinter() *listResourceFlavorPrinter {
 	}
 }
 
-func (p *listResourceFlavorPrinter) printResourceFlavorList(list *v1beta1.ResourceFlavorList) []metav1.TableRow {
+func (p *listResourceFlavorPrinter) printResourceFlavorList(list *kueue.ResourceFlavorList) []metav1.TableRow {
 	rows := make([]metav1.TableRow, len(list.Items))
 	for index := range list.Items {
 		rows[index] = p.printResourceFlavor(&list.Items[index])
@@ -83,7 +83,7 @@ func (p *listResourceFlavorPrinter) printResourceFlavorList(list *v1beta1.Resour
 	return rows
 }
 
-func (p *listResourceFlavorPrinter) printResourceFlavor(resourceFlavor *v1beta1.ResourceFlavor) metav1.TableRow {
+func (p *listResourceFlavorPrinter) printResourceFlavor(resourceFlavor *kueue.ResourceFlavor) metav1.TableRow {
 	row := metav1.TableRow{Object: runtime.RawExtension{Object: resourceFlavor}}
 	nodeLabels := make([]string, 0, len(resourceFlavor.Spec.NodeLabels))
 	for key, value := range resourceFlavor.Spec.NodeLabels {
diff --git a/cmd/kueuectl/app/list/list_workload.go b/cmd/kueuectl/app/list/list_workload.go
index 322f0f9e8..db67f35f0 100644
--- a/cmd/kueuectl/app/list/list_workload.go
+++ b/cmd/kueuectl/app/list/list_workload.go
@@ -35,7 +35,7 @@ import (
 	"k8s.io/utils/clock"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	visibility "sigs.k8s.io/kueue/apis/visibility/v1beta1"
 	clientset "sigs.k8s.io/kueue/client-go/clientset/versioned"
 	"sigs.k8s.io/kueue/client-go/clientset/versioned/scheme"
@@ -346,11 +346,11 @@ func (o *WorkloadOptions) Run(ctx context.Context) error {
 	}
 }
 
-func (o *WorkloadOptions) filterList(list *v1beta1.WorkloadList, enableOwnerReferenceFilter bool, uid types.UID) {
+func (o *WorkloadOptions) filterList(list *kueue.WorkloadList, enableOwnerReferenceFilter bool, uid types.UID) {
 	if len(list.Items) == 0 {
 		return
 	}
-	filteredItems := make([]v1beta1.Workload, 0, len(o.LocalQueueFilter))
+	filteredItems := make([]kueue.Workload, 0, len(o.LocalQueueFilter))
 	for _, wl := range list.Items {
 		if o.filterByLocalQueue(&wl) && o.filterByClusterQueue(&wl) && o.filterByStatuses(&wl) &&
 			o.filterByOwnerReference(&wl, enableOwnerReferenceFilter, uid) {
@@ -360,16 +360,16 @@ func (o *WorkloadOptions) filterList(list *v1beta1.WorkloadList, enableOwnerRefe
 	list.Items = filteredItems
 }
 
-func (o *WorkloadOptions) filterByLocalQueue(wl *v1beta1.Workload) bool {
+func (o *WorkloadOptions) filterByLocalQueue(wl *kueue.Workload) bool {
 	return len(o.LocalQueueFilter) == 0 || string(wl.Spec.QueueName) == o.LocalQueueFilter
 }
 
-func (o *WorkloadOptions) filterByClusterQueue(wl *v1beta1.Workload) bool {
+func (o *WorkloadOptions) filterByClusterQueue(wl *kueue.Workload) bool {
 	return len(o.ClusterQueueFilter) == 0 || wl.Status.Admission != nil &&
-		wl.Status.Admission.ClusterQueue == v1beta1.ClusterQueueReference(o.ClusterQueueFilter)
+		wl.Status.Admission.ClusterQueue == kueue.ClusterQueueReference(o.ClusterQueueFilter)
 }
 
-func (o *WorkloadOptions) filterByStatuses(wl *v1beta1.Workload) bool {
+func (o *WorkloadOptions) filterByStatuses(wl *kueue.Workload) bool {
 	if o.StatusesFilter.Len() == 0 || o.StatusesFilter.Has(workloadStatusAll) {
 		return true
 	}
@@ -395,7 +395,7 @@ func (o *WorkloadOptions) filterByStatuses(wl *v1beta1.Workload) bool {
 	return false
 }
 
-func (o *WorkloadOptions) filterByOwnerReference(wl *v1beta1.Workload, isEnabled bool, uid types.UID) bool {
+func (o *WorkloadOptions) filterByOwnerReference(wl *kueue.Workload, isEnabled bool, uid types.UID) bool {
 	if !isEnabled {
 		return true
 	}
@@ -409,8 +409,8 @@ func (o *WorkloadOptions) filterByOwnerReference(wl *v1beta1.Workload, isEnabled
 	return false
 }
 
-func (o *WorkloadOptions) localQueues(ctx context.Context, list *v1beta1.WorkloadList) (map[string]*v1beta1.LocalQueue, error) {
-	localQueues := make(map[string]*v1beta1.LocalQueue)
+func (o *WorkloadOptions) localQueues(ctx context.Context, list *kueue.WorkloadList) (map[string]*kueue.LocalQueue, error) {
+	localQueues := make(map[string]*kueue.LocalQueue)
 	for _, wl := range list.Items {
 		// It's not necessary to get localqueue if we have clusterqueue name on Admission status.
 		if wl.Status.Admission != nil && len(wl.Status.Admission.ClusterQueue) > 0 {
@@ -430,17 +430,17 @@ func (o *WorkloadOptions) localQueues(ctx context.Context, list *v1beta1.Workloa
 	return localQueues, nil
 }
 
-func (o *WorkloadOptions) pendingWorkloads(ctx context.Context, list *v1beta1.WorkloadList, localQueues map[string]*v1beta1.LocalQueue) (map[workload.Reference]*visibility.PendingWorkload, error) {
+func (o *WorkloadOptions) pendingWorkloads(ctx context.Context, list *kueue.WorkloadList, localQueues map[string]*kueue.LocalQueue) (map[workload.Reference]*visibility.PendingWorkload, error) {
 	var err error
 
 	pendingWorkloads := make(map[workload.Reference]*visibility.PendingWorkload)
-	pendingWorkloadsSummaries := make(map[v1beta1.ClusterQueueReference]*visibility.PendingWorkloadsSummary)
+	pendingWorkloadsSummaries := make(map[kueue.ClusterQueueReference]*visibility.PendingWorkloadsSummary)
 
 	for _, wl := range list.Items {
 		if !workloadPending(&wl) {
 			continue
 		}
-		var clusterQueueName v1beta1.ClusterQueueReference
+		var clusterQueueName kueue.ClusterQueueReference
 		if wl.Status.Admission != nil && len(wl.Status.Admission.ClusterQueue) > 0 {
 			clusterQueueName = wl.Status.Admission.ClusterQueue
 		} else if lq := localQueues[localQueueKeyForWorkload(&wl)]; lq != nil {
@@ -474,7 +474,7 @@ func (o *WorkloadOptions) pendingWorkloads(ctx context.Context, list *v1beta1.Wo
 	return pendingWorkloads, nil
 }
 
-func (o *WorkloadOptions) apiResources(list *v1beta1.WorkloadList) (map[string]*metav1.APIResourceList, error) {
+func (o *WorkloadOptions) apiResources(list *kueue.WorkloadList) (map[string]*metav1.APIResourceList, error) {
 	apiResourceLists := make(map[string]*metav1.APIResourceList)
 	for _, wl := range list.Items {
 		for _, ref := range wl.OwnerReferences {
@@ -493,10 +493,10 @@ func (o *WorkloadOptions) apiResources(list *v1beta1.WorkloadList) (map[string]*
 	return apiResourceLists, nil
 }
 
-func workloadPending(wl *v1beta1.Workload) bool {
+func workloadPending(wl *kueue.Workload) bool {
 	return workload.Status(wl) == workload.StatusPending
 }
 
-func localQueueKeyForWorkload(wl *v1beta1.Workload) string {
+func localQueueKeyForWorkload(wl *kueue.Workload) string {
 	return fmt.Sprintf("%s/%s", wl.Namespace, wl.Spec.QueueName)
 }
diff --git a/cmd/kueuectl/app/list/list_workload_printer.go b/cmd/kueuectl/app/list/list_workload_printer.go
index e2bd8dc8e..09346a5eb 100644
--- a/cmd/kueuectl/app/list/list_workload_printer.go
+++ b/cmd/kueuectl/app/list/list_workload_printer.go
@@ -30,7 +30,7 @@ import (
 	"k8s.io/cli-runtime/pkg/printers"
 	"k8s.io/utils/clock"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	visibility "sigs.k8s.io/kueue/apis/visibility/v1beta1"
 	"sigs.k8s.io/kueue/pkg/workload"
 )
@@ -38,14 +38,14 @@ import (
 const crdTypeMaxLength = 20
 
 type listWorkloadResources struct {
-	localQueues      map[string]*v1beta1.LocalQueue
+	localQueues      map[string]*kueue.LocalQueue
 	pendingWorkloads map[workload.Reference]*visibility.PendingWorkload
 	apiResourceLists map[string]*metav1.APIResourceList
 }
 
 func newListWorkloadResources() *listWorkloadResources {
 	return &listWorkloadResources{
-		localQueues:      make(map[string]*v1beta1.LocalQueue),
+		localQueues:      make(map[string]*kueue.LocalQueue),
 		pendingWorkloads: make(map[workload.Reference]*visibility.PendingWorkload),
 		apiResourceLists: make(map[string]*metav1.APIResourceList),
 	}
@@ -62,7 +62,7 @@ var _ printers.ResourcePrinter = (*listWorkloadPrinter)(nil)
 func (p *listWorkloadPrinter) PrintObj(obj runtime.Object, out io.Writer) error {
 	printer := printers.NewTablePrinter(p.printOptions)
 
-	list, ok := obj.(*v1beta1.WorkloadList)
+	list, ok := obj.(*kueue.WorkloadList)
 	if !ok {
 		return errors.New("invalid object type")
 	}
@@ -115,7 +115,7 @@ func newWorkloadTablePrinter() *listWorkloadPrinter {
 	}
 }
 
-func (p *listWorkloadPrinter) printWorkloadList(list *v1beta1.WorkloadList) []metav1.TableRow {
+func (p *listWorkloadPrinter) printWorkloadList(list *kueue.WorkloadList) []metav1.TableRow {
 	rows := make([]metav1.TableRow, len(list.Items))
 	for index := range list.Items {
 		rows[index] = p.printWorkload(&list.Items[index])
@@ -123,7 +123,7 @@ func (p *listWorkloadPrinter) printWorkloadList(list *v1beta1.WorkloadList) []me
 	return rows
 }
 
-func (p *listWorkloadPrinter) printWorkload(wl *v1beta1.Workload) metav1.TableRow {
+func (p *listWorkloadPrinter) printWorkload(wl *kueue.Workload) metav1.TableRow {
 	row := metav1.TableRow{
 		Object: runtime.RawExtension{Object: wl},
 	}
@@ -141,11 +141,11 @@ func (p *listWorkloadPrinter) printWorkload(wl *v1beta1.Workload) metav1.TableRo
 	}
 
 	var execTime string
-	if admittedCond := apimeta.FindStatusCondition(wl.Status.Conditions, v1beta1.WorkloadAdmitted); admittedCond != nil &&
+	if admittedCond := apimeta.FindStatusCondition(wl.Status.Conditions, kueue.WorkloadAdmitted); admittedCond != nil &&
 		admittedCond.Status == metav1.ConditionTrue {
 		finishedTime := p.clock.Now()
 
-		if finishedCond := apimeta.FindStatusCondition(wl.Status.Conditions, v1beta1.WorkloadFinished); finishedCond != nil &&
+		if finishedCond := apimeta.FindStatusCondition(wl.Status.Conditions, kueue.WorkloadFinished); finishedCond != nil &&
 			finishedCond.Status == metav1.ConditionTrue {
 			finishedTime = finishedCond.LastTransitionTime.Time
 		}
@@ -168,7 +168,7 @@ func (p *listWorkloadPrinter) printWorkload(wl *v1beta1.Workload) metav1.TableRo
 	return row
 }
 
-func (p *listWorkloadPrinter) crdTypes(wl *v1beta1.Workload) []string {
+func (p *listWorkloadPrinter) crdTypes(wl *kueue.Workload) []string {
 	crdTypes := sets.New[string]()
 
 	for _, ref := range wl.OwnerReferences {
@@ -191,7 +191,7 @@ func (p *listWorkloadPrinter) crdTypes(wl *v1beta1.Workload) []string {
 	return crdTypes.UnsortedList()
 }
 
-func (p *listWorkloadPrinter) crdNames(wl *v1beta1.Workload) []string {
+func (p *listWorkloadPrinter) crdNames(wl *kueue.Workload) []string {
 	crdNames := sets.New[string]()
 
 	for _, ref := range wl.OwnerReferences {
diff --git a/cmd/kueuectl/app/resume/resume_clusterqueue.go b/cmd/kueuectl/app/resume/resume_clusterqueue.go
index 581d97546..02806f2a8 100644
--- a/cmd/kueuectl/app/resume/resume_clusterqueue.go
+++ b/cmd/kueuectl/app/resume/resume_clusterqueue.go
@@ -29,7 +29,7 @@ import (
 	"k8s.io/utils/ptr"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/client-go/clientset/versioned/scheme"
 	kueuev1beta1 "sigs.k8s.io/kueue/client-go/clientset/versioned/typed/kueue/v1beta1"
 	"sigs.k8s.io/kueue/cmd/kueuectl/app/completion"
@@ -115,7 +115,7 @@ func (o *ClusterQueueOptions) Run(ctx context.Context) error {
 	}
 
 	cqOriginal := cq.DeepCopy()
-	cq.Spec.StopPolicy = ptr.To(v1beta1.None)
+	cq.Spec.StopPolicy = ptr.To(kueue.None)
 
 	opts := metav1.PatchOptions{}
 	patch := client.MergeFrom(cqOriginal)
diff --git a/cmd/kueuectl/app/resume/resume_localqueue.go b/cmd/kueuectl/app/resume/resume_localqueue.go
index 4c58f89f1..55dce5666 100644
--- a/cmd/kueuectl/app/resume/resume_localqueue.go
+++ b/cmd/kueuectl/app/resume/resume_localqueue.go
@@ -29,7 +29,7 @@ import (
 	"k8s.io/utils/ptr"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/client-go/clientset/versioned/scheme"
 	kueuev1beta1 "sigs.k8s.io/kueue/client-go/clientset/versioned/typed/kueue/v1beta1"
 	"sigs.k8s.io/kueue/cmd/kueuectl/app/completion"
@@ -126,7 +126,7 @@ func (o *LocalQueueOptions) Run(ctx context.Context) error {
 	}
 
 	lqOriginal := lq.DeepCopy()
-	lq.Spec.StopPolicy = ptr.To(v1beta1.None)
+	lq.Spec.StopPolicy = ptr.To(kueue.None)
 
 	opts := metav1.PatchOptions{}
 	patch := client.MergeFrom(lqOriginal)
diff --git a/cmd/kueuectl/app/stop/stop_clusterqueue.go b/cmd/kueuectl/app/stop/stop_clusterqueue.go
index 3e5e77436..d7794ae59 100644
--- a/cmd/kueuectl/app/stop/stop_clusterqueue.go
+++ b/cmd/kueuectl/app/stop/stop_clusterqueue.go
@@ -29,7 +29,7 @@ import (
 	"k8s.io/utils/ptr"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/client-go/clientset/versioned/scheme"
 	kueuev1beta1 "sigs.k8s.io/kueue/client-go/clientset/versioned/typed/kueue/v1beta1"
 	"sigs.k8s.io/kueue/cmd/kueuectl/app/completion"
@@ -139,10 +139,10 @@ func (o *ClusterQueueOptions) Run(ctx context.Context) error {
 	return o.PrintObj(cq, o.Out)
 }
 
-func (o *ClusterQueueOptions) stopClusterQueue(cq *v1beta1.ClusterQueue) {
+func (o *ClusterQueueOptions) stopClusterQueue(cq *kueue.ClusterQueue) {
 	if o.KeepAlreadyRunning {
-		cq.Spec.StopPolicy = ptr.To(v1beta1.Hold)
+		cq.Spec.StopPolicy = ptr.To(kueue.Hold)
 	} else {
-		cq.Spec.StopPolicy = ptr.To(v1beta1.HoldAndDrain)
+		cq.Spec.StopPolicy = ptr.To(kueue.HoldAndDrain)
 	}
 }
diff --git a/cmd/kueuectl/app/stop/stop_localqueue.go b/cmd/kueuectl/app/stop/stop_localqueue.go
index e4634ccd5..6532a8c17 100644
--- a/cmd/kueuectl/app/stop/stop_localqueue.go
+++ b/cmd/kueuectl/app/stop/stop_localqueue.go
@@ -29,7 +29,7 @@ import (
 	"k8s.io/utils/ptr"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/client-go/clientset/versioned/scheme"
 	kueuev1beta1 "sigs.k8s.io/kueue/client-go/clientset/versioned/typed/kueue/v1beta1"
 	"sigs.k8s.io/kueue/cmd/kueuectl/app/completion"
@@ -150,10 +150,10 @@ func (o *LocalQueueOptions) Run(ctx context.Context) error {
 	return o.PrintObj(lq, o.Out)
 }
 
-func (o *LocalQueueOptions) stopLocalQueue(lq *v1beta1.LocalQueue) {
+func (o *LocalQueueOptions) stopLocalQueue(lq *kueue.LocalQueue) {
 	if o.KeepAlreadyRunning {
-		lq.Spec.StopPolicy = ptr.To(v1beta1.Hold)
+		lq.Spec.StopPolicy = ptr.To(kueue.Hold)
 	} else {
-		lq.Spec.StopPolicy = ptr.To(v1beta1.HoldAndDrain)
+		lq.Spec.StopPolicy = ptr.To(kueue.HoldAndDrain)
 	}
 }
diff --git a/pkg/cache/queue/manager.go b/pkg/cache/queue/manager.go
index cfbef5a4f..aa7701f36 100644
--- a/pkg/cache/queue/manager.go
+++ b/pkg/cache/queue/manager.go
@@ -816,7 +816,7 @@ func (m *Manager) DeleteSecondPassWithoutLock(w *kueue.Workload) {
 func (m *Manager) QueueSecondPassIfNeeded(ctx context.Context, w *kueue.Workload, iteration int) bool {
 	if workload.NeedsSecondPass(w) {
 		iteration++
-		delay := nextDelay(iteration)
+		delay := m.secondPassQueue.nextDelay(iteration)
 		log := ctrl.LoggerFrom(ctx)
 		log.V(3).Info("Workload pre-queued for second pass (with backoff)", "workload", workload.Key(w), "delay", delay)
 		m.secondPassQueue.prequeue(w)
diff --git a/pkg/cache/queue/second_pass_queue.go b/pkg/cache/queue/second_pass_queue.go
index c5a6066b4..929753152 100644
--- a/pkg/cache/queue/second_pass_queue.go
+++ b/pkg/cache/queue/second_pass_queue.go
@@ -21,15 +21,16 @@ import (
 	"time"
 
 	"k8s.io/apimachinery/pkg/util/sets"
-	"k8s.io/apimachinery/pkg/util/wait"
 
 	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	"sigs.k8s.io/kueue/pkg/util/wait"
 	"sigs.k8s.io/kueue/pkg/workload"
 )
 
 const (
-	backoffFactor = 2
-	backoffCap    = 30 * time.Second
+	initialBackoff = time.Second
+	backoffFactor  = 2
+	maxBackoff     = 30 * time.Second
 )
 
 type secondPassQueue struct {
@@ -37,12 +38,15 @@ type secondPassQueue struct {
 
 	prequeued sets.Set[workload.Reference]
 	queued    map[workload.Reference]*workload.Info
+
+	backoff wait.Backoff
 }
 
 func newSecondPassQueue() *secondPassQueue {
 	return &secondPassQueue{
 		prequeued: sets.New[workload.Reference](),
 		queued:    make(map[workload.Reference]*workload.Info),
+		backoff:   wait.NewBackoff(initialBackoff, maxBackoff, backoffFactor, 0),
 	}
 }
 
@@ -86,19 +90,6 @@ func (q *secondPassQueue) deleteByKey(key workload.Reference) {
 	q.prequeued.Delete(key)
 }
 
-// nextDelay returns the next backoff duration for the given iteration.
-func nextDelay(iteration int) time.Duration {
-	backoff := &wait.Backoff{
-		Duration: time.Second,
-		Factor:   backoffFactor,
-		Steps:    iteration,
-		Cap:      backoffCap,
-	}
-
-	var waitDuration time.Duration
-	for backoff.Steps > 0 {
-		waitDuration = backoff.Step()
-	}
-
-	return waitDuration
+func (q *secondPassQueue) nextDelay(iteration int) time.Duration {
+	return q.backoff.WaitTime(iteration)
 }
diff --git a/pkg/cache/scheduler/clusterqueue.go b/pkg/cache/scheduler/clusterqueue.go
index 93587c72b..5add8c53a 100644
--- a/pkg/cache/scheduler/clusterqueue.go
+++ b/pkg/cache/scheduler/clusterqueue.go
@@ -60,7 +60,6 @@ type clusterQueue struct {
 	FlavorFungibility kueue.FlavorFungibility
 	// Aggregates AdmissionChecks from both .spec.AdmissionChecks and .spec.AdmissionCheckStrategy
 	// Sets hold ResourceFlavors to which an AdmissionCheck should apply.
-	// In case its empty, it means an AdmissionCheck should apply to all ResourceFlavor
 	AdmissionChecks map[kueue.AdmissionCheckReference]sets.Set[kueue.ResourceFlavorReference]
 	Status          metrics.ClusterQueueStatus
 	// AllocatableResourceGeneration will be increased when some admitted workloads are
@@ -372,7 +371,7 @@ func (c *clusterQueue) updateWithAdmissionChecks(log logr.Logger, checks map[kue
 				// - cannot use multiple MultiKueue AdmissionChecks on the same ClusterQueue
 				// - cannot use specify MultiKueue AdmissionCheck per flavor
 				multiKueueAdmissionChecks.Insert(acName)
-				if flavors.Len() != 0 {
+				if !flavors.Equal(AllFlavors(c.ResourceGroups)) {
 					perFlavorMultiKueueChecks = append(perFlavorMultiKueueChecks, acName)
 				}
 			}
@@ -638,17 +637,7 @@ func (c *clusterQueue) isTASOnly() bool {
 func (c *clusterQueue) flavorsWithProvReqAdmissionCheck() sets.Set[kueue.ResourceFlavorReference] {
 	flvs := sets.New[kueue.ResourceFlavorReference]()
 	for _, ac := range c.provisioningAdmissionChecks {
-		flvs.Insert(c.flavorsForAdmissionCheck(ac).UnsortedList()...)
-	}
-	return flvs
-}
-
-func (c *clusterQueue) flavorsForAdmissionCheck(ac kueue.AdmissionCheckReference) sets.Set[kueue.ResourceFlavorReference] {
-	flvs := sets.New(c.AdmissionChecks[ac].UnsortedList()...)
-	if len(c.AdmissionChecks[ac]) == 0 {
-		for _, rg := range c.ResourceGroups {
-			flvs.Insert(rg.Flavors...)
-		}
+		flvs.Insert(c.AdmissionChecks[ac].UnsortedList()...)
 	}
 	return flvs
 }
diff --git a/pkg/cache/scheduler/resource.go b/pkg/cache/scheduler/resource.go
index 775dda245..208ff9438 100644
--- a/pkg/cache/scheduler/resource.go
+++ b/pkg/cache/scheduler/resource.go
@@ -24,6 +24,7 @@ import (
 	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/pkg/features"
 	"sigs.k8s.io/kueue/pkg/resources"
+	utilslices "sigs.k8s.io/kueue/pkg/util/slices"
 )
 
 type ResourceGroup struct {
@@ -73,3 +74,13 @@ func createResourceQuotas(kueueRgs []kueue.ResourceGroup) map[resources.FlavorRe
 	}
 	return quotas
 }
+
+func AllFlavors(rgs []ResourceGroup) sets.Set[kueue.ResourceFlavorReference] {
+	return utilslices.Reduce(
+		rgs,
+		func(acc sets.Set[kueue.ResourceFlavorReference], rg ResourceGroup) sets.Set[kueue.ResourceFlavorReference] {
+			return acc.Insert(rg.Flavors...)
+		},
+		sets.New[kueue.ResourceFlavorReference](),
+	)
+}
diff --git a/pkg/cache/scheduler/tas_flavor_snapshot.go b/pkg/cache/scheduler/tas_flavor_snapshot.go
index cf7ab519a..347338f4b 100644
--- a/pkg/cache/scheduler/tas_flavor_snapshot.go
+++ b/pkg/cache/scheduler/tas_flavor_snapshot.go
@@ -1084,7 +1084,7 @@ func (s *TASFlavorSnapshot) consumeWithLeadersGeneric(domain *domain, remainingD
 	if *withLeader >= *remainingPrimary && domain.leaderState >= *remainingLeaderCount {
 		*primary = *remainingPrimary
 		domain.leaderState = *remainingLeaderCount
-		domain.state = (*remainingPrimary) * sliceSize
+		domain.state = *remainingPrimary * sliceSize
 		return domain, true
 	}
 
@@ -1096,7 +1096,7 @@ func (s *TASFlavorSnapshot) consumeWithLeadersGeneric(domain *domain, remainingD
 		if domain.leaderState > *remainingLeaderCount {
 			domain.leaderState = *remainingLeaderCount
 		}
-		domain.state = (*withLeader) * sliceSize
+		domain.state = *withLeader * sliceSize
 		*remainingLeaderCount -= domain.leaderState
 		*remainingPrimary -= *withLeader
 		return domain, false
diff --git a/pkg/controller/core/workload_controller.go b/pkg/controller/core/workload_controller.go
index ee0dad9d5..201443f0a 100644
--- a/pkg/controller/core/workload_controller.go
+++ b/pkg/controller/core/workload_controller.go
@@ -57,6 +57,7 @@ import (
 	"sigs.k8s.io/kueue/pkg/features"
 	"sigs.k8s.io/kueue/pkg/metrics"
 	"sigs.k8s.io/kueue/pkg/util/admissioncheck"
+	qutil "sigs.k8s.io/kueue/pkg/util/queue"
 	utilslices "sigs.k8s.io/kueue/pkg/util/slices"
 	stringsutils "sigs.k8s.io/kueue/pkg/util/strings"
 	"sigs.k8s.io/kueue/pkg/workload"
@@ -548,7 +549,7 @@ func (r *WorkloadReconciler) reconcileCheckBasedEviction(ctx context.Context, wl
 
 func (r *WorkloadReconciler) reconcileSyncAdmissionChecks(ctx context.Context, wl *kueue.Workload, cq *kueue.ClusterQueue) (bool, error) {
 	log := ctrl.LoggerFrom(ctx)
-	admissionChecks := workload.AdmissionChecksForWorkload(log, wl, admissioncheck.NewAdmissionChecks(cq))
+	admissionChecks := workload.AdmissionChecksForWorkload(log, wl, admissioncheck.NewAdmissionChecks(cq), qutil.AllFlavors(cq.Spec.ResourceGroups))
 	newChecks, shouldUpdate := syncAdmissionCheckConditions(wl.Status.AdmissionChecks, admissionChecks, r.clock)
 	if shouldUpdate {
 		log.V(3).Info("The workload needs admission checks updates", "clusterQueue", klog.KRef("", cq.Name), "admissionChecks", admissionChecks)
diff --git a/pkg/controller/jobframework/interface.go b/pkg/controller/jobframework/interface.go
index 28293f4c4..739215aa4 100644
--- a/pkg/controller/jobframework/interface.go
+++ b/pkg/controller/jobframework/interface.go
@@ -153,6 +153,12 @@ type JobWithCustomWorkloadConditions interface {
 	CustomWorkloadConditions(wl *kueue.Workload) ([]metav1.Condition, bool)
 }
 
+// JobWithCustomWorkloadActivation interface should be implemented by generic jobs,
+// when custom logic is needed to determine if the workload is active.
+type JobWithCustomWorkloadActivation interface {
+	IsWorkloadActive() bool
+}
+
 // JobWithManagedBy interface should be implemented by generic jobs
 // that implement the managedBy protocol for Multi-Kueue
 type JobWithManagedBy interface {
diff --git a/pkg/controller/jobframework/reconciler.go b/pkg/controller/jobframework/reconciler.go
index 8a5823755..16214e44d 100644
--- a/pkg/controller/jobframework/reconciler.go
+++ b/pkg/controller/jobframework/reconciler.go
@@ -409,6 +409,16 @@ func (r *JobReconciler) ReconcileGenericJob(ctx context.Context, req ctrl.Reques
 		}
 	}
 
+	if jobact, ok := job.(JobWithCustomWorkloadActivation); wl != nil && ok {
+		active := jobact.IsWorkloadActive()
+		if workload.IsActive(wl) != active {
+			wl.Spec.Active = ptr.To(active)
+			if err := r.client.Update(ctx, wl); err != nil {
+				return ctrl.Result{}, err
+			}
+		}
+	}
+
 	if wl != nil && apimeta.IsStatusConditionTrue(wl.Status.Conditions, kueue.WorkloadFinished) {
 		if err := r.finalizeJob(ctx, job); err != nil {
 			return ctrl.Result{}, err
diff --git a/pkg/controller/jobframework/tas_validation.go b/pkg/controller/jobframework/tas_validation.go
index 62ecce85d..051a12540 100644
--- a/pkg/controller/jobframework/tas_validation.go
+++ b/pkg/controller/jobframework/tas_validation.go
@@ -23,8 +23,10 @@ import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	metavalidation "k8s.io/apimachinery/pkg/apis/meta/v1/validation"
 	"k8s.io/apimachinery/pkg/util/validation/field"
+	"k8s.io/utils/ptr"
 
 	kueuebeta "sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	"sigs.k8s.io/kueue/pkg/util/orderedgroups"
 )
 
 func ValidateTASPodSetRequest(replicaPath *field.Path, replicaMetadata *metav1.ObjectMeta) field.ErrorList {
@@ -76,6 +78,10 @@ func ValidateTASPodSetRequest(replicaPath *field.Path, replicaMetadata *metav1.O
 		if sliceRequiredFound {
 			allErrs = append(allErrs, field.Forbidden(annotationsPath.Key(kueuebeta.PodSetGroupName), fmt.Sprintf("may not be set when '%s' is specified", kueuebeta.PodSetSliceRequiredTopologyAnnotation)))
 		}
+
+		if !preferredFound && !requiredFound {
+			allErrs = append(allErrs, field.Forbidden(annotationsPath.Key(kueuebeta.PodSetGroupName), fmt.Sprintf("may not be set when neither '%s' nor '%s' is specified", kueuebeta.PodSetPreferredTopologyAnnotation, kueuebeta.PodSetRequiredTopologyAnnotation)))
+		}
 	}
 
 	unconstrainedErrs := validateTASUnconstrained(annotationsPath, replicaMetadata)
@@ -175,3 +181,93 @@ func ValidateSliceSizeAnnotationUpperBound(replicaPath *field.Path, replicaMetad
 
 	return nil
 }
+
+func ValidatePodSetGroupingTopology(podSets []kueuebeta.PodSet, podSetAnnotationsByName map[kueuebeta.PodSetReference]*field.Path) field.ErrorList {
+	podSetGroups := orderedgroups.NewOrderedGroups[string, kueuebeta.PodSet]()
+	for _, podSet := range podSets {
+		if podSet.TopologyRequest == nil || podSet.TopologyRequest.PodSetGroupName == nil {
+			continue
+		}
+		groupName := *podSet.TopologyRequest.PodSetGroupName
+		podSetGroups.Insert(groupName, podSet)
+	}
+
+	var allErrs field.ErrorList
+
+	for groupName, podSets := range podSetGroups.InOrder {
+		if groupSize := len(podSets); groupSize != 2 {
+			for _, podSet := range podSets {
+				allErrs = append(
+					allErrs,
+					field.Invalid(
+						podSetAnnotationsByName[podSet.Name].Key(kueuebeta.PodSetGroupName),
+						groupName,
+						fmt.Sprintf("can only define groups of exactly 2 pod sets, got: %d pod set(s)", groupSize),
+					),
+				)
+			}
+			continue
+		}
+
+		podSet1, podSet2 := podSets[0], podSets[1]
+		annotationsPath1 := podSetAnnotationsByName[podSet1.Name]
+		annotationsPath2 := podSetAnnotationsByName[podSet2.Name]
+
+		// Validate group size
+		if podSet1.Count != 1 && podSet2.Count != 1 {
+			sizeErrorMessage := fmt.Sprintf(
+				"can only define groups where at least one pod set has only 1 replica, got: %d replica(s) and %d replica(s) in the group",
+				podSet1.Count,
+				podSet2.Count,
+			)
+			allErrs = append(allErrs,
+				field.Invalid(
+					annotationsPath1.Key(kueuebeta.PodSetGroupName),
+					groupName,
+					sizeErrorMessage,
+				),
+				field.Invalid(
+					annotationsPath2.Key(kueuebeta.PodSetGroupName),
+					groupName,
+					sizeErrorMessage,
+				),
+			)
+		}
+
+		if !topologyRequestsValid(podSet1.TopologyRequest, podSet2.TopologyRequest) {
+			errorMessageTemplate := fmt.Sprintf(
+				"must specify '%s' or '%s' topology consistent with '%%s' in group '%s'",
+				kueuebeta.PodSetRequiredTopologyAnnotation,
+				kueuebeta.PodSetPreferredTopologyAnnotation,
+				groupName,
+			)
+			allErrs = append(
+				allErrs,
+				field.Invalid(
+					annotationsPath1,
+					field.OmitValueType{},
+					fmt.Sprintf(errorMessageTemplate, annotationsPath2),
+				),
+				field.Invalid(
+					annotationsPath2,
+					field.OmitValueType{},
+					fmt.Sprintf(errorMessageTemplate, annotationsPath1),
+				),
+			)
+		}
+	}
+
+	return allErrs
+}
+
+func topologyRequestsValid(r1, r2 *kueuebeta.PodSetTopologyRequest) bool {
+	// Check that the requests have exactly one of `Required` and `Preferred`.
+	if r1.Required == nil && r1.Preferred == nil {
+		return false
+	}
+	if r2.Required == nil && r2.Preferred == nil {
+		return false
+	}
+	// Check that the non-nil pair has the same value.
+	return ptr.Equal(r1.Required, r2.Required) && ptr.Equal(r1.Preferred, r2.Preferred)
+}
diff --git a/pkg/controller/jobs/jobset/jobset_webhook.go b/pkg/controller/jobs/jobset/jobset_webhook.go
index d89e84b9e..5db6e2459 100644
--- a/pkg/controller/jobs/jobset/jobset_webhook.go
+++ b/pkg/controller/jobs/jobset/jobset_webhook.go
@@ -144,6 +144,10 @@ func (w *JobSetWebhook) validateTopologyRequest(ctx context.Context, jobSet *Job
 
 	podSets, podSetsErr := jobSet.PodSets(ctx)
 
+	if podSetsErr == nil {
+		allErrs = append(allErrs, jobframework.ValidatePodSetGroupingTopology(podSets, buildPodSetAnnotationsPathByNameMap(jobSet))...)
+	}
+
 	for i, rj := range jobSet.Spec.ReplicatedJobs {
 		replicaJobTemplateMetaPath := replicatedJobsPath.Index(i).Child("template", "spec", "template", "metadata")
 		allErrs = append(allErrs, jobframework.ValidateTASPodSetRequest(replicaJobTemplateMetaPath, &jobSet.Spec.ReplicatedJobs[i].Template.Spec.Template.ObjectMeta)...)
@@ -163,6 +167,14 @@ func (w *JobSetWebhook) validateTopologyRequest(ctx context.Context, jobSet *Job
 	return nil, podSetsErr
 }
 
+func buildPodSetAnnotationsPathByNameMap(jobSet *JobSet) map[kueue.PodSetReference]*field.Path {
+	podSetAnnotationsPathByName := make(map[kueue.PodSetReference]*field.Path)
+	for i, job := range jobSet.Spec.ReplicatedJobs {
+		podSetAnnotationsPathByName[kueue.PodSetReference(job.Name)] = replicatedJobsPath.Index(i).Child("template", "spec", "template", "metadata", "annotations")
+	}
+	return podSetAnnotationsPathByName
+}
+
 // ValidateDelete implements webhook.CustomValidator so a webhook will be registered for the type
 func (w *JobSetWebhook) ValidateDelete(_ context.Context, _ runtime.Object) (admission.Warnings, error) {
 	return nil, nil
diff --git a/pkg/controller/jobs/leaderworkerset/leaderworkerset_webhook.go b/pkg/controller/jobs/leaderworkerset/leaderworkerset_webhook.go
index ed2f452c3..af985e1e2 100644
--- a/pkg/controller/jobs/leaderworkerset/leaderworkerset_webhook.go
+++ b/pkg/controller/jobs/leaderworkerset/leaderworkerset_webhook.go
@@ -107,14 +107,20 @@ func (wh *Webhook) podTemplateSpecDefault(lws *LeaderWorkerSet, podTemplateSpec
 var _ webhook.CustomValidator = &Webhook{}
 
 var (
-	labelsPath               = field.NewPath("metadata", "labels")
-	queueNameLabelPath       = labelsPath.Key(constants.QueueLabel)
-	specPath                 = field.NewPath("spec")
-	leaderWorkerTemplatePath = specPath.Child("leaderWorkerTemplate")
-	leaderTemplatePath       = leaderWorkerTemplatePath.Child("leaderTemplate")
-	leaderTemplateMetaPath   = leaderTemplatePath.Child("metadata")
-	workerTemplatePath       = leaderWorkerTemplatePath.Child("workerTemplate")
-	workerTemplateMetaPath   = workerTemplatePath.Child("metadata")
+	labelsPath                    = field.NewPath("metadata", "labels")
+	queueNameLabelPath            = labelsPath.Key(constants.QueueLabel)
+	specPath                      = field.NewPath("spec")
+	leaderWorkerTemplatePath      = specPath.Child("leaderWorkerTemplate")
+	leaderTemplatePath            = leaderWorkerTemplatePath.Child("leaderTemplate")
+	leaderTemplateMetaPath        = leaderTemplatePath.Child("metadata")
+	workerTemplatePath            = leaderWorkerTemplatePath.Child("workerTemplate")
+	workerTemplateMetaPath        = workerTemplatePath.Child("metadata")
+	workerTemplateAnnotationsPath = workerTemplateMetaPath.Child("annotations")
+	podSetAnnotationsPathByName   = map[kueuebeta.PodSetReference]*field.Path{
+		"leader": leaderTemplateMetaPath.Child("annotations"),
+		"worker": workerTemplateAnnotationsPath,
+		"main":   workerTemplateAnnotationsPath,
+	}
 )
 
 func (wh *Webhook) ValidateCreate(ctx context.Context, obj runtime.Object) (warnings admission.Warnings, err error) {
@@ -225,6 +231,7 @@ func validateTopologyRequest(lws *LeaderWorkerSet) (field.ErrorList, error) {
 		workerPodSet := podset.FindPodSetByName(podSets, defaultPodSetName)
 		allErrs = append(allErrs, jobframework.ValidateSliceSizeAnnotationUpperBound(workerTemplateMetaPath,
 			&lws.Spec.LeaderWorkerTemplate.WorkerTemplate.ObjectMeta, workerPodSet)...)
+		allErrs = append(allErrs, jobframework.ValidatePodSetGroupingTopology(podSets, podSetAnnotationsPathByName)...)
 	}
 
 	if len(allErrs) > 0 {
diff --git a/pkg/controller/jobs/mpijob/mpijob_webhook.go b/pkg/controller/jobs/mpijob/mpijob_webhook.go
index 6c4187be7..346f05f69 100644
--- a/pkg/controller/jobs/mpijob/mpijob_webhook.go
+++ b/pkg/controller/jobs/mpijob/mpijob_webhook.go
@@ -29,7 +29,7 @@ import (
 	"sigs.k8s.io/controller-runtime/pkg/client"
 	"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	qcache "sigs.k8s.io/kueue/pkg/cache/queue"
 	schdcache "sigs.k8s.io/kueue/pkg/cache/scheduler"
 	"sigs.k8s.io/kueue/pkg/controller/jobframework"
@@ -40,7 +40,13 @@ import (
 )
 
 var (
-	mpiReplicaSpecsPath = field.NewPath("spec", "mpiReplicaSpecs")
+	mpiReplicaSpecsPath         = field.NewPath("spec", "mpiReplicaSpecs")
+	launcherAnnotationsPath     = mpiReplicaSpecsPath.Key(string(v2beta1.MPIReplicaTypeLauncher)).Child("template", "metadata", "annotations")
+	workerAnnotationsPath       = mpiReplicaSpecsPath.Key(string(v2beta1.MPIReplicaTypeWorker)).Child("template", "metadata", "annotations")
+	podSetAnnotationsPathByName = map[kueue.PodSetReference]*field.Path{
+		kueue.NewPodSetReference(string(v2beta1.MPIReplicaTypeLauncher)): launcherAnnotationsPath,
+		kueue.NewPodSetReference(string(v2beta1.MPIReplicaTypeWorker)):   workerAnnotationsPath,
+	}
 )
 
 type MpiJobWebhook struct {
@@ -151,6 +157,10 @@ func (w *MpiJobWebhook) validateTopologyRequest(ctx context.Context, mpiJob *MPI
 
 	podSets, podSetsErr := mpiJob.PodSets(ctx)
 
+	if podSetsErr == nil {
+		allErrs = append(allErrs, jobframework.ValidatePodSetGroupingTopology(podSets, podSetAnnotationsPathByName)...)
+	}
+
 	for replicaType, replicaSpec := range mpiJob.Spec.MPIReplicaSpecs {
 		replicaMetaPath := mpiReplicaSpecsPath.Key(string(replicaType)).Child("template", "metadata")
 		allErrs = append(allErrs, jobframework.ValidateTASPodSetRequest(replicaMetaPath, &replicaSpec.Template.ObjectMeta)...)
@@ -159,7 +169,7 @@ func (w *MpiJobWebhook) validateTopologyRequest(ctx context.Context, mpiJob *MPI
 			continue
 		}
 
-		podSet := podset.FindPodSetByName(podSets, v1beta1.NewPodSetReference(string(replicaType)))
+		podSet := podset.FindPodSetByName(podSets, kueue.NewPodSetReference(string(replicaType)))
 		allErrs = append(allErrs, jobframework.ValidateSliceSizeAnnotationUpperBound(replicaMetaPath, &replicaSpec.Template.ObjectMeta, podSet)...)
 	}
 
diff --git a/pkg/controller/jobs/pod/pod_webhook.go b/pkg/controller/jobs/pod/pod_webhook.go
index d0ac38e67..b15d43c8d 100644
--- a/pkg/controller/jobs/pod/pod_webhook.go
+++ b/pkg/controller/jobs/pod/pod_webhook.go
@@ -33,7 +33,7 @@ import (
 	"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
 
 	configapi "sigs.k8s.io/kueue/apis/config/v1beta1"
-	kueuealpha "sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	qcache "sigs.k8s.io/kueue/pkg/cache/queue"
 	"sigs.k8s.io/kueue/pkg/constants"
 	ctrlconstants "sigs.k8s.io/kueue/pkg/controller/constants"
@@ -192,13 +192,13 @@ func (w *PodWebhook) Default(ctx context.Context, obj runtime.Object) error {
 		gate(&pod.pod)
 
 		if features.Enabled(features.TopologyAwareScheduling) {
-			if val, ok := pod.pod.Annotations[kueuealpha.PodGroupPodIndexLabelAnnotation]; ok {
+			if val, ok := pod.pod.Annotations[kueue.PodGroupPodIndexLabelAnnotation]; ok {
 				if pod.pod.Labels == nil {
 					pod.pod.Labels = make(map[string]string, 1)
 				}
-				pod.pod.Labels[kueuealpha.PodGroupPodIndexLabel] = pod.pod.Labels[val]
+				pod.pod.Labels[kueue.PodGroupPodIndexLabel] = pod.pod.Labels[val]
 			}
-			utilpod.Gate(&pod.pod, kueuealpha.TopologySchedulingGate)
+			utilpod.Gate(&pod.pod, kueue.TopologySchedulingGate)
 		}
 		if err := pod.addRoleHash(); err != nil {
 			return err
diff --git a/pkg/controller/jobs/raycluster/raycluster_webhook.go b/pkg/controller/jobs/raycluster/raycluster_webhook.go
index 8869b9e3a..a2b5a82ed 100644
--- a/pkg/controller/jobs/raycluster/raycluster_webhook.go
+++ b/pkg/controller/jobs/raycluster/raycluster_webhook.go
@@ -203,6 +203,7 @@ func (w *RayClusterWebhook) validateTopologyRequest(ctx context.Context, rayJob
 	if podSetsErr == nil {
 		headGroupPodSet := podset.FindPodSetByName(podSets, headGroupPodSetName)
 		allErrs = append(allErrs, jobframework.ValidateSliceSizeAnnotationUpperBound(headGroupMetaPath, &rayJob.Spec.HeadGroupSpec.Template.ObjectMeta, headGroupPodSet)...)
+		allErrs = append(allErrs, jobframework.ValidatePodSetGroupingTopology(podSets, buildPodSetAnnotationsPathByNameMap(rayJob))...)
 	}
 
 	for i, wgs := range rayJob.Spec.WorkerGroupSpecs {
@@ -224,6 +225,15 @@ func (w *RayClusterWebhook) validateTopologyRequest(ctx context.Context, rayJob
 	return nil, podSetsErr
 }
 
+func buildPodSetAnnotationsPathByNameMap(rayJob *RayCluster) map[kueuebeta.PodSetReference]*field.Path {
+	podSetAnnotationsPathByName := make(map[kueuebeta.PodSetReference]*field.Path)
+	podSetAnnotationsPathByName[headGroupPodSetName] = headGroupMetaPath.Child("annotations")
+	for i, wgs := range rayJob.Spec.WorkerGroupSpecs {
+		podSetAnnotationsPathByName[kueuebeta.PodSetReference(wgs.GroupName)] = workerGroupSpecsPath.Index(i).Child("template", "metadata", "annotations")
+	}
+	return podSetAnnotationsPathByName
+}
+
 // ValidateUpdate implements webhook.CustomValidator so a webhook will be registered for the type
 func (w *RayClusterWebhook) ValidateUpdate(ctx context.Context, oldObj, newObj runtime.Object) (admission.Warnings, error) {
 	oldJob := oldObj.(*rayv1.RayCluster)
diff --git a/pkg/controller/jobs/rayjob/rayjob_webhook.go b/pkg/controller/jobs/rayjob/rayjob_webhook.go
index f4662292e..96571c129 100644
--- a/pkg/controller/jobs/rayjob/rayjob_webhook.go
+++ b/pkg/controller/jobs/rayjob/rayjob_webhook.go
@@ -184,6 +184,7 @@ func (w *RayJobWebhook) validateTopologyRequest(ctx context.Context, rayJob *ray
 	if podSetsErr == nil {
 		headGroupPodSetName := podset.FindPodSetByName(podSets, headGroupPodSetName)
 		allErrs = append(allErrs, jobframework.ValidateSliceSizeAnnotationUpperBound(headGroupMetaPath, &rayJob.Spec.RayClusterSpec.HeadGroupSpec.Template.ObjectMeta, headGroupPodSetName)...)
+		allErrs = append(allErrs, jobframework.ValidatePodSetGroupingTopology(podSets, buildPodSetAnnotationsPathByNameMap(rayJob))...)
 	}
 
 	for i, wgs := range rayJob.Spec.RayClusterSpec.WorkerGroupSpecs {
@@ -205,6 +206,16 @@ func (w *RayJobWebhook) validateTopologyRequest(ctx context.Context, rayJob *ray
 	return nil, podSetsErr
 }
 
+func buildPodSetAnnotationsPathByNameMap(rayJob *rayv1.RayJob) map[kueuebeta.PodSetReference]*field.Path {
+	podSetAnnotationsPathByName := make(map[kueuebeta.PodSetReference]*field.Path)
+	podSetAnnotationsPathByName[headGroupPodSetName] = headGroupMetaPath.Child("annotations")
+	podSetAnnotationsPathByName[submitterJobPodSetName] = field.NewPath("spec", "submitterPodTemplate", "metadata", "annotations")
+	for i, wgs := range rayJob.Spec.RayClusterSpec.WorkerGroupSpecs {
+		podSetAnnotationsPathByName[kueuebeta.PodSetReference(wgs.GroupName)] = workerGroupSpecsPath.Index(i).Child("template", "metadata", "annotations")
+	}
+	return podSetAnnotationsPathByName
+}
+
 // ValidateUpdate implements webhook.CustomValidator so a webhook will be registered for the type
 func (w *RayJobWebhook) ValidateUpdate(ctx context.Context, oldObj, newObj runtime.Object) (admission.Warnings, error) {
 	oldJob := oldObj.(*rayv1.RayJob)
diff --git a/pkg/controller/jobs/statefulset/statefulset_webhook.go b/pkg/controller/jobs/statefulset/statefulset_webhook.go
index eacaae068..6377de190 100644
--- a/pkg/controller/jobs/statefulset/statefulset_webhook.go
+++ b/pkg/controller/jobs/statefulset/statefulset_webhook.go
@@ -31,7 +31,7 @@ import (
 	"sigs.k8s.io/controller-runtime/pkg/webhook"
 	"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
 
-	kueuealpha "sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	qcache "sigs.k8s.io/kueue/pkg/cache/queue"
 	"sigs.k8s.io/kueue/pkg/constants"
 	controllerconstants "sigs.k8s.io/kueue/pkg/controller/constants"
@@ -95,7 +95,7 @@ func (wh *Webhook) Default(ctx context.Context, obj runtime.Object) error {
 		ss.Spec.Template.Annotations[podconstants.GroupTotalCountAnnotation] = fmt.Sprint(ptr.Deref(ss.Spec.Replicas, 1))
 		ss.Spec.Template.Annotations[podconstants.GroupFastAdmissionAnnotationKey] = podconstants.GroupFastAdmissionAnnotationValue
 		ss.Spec.Template.Annotations[podconstants.GroupServingAnnotationKey] = podconstants.GroupServingAnnotationValue
-		ss.Spec.Template.Annotations[kueuealpha.PodGroupPodIndexLabelAnnotation] = appsv1.PodIndexLabel
+		ss.Spec.Template.Annotations[kueue.PodGroupPodIndexLabelAnnotation] = appsv1.PodIndexLabel
 	}
 
 	return nil
diff --git a/pkg/controller/jobs/trainjob/trainjob_controller.go b/pkg/controller/jobs/trainjob/trainjob_controller.go
index 61232b1a7..544cd621d 100644
--- a/pkg/controller/jobs/trainjob/trainjob_controller.go
+++ b/pkg/controller/jobs/trainjob/trainjob_controller.go
@@ -187,7 +187,7 @@ func getChildJobSet(ctx context.Context, t *TrainJob) (*jobsetapi.JobSet, error)
 		WithSpec(jobSetSpec)).Initializer(trainJob).Trainer(info, trainJob).PodLabels(info.Scheduler.PodLabels).Build()
 
 	// convert to jobset with the defaults set
-	return jobsetApplyToJobset(ctx, jobsetApply)
+	return jobsetApplyToJobset(jobsetApply)
 }
 
 // TODO: Remove mutex once RuntimeInfo gets thread safe - https://github.com/kubeflow/trainer/issues/2873
@@ -197,7 +197,7 @@ func (r *trainJobReconciler) runtimeInfo(runtime kftrainerruntime.Runtime, train
 	return runtime.RuntimeInfo(trainJob, trSpec.Template, trSpec.MLPolicy, trSpec.PodGroupPolicy)
 }
 
-func jobsetApplyToJobset(ctx context.Context, jobsetApply *jobsetapplyapi.JobSetApplyConfiguration) (*jobsetapi.JobSet, error) {
+func jobsetApplyToJobset(jobsetApply *jobsetapplyapi.JobSetApplyConfiguration) (*jobsetapi.JobSet, error) {
 	jsonData, err := json.Marshal(jobsetApply)
 	if err != nil {
 		return nil, err
@@ -208,15 +208,6 @@ func jobsetApplyToJobset(ctx context.Context, jobsetApply *jobsetapplyapi.JobSet
 		return nil, err
 	}
 
-	// Run a dry-run patch to set the jobset defaults
-	// Defaults must be applied here because Kueue later compares podsets to match workloads.
-	// Workloads coming from the API server are already defaulted, so without defaulting this JobSet, matching would fail.
-	if err = reconciler.client.Patch(ctx, jobset, client.Apply, &client.PatchOptions{
-		FieldManager: "defaulter",
-		DryRun:       []string{metav1.DryRunAll},
-	}); err != nil {
-		return nil, err
-	}
 	return jobset, nil
 }
 
@@ -243,7 +234,21 @@ func (t *TrainJob) PodSets(ctx context.Context) ([]kueue.PodSet, error) {
 	if err != nil {
 		return nil, err
 	}
-	return (*workloadjobset.JobSet)(jobset).PodSets(ctx)
+
+	podsets, err := (*workloadjobset.JobSet)(jobset).PodSets(ctx)
+	if err != nil {
+		return nil, err
+	}
+
+	// Run a dry-run patch of a throwaway workload to set the podset defaults
+	// Podsets must be defaulted because Kueue later uses them to match workloads.
+	// Workloads coming from the API server are already defaulted, so without defaulting these podsets, matching would fail.
+	wl := jobframework.NewWorkload(t.Name, t.Object(), podsets, []string{})
+	if err := reconciler.client.Create(ctx, wl, &client.CreateOptions{DryRun: []string{metav1.DryRunAll}}); err != nil {
+		return nil, err
+	}
+
+	return wl.Spec.PodSets, nil
 }
 
 func (t *TrainJob) RunWithPodSetsInfo(ctx context.Context, podSetsInfo []podset.PodSetInfo) error {
diff --git a/pkg/scheduler/flavorassigner/flavorassigner.go b/pkg/scheduler/flavorassigner/flavorassigner.go
index ca815a083..96171c323 100644
--- a/pkg/scheduler/flavorassigner/flavorassigner.go
+++ b/pkg/scheduler/flavorassigner/flavorassigner.go
@@ -40,6 +40,7 @@ import (
 	"sigs.k8s.io/kueue/pkg/scheduler/preemption/classical"
 	preemptioncommon "sigs.k8s.io/kueue/pkg/scheduler/preemption/common"
 	utilmaps "sigs.k8s.io/kueue/pkg/util/maps"
+	"sigs.k8s.io/kueue/pkg/util/orderedgroups"
 	"sigs.k8s.io/kueue/pkg/workload"
 )
 
@@ -523,7 +524,7 @@ func (a *FlavorAssigner) assignFlavors(log logr.Logger, counts []int32) Assignme
 		replaceWorkloadSlice: a.replaceWorkloadSlice,
 	}
 
-	groupedRequests := newPodSetGroups()
+	groupedRequests := orderedgroups.NewOrderedGroups[string, indexedPodSet]()
 
 	for i, podSet := range requests {
 		if a.cq.RGByResource(corev1.ResourcePods) != nil {
@@ -559,10 +560,10 @@ func (a *FlavorAssigner) assignFlavors(log logr.Logger, counts []int32) Assignme
 			groupKey = *tr.PodSetGroupName
 		}
 
-		groupedRequests.insert(groupKey, indexedPodSet{originalIndex: i, podSet: &podSet, podSetAssignment: &psAssignment})
+		groupedRequests.Insert(groupKey, indexedPodSet{originalIndex: i, podSet: &podSet, podSetAssignment: &psAssignment})
 	}
 
-	for _, podSets := range groupedRequests.orderedPodSetGroups() {
+	for _, podSets := range groupedRequests.InOrder {
 		requests := make(resources.Requests)
 		psIDs := make([]int, len(podSets))
 		for idx, podset := range podSets {
diff --git a/pkg/scheduler/flavorassigner/podset_groups.go b/pkg/scheduler/flavorassigner/podset_groups.go
deleted file mode 100644
index 5e2284905..000000000
--- a/pkg/scheduler/flavorassigner/podset_groups.go
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
-Copyright The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package flavorassigner
-
-type podSetGroups struct {
-	psGroups       map[string][]indexedPodSet
-	insertionOrder []string
-}
-
-func newPodSetGroups() *podSetGroups {
-	return &podSetGroups{
-		psGroups:       make(map[string][]indexedPodSet),
-		insertionOrder: make([]string, 0),
-	}
-}
-
-func (om *podSetGroups) insert(groupName string, value indexedPodSet) {
-	if _, present := om.psGroups[groupName]; !present {
-		om.insertionOrder = append(om.insertionOrder, groupName)
-	}
-	om.psGroups[groupName] = append(om.psGroups[groupName], value)
-}
-
-func (om *podSetGroups) orderedPodSetGroups() [][]indexedPodSet {
-	orderedPodSetGroups := make([][]indexedPodSet, len(om.insertionOrder))
-	for i, key := range om.insertionOrder {
-		orderedPodSetGroups[i] = om.psGroups[key]
-	}
-	return orderedPodSetGroups
-}
diff --git a/pkg/scheduler/scheduler.go b/pkg/scheduler/scheduler.go
index d46ed4544..38e14e479 100644
--- a/pkg/scheduler/scheduler.go
+++ b/pkg/scheduler/scheduler.go
@@ -314,7 +314,7 @@ func (s *Scheduler) schedule(ctx context.Context) wait.SpeedSignal {
 			wl := e.Obj.DeepCopy()
 			if err := workload.PatchAdmissionStatus(ctx, s.client, wl, s.clock, func() (*kueue.Workload, bool, error) {
 				return wl, workload.UnsetQuotaReservationWithCondition(wl, "Waiting", "waiting for all admitted workloads to be in PodsReady condition", s.clock.Now()), nil
-			}, workload.WithLoose()); err != nil {
+			}, workload.WithLooseOnApply()); err != nil {
 				log.Error(err, "Could not update Workload status")
 			}
 			s.cache.WaitForPodsReady(ctx)
@@ -619,7 +619,7 @@ func (s *Scheduler) admit(ctx context.Context, e *entry, cq *schdcache.ClusterQu
 	}
 
 	workload.SetQuotaReservation(newWorkload, admission, s.clock)
-	if workload.HasAllChecks(newWorkload, workload.AdmissionChecksForWorkload(log, newWorkload, cq.AdmissionChecks)) {
+	if workload.HasAllChecks(newWorkload, workload.AdmissionChecksForWorkload(log, newWorkload, cq.AdmissionChecks, schdcache.AllFlavors(cq.ResourceGroups))) {
 		// sync Admitted, ignore the result since an API update is always done.
 		_ = workload.SyncAdmittedCondition(newWorkload, s.clock.Now())
 	}
@@ -644,7 +644,7 @@ func (s *Scheduler) admit(ctx context.Context, e *entry, cq *schdcache.ClusterQu
 	s.admissionRoutineWrapper.Run(func() {
 		err := workload.PatchAdmissionStatus(ctx, s.client, origWorkload, s.clock, func() (*kueue.Workload, bool, error) {
 			return newWorkload, true, nil
-		}, workload.WithLoose())
+		}, workload.WithLooseOnApply())
 		if err == nil {
 			// Record metrics and events for quota reservation and admission
 			s.recordWorkloadAdmissionMetrics(newWorkload, e.Obj, admission)
diff --git a/pkg/util/admissioncheck/admissioncheck.go b/pkg/util/admissioncheck/admissioncheck.go
index 0b0454ecb..1522f09df 100644
--- a/pkg/util/admissioncheck/admissioncheck.go
+++ b/pkg/util/admissioncheck/admissioncheck.go
@@ -169,17 +169,31 @@ func NewAdmissionChecks(cq *kueue.ClusterQueue) map[kueue.AdmissionCheckReferenc
 	if cq.Spec.AdmissionChecksStrategy != nil {
 		checks = make(map[kueue.AdmissionCheckReference]sets.Set[kueue.ResourceFlavorReference], len(cq.Spec.AdmissionChecksStrategy.AdmissionChecks))
 		for _, check := range cq.Spec.AdmissionChecksStrategy.AdmissionChecks {
-			checks[check.Name] = sets.New(check.OnFlavors...)
+			if len(check.OnFlavors) > 0 {
+				checks[check.Name] = sets.New(check.OnFlavors...)
+			} else {
+				checks[check.Name] = allFlavors(cq)
+			}
 		}
 	} else {
 		checks = make(map[kueue.AdmissionCheckReference]sets.Set[kueue.ResourceFlavorReference], len(cq.Spec.AdmissionChecks))
 		for _, checkName := range cq.Spec.AdmissionChecks {
-			checks[checkName] = sets.New[kueue.ResourceFlavorReference]()
+			checks[checkName] = allFlavors(cq)
 		}
 	}
 	return checks
 }
 
+func allFlavors(cq *kueue.ClusterQueue) sets.Set[kueue.ResourceFlavorReference] {
+	flavors := sets.New[kueue.ResourceFlavorReference]()
+	for _, rg := range cq.Spec.ResourceGroups {
+		for _, fv := range rg.Flavors {
+			flavors.Insert(fv.Name)
+		}
+	}
+	return flavors
+}
+
 // FindAdmissionCheck - returns a pointer to the check identified by checkName if found in checks.
 func FindAdmissionCheck(checks []kueue.AdmissionCheckState, checkName kueue.AdmissionCheckReference) *kueue.AdmissionCheckState {
 	for i := range checks {
diff --git a/pkg/util/orderedgroups/ordered_groups.go b/pkg/util/orderedgroups/ordered_groups.go
new file mode 100644
index 000000000..e76c0468d
--- /dev/null
+++ b/pkg/util/orderedgroups/ordered_groups.go
@@ -0,0 +1,47 @@
+/*
+Copyright The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package orderedgroups
+
+// Represents a mapping of group keys to grouped items and tracks their insertion order for deterministic iteration.
+type OrderedGroups[K comparable, V any] struct {
+	groups         map[K][]V
+	insertionOrder []K
+}
+
+func NewOrderedGroups[K comparable, V any]() *OrderedGroups[K, V] {
+	return &OrderedGroups[K, V]{
+		groups:         make(map[K][]V),
+		insertionOrder: make([]K, 0),
+	}
+}
+
+// Inserts an element to the group. If the group does not exist yet, tracks it's insertion order.
+func (om *OrderedGroups[K, V]) Insert(key K, value V) {
+	if _, ok := om.groups[key]; !ok {
+		om.insertionOrder = append(om.insertionOrder, key)
+	}
+	om.groups[key] = append(om.groups[key], value)
+}
+
+// Iterates over the collected groups in order of insertion.
+func (om *OrderedGroups[K, V]) InOrder(yield func(K, []V) bool) {
+	for _, k := range om.insertionOrder {
+		if !yield(k, om.groups[k]) {
+			break
+		}
+	}
+}
diff --git a/pkg/util/queue/cluster_queue.go b/pkg/util/queue/cluster_queue.go
new file mode 100644
index 000000000..28bb497cf
--- /dev/null
+++ b/pkg/util/queue/cluster_queue.go
@@ -0,0 +1,35 @@
+// Copyright The Kubernetes Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package queue
+
+import (
+	"k8s.io/apimachinery/pkg/util/sets"
+
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	utilslices "sigs.k8s.io/kueue/pkg/util/slices"
+)
+
+func AllFlavors(rgs []kueue.ResourceGroup) sets.Set[kueue.ResourceFlavorReference] {
+	return utilslices.Reduce(
+		rgs,
+		func(acc sets.Set[kueue.ResourceFlavorReference], rg kueue.ResourceGroup) sets.Set[kueue.ResourceFlavorReference] {
+			for _, flavor := range rg.Flavors {
+				acc.Insert(flavor.Name)
+			}
+			return acc
+		},
+		sets.New[kueue.ResourceFlavorReference](),
+	)
+}
diff --git a/pkg/util/slices/slices.go b/pkg/util/slices/slices.go
index ad814896e..ca0433e84 100644
--- a/pkg/util/slices/slices.go
+++ b/pkg/util/slices/slices.go
@@ -93,3 +93,12 @@ func Pick[E any, S ~[]E](s S, keep func(*E) bool) S {
 	}
 	return ret
 }
+
+// Reduce executes a user-supplied "reducer" function on each element of the slice.
+func Reduce[T, M any](s []T, f func(M, T) M, initValue M) M {
+	acc := initValue
+	for _, v := range s {
+		acc = f(acc, v)
+	}
+	return acc
+}
diff --git a/pkg/util/wait/backoff.go b/pkg/util/wait/backoff.go
index 42a948df4..cfb74156b 100644
--- a/pkg/util/wait/backoff.go
+++ b/pkg/util/wait/backoff.go
@@ -17,13 +17,46 @@ limitations under the License.
 package wait
 
 import (
+	"cmp"
 	"context"
+	"math"
 	"time"
 
 	"k8s.io/apimachinery/pkg/util/wait"
 	"k8s.io/utils/clock"
 )
 
+type Backoff struct {
+	backoff wait.Backoff
+}
+
+// NewBackoff creates a Backoff calculator with the given parameters.
+// If cap is zero, it defaults to math.MaxInt64 / Factor.
+func NewBackoff(initial, cap time.Duration, factor, jitter float64) Backoff {
+	return Backoff{
+		backoff: wait.Backoff{
+			Duration: initial,
+			Factor:   factor,
+			Jitter:   jitter,
+			Steps:    math.MaxInt,
+			Cap:      cmp.Or(cap, time.Duration(math.MaxInt64/math.Ceil(factor))),
+		},
+	}
+}
+
+// WaitTime returns the backoff duration for the given iteration.
+func (b Backoff) WaitTime(iteration int) time.Duration {
+	var duration time.Duration
+	for range iteration {
+		duration = b.backoff.Step()
+		if duration == b.backoff.Cap { // wait.Backoff caps at limit, no need to continue iterating.
+			break
+		}
+	}
+
+	return duration
+}
+
 // UntilWithBackoff runs f in a loop until context indicates finished. It
 // applies backoff depending on the SpeedSignal f returns.  Backoff increases
 // exponentially, ranging from 1ms to 100ms.
@@ -36,7 +69,7 @@ func UntilWithBackoff(ctx context.Context, f func(context.Context) SpeedSignal)
 
 func untilWithBackoff(ctx context.Context, f func(context.Context) SpeedSignal, timer clock.Timer) {
 	mgr := speedyBackoffManager{
-		backoff: noBackoff,
+		backoff: nil,
 		timer:   timer,
 	}
 	wait.BackoffUntil(func() {
@@ -54,34 +87,34 @@ const (
 	// SlowDown signals to backoff.
 	SlowDown SpeedSignal = false
 
-	noBackoff      = time.Millisecond * 0
-	initialBackoff = time.Millisecond * 1
+	initialBackoff = time.Millisecond
 	maxBackoff     = time.Millisecond * 100
 )
 
 func (s *speedyBackoffManager) toggleBackoff(speedSignal SpeedSignal) {
 	switch speedSignal {
 	case KeepGoing:
-		s.backoff = noBackoff
+		s.backoff = nil
 	case SlowDown:
-		if s.backoff == noBackoff {
-			s.backoff = initialBackoff
+		if s.backoff == nil {
+			s.backoff = &wait.Backoff{
+				Duration: initialBackoff,
+				Factor:   2,
+				Steps:    math.MaxInt,
+				Cap:      maxBackoff,
+			}
 		}
 	}
 }
 
 type speedyBackoffManager struct {
-	backoff time.Duration
+	backoff *wait.Backoff
 	timer   clock.Timer
 }
 
 var _ wait.BackoffManager = (*speedyBackoffManager)(nil)
 
 func (s *speedyBackoffManager) Backoff() clock.Timer {
-	s.timer.Reset(s.backoff)
-	s.backoff *= 2
-	if s.backoff > maxBackoff {
-		s.backoff = maxBackoff
-	}
+	s.timer.Reset(s.backoff.Step())
 	return s.timer
 }
diff --git a/pkg/visibility/api/install.go b/pkg/visibility/api/install.go
index 19938e0ed..4d75ae40f 100644
--- a/pkg/visibility/api/install.go
+++ b/pkg/visibility/api/install.go
@@ -24,9 +24,9 @@ import (
 	utilruntime "k8s.io/apimachinery/pkg/util/runtime"
 	genericapiserver "k8s.io/apiserver/pkg/server"
 
-	visibilityv1beta1 "sigs.k8s.io/kueue/apis/visibility/v1beta1"
+	visibility "sigs.k8s.io/kueue/apis/visibility/v1beta1"
 	qcache "sigs.k8s.io/kueue/pkg/cache/queue"
-	apiv1beta1 "sigs.k8s.io/kueue/pkg/visibility/api/v1beta1"
+	visibilityapi "sigs.k8s.io/kueue/pkg/visibility/api/v1beta1"
 )
 
 var (
@@ -36,14 +36,14 @@ var (
 )
 
 func init() {
-	utilruntime.Must(visibilityv1beta1.AddToScheme(Scheme))
-	utilruntime.Must(Scheme.SetVersionPriority(visibilityv1beta1.GroupVersion))
+	utilruntime.Must(visibility.AddToScheme(Scheme))
+	utilruntime.Must(Scheme.SetVersionPriority(visibility.GroupVersion))
 	metav1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"})
 }
 
 // Install installs API scheme and registers storages
 func Install(server *genericapiserver.GenericAPIServer, kueueMgr *qcache.Manager) error {
-	apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(visibilityv1beta1.GroupVersion.Group, Scheme, ParameterCodec, Codecs)
-	apiGroupInfo.VersionedResourcesStorageMap[visibilityv1beta1.GroupVersion.Version] = apiv1beta1.NewStorage(kueueMgr)
+	apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(visibility.GroupVersion.Group, Scheme, ParameterCodec, Codecs)
+	apiGroupInfo.VersionedResourcesStorageMap[visibility.GroupVersion.Version] = visibilityapi.NewStorage(kueueMgr)
 	return server.InstallAPIGroups(&apiGroupInfo)
 }
diff --git a/pkg/visibility/server.go b/pkg/visibility/server.go
index bbab279e2..4fe37c1a4 100644
--- a/pkg/visibility/server.go
+++ b/pkg/visibility/server.go
@@ -34,7 +34,7 @@ import (
 	"k8s.io/component-base/version"
 
 	generatedopenapi "sigs.k8s.io/kueue/apis/visibility/openapi"
-	visibilityv1beta1 "sigs.k8s.io/kueue/apis/visibility/v1beta1"
+	visibility "sigs.k8s.io/kueue/apis/visibility/v1beta1"
 	qcache "sigs.k8s.io/kueue/pkg/cache/queue"
 	"sigs.k8s.io/kueue/pkg/visibility/api"
 
@@ -81,7 +81,7 @@ func CreateAndStartVisibilityServer(ctx context.Context, kueueMgr *qcache.Manage
 }
 
 func applyVisibilityServerOptions(config *genericapiserver.RecommendedConfig, enableInternalCertManagement bool) error {
-	o := genericoptions.NewRecommendedOptions("", api.Codecs.LegacyCodec(visibilityv1beta1.SchemeGroupVersion))
+	o := genericoptions.NewRecommendedOptions("", api.Codecs.LegacyCodec(visibility.SchemeGroupVersion))
 	o.Etcd = nil
 	o.SecureServing.BindPort = 8082
 	if enableInternalCertManagement {
diff --git a/pkg/workload/workload.go b/pkg/workload/workload.go
index 912bf503a..bf38b9438 100644
--- a/pkg/workload/workload.go
+++ b/pkg/workload/workload.go
@@ -30,7 +30,6 @@ import (
 	apimeta "k8s.io/apimachinery/pkg/api/meta"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/util/sets"
-	"k8s.io/apimachinery/pkg/util/wait"
 	"k8s.io/client-go/tools/record"
 	resourcehelpers "k8s.io/component-helpers/resource"
 	"k8s.io/klog/v2"
@@ -52,6 +51,7 @@ import (
 	utilptr "sigs.k8s.io/kueue/pkg/util/ptr"
 	utilqueue "sigs.k8s.io/kueue/pkg/util/queue"
 	utilslices "sigs.k8s.io/kueue/pkg/util/slices"
+	"sigs.k8s.io/kueue/pkg/util/wait"
 )
 
 const (
@@ -617,16 +617,8 @@ func UpdateRequeueState(wl *kueue.Workload, backoffBaseSeconds int32, backoffMax
 	// - "Rand" represents the random jitter.
 	// During this time, the workload is taken as an inadmissible and other
 	// workloads will have a chance to be admitted.
-	backoff := &wait.Backoff{
-		Duration: time.Duration(backoffBaseSeconds) * time.Second,
-		Factor:   2,
-		Jitter:   0.0001,
-		Steps:    int(requeuingCount),
-	}
-	var waitDuration time.Duration
-	for backoff.Steps > 0 {
-		waitDuration = min(backoff.Step(), time.Duration(backoffMaxSeconds)*time.Second)
-	}
+	backoff := wait.NewBackoff(time.Duration(backoffBaseSeconds)*time.Second, time.Duration(backoffMaxSeconds)*time.Second, 2, 0.0001)
+	waitDuration := backoff.WaitTime(int(requeuingCount))
 
 	wl.Status.RequeueState.RequeueAt = ptr.To(metav1.NewTime(clock.Now().Add(waitDuration)))
 	wl.Status.RequeueState.Count = &requeuingCount
@@ -917,32 +909,39 @@ type PatchAdmissionStatusOption func(*PatchAdmissionStatusOptions)
 // are generated and applied.
 //
 // Fields:
-//   - Strict: Controls whether ResourceVersion should always be cleared
+//   - StrictPatch: Controls whether ResourceVersion should always be cleared
+//     from the "original" object to ensure its inclusion in the generated
+//     patch. Defaults to true. Setting StrictPatch=false preserves the current
+//     ResourceVersion.
+//   - StrictApply: When using Patch Apply, controls whether ResourceVersion should always be cleared
 //     from the "original" object to ensure its inclusion in the generated
-//     patch. Defaults to true. Setting Strict=false preserves the current
+//     patch. Defaults to true. Setting StrictPatch=false preserves the current
 //     ResourceVersion.
 //
 // Typically, PatchAdmissionStatusOptions are constructed via DefaultPatchAdmissionStatusOptions and
 // modified using PatchAdmissionStatusOption functions (e.g., WithLoose).
 type PatchAdmissionStatusOptions struct {
-	Strict bool
+	StrictPatch bool
+	StrictApply bool
 }
 
 // DefaultPatchAdmissionStatusOptions returns a new PatchAdmissionStatusOptions instance configured with
 // default settings.
 //
-// By default, Strict is set to true, meaning ResourceVersion is cleared
+// By default, StrictPatch and StrictApply is set to true, meaning ResourceVersion is cleared
 // from the original object so it will always be included in the generated
 // patch. This ensures stricter version handling during patch application.
 func DefaultPatchAdmissionStatusOptions() *PatchAdmissionStatusOptions {
 	return &PatchAdmissionStatusOptions{
-		Strict: true, // default is strict
+		StrictPatch: true, // default is strict
+		StrictApply: true, // default is strict
 	}
 }
 
-// WithLoose returns a PatchAdmissionStatusOption that sets the Strict field on PatchAdmissionStatusOptions.
+// WithLoose returns a PatchAdmissionStatusOption that resets both the StrictPatch and StrictApply
+// fields on PatchAdmissionStatusOptions.
 //
-// By default, Strict is true. In strict mode, generated patches enforce stricter
+// By default, StrictPatch and StrictApply are true. In strict mode, generated patches enforce stricter
 // behavior by clearing the ResourceVersion field from the "original" object.
 // This ensures that the ResourceVersion is always included in the generated patch
 // and taken into account during patch application.
@@ -954,7 +953,26 @@ func DefaultPatchAdmissionStatusOptions() *PatchAdmissionStatusOptions {
 //	}, WithLoose()) // disables strict mode
 func WithLoose() PatchAdmissionStatusOption {
 	return func(o *PatchAdmissionStatusOptions) {
-		o.Strict = false
+		o.StrictPatch = false
+		o.StrictApply = false
+	}
+}
+
+// WithLooseOnApply returns a PatchAdmissionStatusOption that resets the StrictApply field on PatchAdmissionStatusOptions.
+//
+// When using Patch Apply, setting StrictApply to false enforces looser
+// version handling only for Patch Apply.
+// This is useful when the update function already handles version conflicts
+// and we want to avoid additional conflicts during Patch Apply.
+//
+// Example:
+//	patch := clientutil.Patch(ctx, c, w, clk, func() (bool, error) {
+//	    return updateFn(obj), nil
+//	}, WithLooseOnApply()) // disables strict mode for Patch Apply
+
+func WithLooseOnApply() PatchAdmissionStatusOption {
+	return func(o *PatchAdmissionStatusOptions) {
+		o.StrictApply = false
 	}
 }
 
@@ -969,7 +987,7 @@ func PatchAdmissionStatus(ctx context.Context, c client.Client, w *kueue.Workloa
 
 	if features.Enabled(features.WorkloadRequestUseMergePatch) {
 		var patchOptions []clientutil.PatchOption
-		if !opts.Strict {
+		if !opts.StrictPatch {
 			patchOptions = append(patchOptions, clientutil.WithLoose())
 		}
 		return clientutil.PatchStatus(ctx, c, w, func() (client.Object, bool, error) {
@@ -981,7 +999,7 @@ func PatchAdmissionStatus(ctx context.Context, c client.Client, w *kueue.Workloa
 		return err
 	}
 
-	return ApplyAdmissionStatus(ctx, c, wPatched, opts.Strict, clk)
+	return ApplyAdmissionStatus(ctx, c, wPatched, opts.StrictApply, clk)
 }
 
 type Ordering struct {
@@ -1176,17 +1194,17 @@ func RemoveFinalizer(ctx context.Context, c client.Client, wl *kueue.Workload) e
 
 // AdmissionChecksForWorkload returns AdmissionChecks that should be assigned to a specific Workload based on
 // ClusterQueue configuration and ResourceFlavors
-func AdmissionChecksForWorkload(log logr.Logger, wl *kueue.Workload, admissionChecks map[kueue.AdmissionCheckReference]sets.Set[kueue.ResourceFlavorReference]) sets.Set[kueue.AdmissionCheckReference] {
+func AdmissionChecksForWorkload(log logr.Logger, wl *kueue.Workload, admissionChecks map[kueue.AdmissionCheckReference]sets.Set[kueue.ResourceFlavorReference], allFlavors sets.Set[kueue.ResourceFlavorReference]) sets.Set[kueue.AdmissionCheckReference] {
 	// If all admissionChecks should be run for all flavors we don't need to wait for Workload's Admission to be set.
 	// This is also the case if admissionChecks are specified with ClusterQueue.Spec.AdmissionChecks instead of
 	// ClusterQueue.Spec.AdmissionCheckStrategy
-	allFlavors := true
+	hasAllFlavors := true
 	for _, flavors := range admissionChecks {
-		if len(flavors) != 0 {
-			allFlavors = false
+		if !flavors.Equal(allFlavors) {
+			hasAllFlavors = false
 		}
 	}
-	if allFlavors {
+	if hasAllFlavors {
 		return sets.New(slices.Collect(maps.Keys(admissionChecks))...)
 	}
 
@@ -1207,10 +1225,6 @@ func AdmissionChecksForWorkload(log logr.Logger, wl *kueue.Workload, admissionCh
 
 	acNames := sets.New[kueue.AdmissionCheckReference]()
 	for acName, flavors := range admissionChecks {
-		if len(flavors) == 0 {
-			acNames.Insert(acName)
-			continue
-		}
 		for _, fName := range assignedFlavors {
 			if flavors.Has(fName) {
 				acNames.Insert(acName)



Test patch:
diff --git a/cmd/kueuectl/app/completion/completion_test.go b/cmd/kueuectl/app/completion/completion_test.go
index 7c548777f..bc9ca92b9 100644
--- a/cmd/kueuectl/app/completion/completion_test.go
+++ b/cmd/kueuectl/app/completion/completion_test.go
@@ -25,7 +25,7 @@ import (
 	"k8s.io/apimachinery/pkg/runtime"
 	"k8s.io/utils/ptr"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/client-go/clientset/versioned/fake"
 	cmdtesting "sigs.k8s.io/kueue/cmd/kueuectl/app/testing"
 	utiltesting "sigs.k8s.io/kueue/pkg/util/testing"
@@ -109,9 +109,9 @@ func TestClusterQueueNameCompletionFunc(t *testing.T) {
 	}{
 		"should return active cluster queue names": {
 			objs: []runtime.Object{
-				utiltesting.MakeClusterQueue("cq1").StopPolicy(v1beta1.None).Obj(),
-				utiltesting.MakeClusterQueue("cq2").StopPolicy(v1beta1.Hold).Obj(),
-				utiltesting.MakeClusterQueue("cq3").StopPolicy(v1beta1.HoldAndDrain).Obj(),
+				utiltesting.MakeClusterQueue("cq1").StopPolicy(kueue.None).Obj(),
+				utiltesting.MakeClusterQueue("cq2").StopPolicy(kueue.Hold).Obj(),
+				utiltesting.MakeClusterQueue("cq3").StopPolicy(kueue.HoldAndDrain).Obj(),
 			},
 			wantNames:     []string{"cq1", "cq2", "cq3"},
 			wantDirective: cobra.ShellCompDirectiveNoFileComp,
@@ -119,9 +119,9 @@ func TestClusterQueueNameCompletionFunc(t *testing.T) {
 		"should return cluster queue names": {
 			status: ptr.To(true),
 			objs: []runtime.Object{
-				utiltesting.MakeClusterQueue("cq1").StopPolicy(v1beta1.None).Obj(),
-				utiltesting.MakeClusterQueue("cq2").StopPolicy(v1beta1.Hold).Obj(),
-				utiltesting.MakeClusterQueue("cq3").StopPolicy(v1beta1.HoldAndDrain).Obj(),
+				utiltesting.MakeClusterQueue("cq1").StopPolicy(kueue.None).Obj(),
+				utiltesting.MakeClusterQueue("cq2").StopPolicy(kueue.Hold).Obj(),
+				utiltesting.MakeClusterQueue("cq3").StopPolicy(kueue.HoldAndDrain).Obj(),
 			},
 			wantNames:     []string{"cq1"},
 			wantDirective: cobra.ShellCompDirectiveNoFileComp,
@@ -129,18 +129,18 @@ func TestClusterQueueNameCompletionFunc(t *testing.T) {
 		"should return inactive cluster queue names": {
 			status: ptr.To(false),
 			objs: []runtime.Object{
-				utiltesting.MakeClusterQueue("cq1").StopPolicy(v1beta1.None).Obj(),
-				utiltesting.MakeClusterQueue("cq2").StopPolicy(v1beta1.Hold).Obj(),
-				utiltesting.MakeClusterQueue("cq3").StopPolicy(v1beta1.HoldAndDrain).Obj(),
+				utiltesting.MakeClusterQueue("cq1").StopPolicy(kueue.None).Obj(),
+				utiltesting.MakeClusterQueue("cq2").StopPolicy(kueue.Hold).Obj(),
+				utiltesting.MakeClusterQueue("cq3").StopPolicy(kueue.HoldAndDrain).Obj(),
 			},
 			wantNames:     []string{"cq2", "cq3"},
 			wantDirective: cobra.ShellCompDirectiveNoFileComp,
 		},
 		"shouldn't return cluster queue names because only one argument can be passed": {
 			objs: []runtime.Object{
-				utiltesting.MakeClusterQueue("cq1").StopPolicy(v1beta1.None).Obj(),
-				utiltesting.MakeClusterQueue("cq2").StopPolicy(v1beta1.Hold).Obj(),
-				utiltesting.MakeClusterQueue("cq3").StopPolicy(v1beta1.HoldAndDrain).Obj(),
+				utiltesting.MakeClusterQueue("cq1").StopPolicy(kueue.None).Obj(),
+				utiltesting.MakeClusterQueue("cq2").StopPolicy(kueue.Hold).Obj(),
+				utiltesting.MakeClusterQueue("cq3").StopPolicy(kueue.HoldAndDrain).Obj(),
 			},
 			args:          []string{"cq2"},
 			wantDirective: cobra.ShellCompDirectiveNoFileComp,
@@ -178,9 +178,9 @@ func TestLocalQueueNameCompletionFunc(t *testing.T) {
 	}{
 		"should return local queue names": {
 			objs: []runtime.Object{
-				utiltesting.MakeLocalQueue("lq1", metav1.NamespaceDefault).StopPolicy(v1beta1.None).Obj(),
-				utiltesting.MakeLocalQueue("lq2", metav1.NamespaceDefault).StopPolicy(v1beta1.Hold).Obj(),
-				utiltesting.MakeLocalQueue("lq3", metav1.NamespaceDefault).StopPolicy(v1beta1.HoldAndDrain).Obj(),
+				utiltesting.MakeLocalQueue("lq1", metav1.NamespaceDefault).StopPolicy(kueue.None).Obj(),
+				utiltesting.MakeLocalQueue("lq2", metav1.NamespaceDefault).StopPolicy(kueue.Hold).Obj(),
+				utiltesting.MakeLocalQueue("lq3", metav1.NamespaceDefault).StopPolicy(kueue.HoldAndDrain).Obj(),
 			},
 			wantNames:     []string{"lq1", "lq2", "lq3"},
 			wantDirective: cobra.ShellCompDirectiveNoFileComp,
@@ -188,9 +188,9 @@ func TestLocalQueueNameCompletionFunc(t *testing.T) {
 		"should return active local queue names": {
 			status: ptr.To(true),
 			objs: []runtime.Object{
-				utiltesting.MakeLocalQueue("lq1", metav1.NamespaceDefault).StopPolicy(v1beta1.None).Obj(),
-				utiltesting.MakeLocalQueue("lq2", metav1.NamespaceDefault).StopPolicy(v1beta1.Hold).Obj(),
-				utiltesting.MakeLocalQueue("lq3", metav1.NamespaceDefault).StopPolicy(v1beta1.HoldAndDrain).Obj(),
+				utiltesting.MakeLocalQueue("lq1", metav1.NamespaceDefault).StopPolicy(kueue.None).Obj(),
+				utiltesting.MakeLocalQueue("lq2", metav1.NamespaceDefault).StopPolicy(kueue.Hold).Obj(),
+				utiltesting.MakeLocalQueue("lq3", metav1.NamespaceDefault).StopPolicy(kueue.HoldAndDrain).Obj(),
 			},
 			wantNames:     []string{"lq1"},
 			wantDirective: cobra.ShellCompDirectiveNoFileComp,
@@ -198,9 +198,9 @@ func TestLocalQueueNameCompletionFunc(t *testing.T) {
 		"should return inactive local queue names": {
 			status: ptr.To(false),
 			objs: []runtime.Object{
-				utiltesting.MakeLocalQueue("lq1", metav1.NamespaceDefault).StopPolicy(v1beta1.None).Obj(),
-				utiltesting.MakeLocalQueue("lq2", metav1.NamespaceDefault).StopPolicy(v1beta1.Hold).Obj(),
-				utiltesting.MakeLocalQueue("lq3", metav1.NamespaceDefault).StopPolicy(v1beta1.HoldAndDrain).Obj(),
+				utiltesting.MakeLocalQueue("lq1", metav1.NamespaceDefault).StopPolicy(kueue.None).Obj(),
+				utiltesting.MakeLocalQueue("lq2", metav1.NamespaceDefault).StopPolicy(kueue.Hold).Obj(),
+				utiltesting.MakeLocalQueue("lq3", metav1.NamespaceDefault).StopPolicy(kueue.HoldAndDrain).Obj(),
 			},
 			wantNames:     []string{"lq2", "lq3"},
 			wantDirective: cobra.ShellCompDirectiveNoFileComp,
diff --git a/cmd/kueuectl/app/create/create_clusterqueue_test.go b/cmd/kueuectl/app/create/create_clusterqueue_test.go
index dd0a6de8c..5d4441087 100644
--- a/cmd/kueuectl/app/create/create_clusterqueue_test.go
+++ b/cmd/kueuectl/app/create/create_clusterqueue_test.go
@@ -24,14 +24,14 @@ import (
 	corev1 "k8s.io/api/core/v1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	utiltesting "sigs.k8s.io/kueue/pkg/util/testing"
 )
 
 func TestCreateClusterQueue(t *testing.T) {
 	testCases := map[string]struct {
 		options  *ClusterQueueOptions
-		expected *v1beta1.ClusterQueue
+		expected *kueue.ClusterQueue
 	}{
 		"success_create": {
 			options: &ClusterQueueOptions{
@@ -43,10 +43,10 @@ func TestCreateClusterQueue(t *testing.T) {
 				},
 				ReclaimWithinCohort:          "Any",
 				PreemptionWithinClusterQueue: "LowerPriority",
-				ResourceGroups: []v1beta1.ResourceGroup{
+				ResourceGroups: []kueue.ResourceGroup{
 					{
 						CoveredResources: []corev1.ResourceName{},
-						Flavors: []v1beta1.FlavorQuotas{
+						Flavors: []kueue.FlavorQuotas{
 							*utiltesting.MakeFlavorQuotas("alpha").
 								Resource("cpu", "0", "0", "0").
 								Resource("memory", "0", "0", "0").
@@ -55,23 +55,23 @@ func TestCreateClusterQueue(t *testing.T) {
 					},
 				},
 			},
-			expected: &v1beta1.ClusterQueue{
+			expected: &kueue.ClusterQueue{
 				TypeMeta:   metav1.TypeMeta{APIVersion: "kueue.x-k8s.io/v1beta1", Kind: "ClusterQueue"},
 				ObjectMeta: metav1.ObjectMeta{Name: "cq1"},
-				Spec: v1beta1.ClusterQueueSpec{
+				Spec: kueue.ClusterQueueSpec{
 					Cohort:           "cohort",
-					QueueingStrategy: v1beta1.StrictFIFO,
+					QueueingStrategy: kueue.StrictFIFO,
 					NamespaceSelector: &metav1.LabelSelector{
 						MatchLabels: map[string]string{"foo": "bar"},
 					},
-					Preemption: &v1beta1.ClusterQueuePreemption{
-						ReclaimWithinCohort: v1beta1.PreemptionPolicyAny,
-						WithinClusterQueue:  v1beta1.PreemptionPolicyLowerPriority,
+					Preemption: &kueue.ClusterQueuePreemption{
+						ReclaimWithinCohort: kueue.PreemptionPolicyAny,
+						WithinClusterQueue:  kueue.PreemptionPolicyLowerPriority,
 					},
-					ResourceGroups: []v1beta1.ResourceGroup{
+					ResourceGroups: []kueue.ResourceGroup{
 						{
 							CoveredResources: []corev1.ResourceName{},
-							Flavors: []v1beta1.FlavorQuotas{
+							Flavors: []kueue.FlavorQuotas{
 								*utiltesting.MakeFlavorQuotas("alpha").
 									Resource("cpu", "0", "0", "0").
 									Resource("memory", "0", "0", "0").
@@ -99,14 +99,14 @@ func TestParseResourceQuotas(t *testing.T) {
 		borrowingArgs      []string
 		lendingArgs        []string
 		wantErr            error
-		wantResourceGroups []v1beta1.ResourceGroup
+		wantResourceGroups []kueue.ResourceGroup
 	}{
 		"should create one resource group with one flavor and nominalQuota set": {
 			quotaArgs: []string{"alpha-2.0:cpu=1;memory=1;example-1.org/memory=5Gi"},
-			wantResourceGroups: []v1beta1.ResourceGroup{
+			wantResourceGroups: []kueue.ResourceGroup{
 				{
 					CoveredResources: []corev1.ResourceName{"cpu", "memory", "example-1.org/memory"},
-					Flavors: []v1beta1.FlavorQuotas{
+					Flavors: []kueue.FlavorQuotas{
 						*utiltesting.MakeFlavorQuotas("alpha-2.0").
 							Resource("cpu", "1").
 							Resource("memory", "1").
@@ -118,10 +118,10 @@ func TestParseResourceQuotas(t *testing.T) {
 		},
 		"should create one resource group with one flavor and borrowingLimit set": {
 			borrowingArgs: []string{"alpha:cpu=1;memory=1"},
-			wantResourceGroups: []v1beta1.ResourceGroup{
+			wantResourceGroups: []kueue.ResourceGroup{
 				{
 					CoveredResources: []corev1.ResourceName{"cpu", "memory"},
-					Flavors: []v1beta1.FlavorQuotas{
+					Flavors: []kueue.FlavorQuotas{
 						*utiltesting.MakeFlavorQuotas("alpha").
 							Resource("cpu", "0", "1").
 							Resource("memory", "0", "1").
@@ -132,10 +132,10 @@ func TestParseResourceQuotas(t *testing.T) {
 		},
 		"should create one resource group with one flavor and lendingLimit set": {
 			lendingArgs: []string{"alpha:cpu=1;memory=1"},
-			wantResourceGroups: []v1beta1.ResourceGroup{
+			wantResourceGroups: []kueue.ResourceGroup{
 				{
 					CoveredResources: []corev1.ResourceName{"cpu", "memory"},
-					Flavors: []v1beta1.FlavorQuotas{
+					Flavors: []kueue.FlavorQuotas{
 						*utiltesting.MakeFlavorQuotas("alpha").
 							Resource("cpu", "0", "", "1").
 							Resource("memory", "0", "", "1").
@@ -146,10 +146,10 @@ func TestParseResourceQuotas(t *testing.T) {
 		},
 		"should create one resource group with two flavors and nominalQuota set": {
 			quotaArgs: []string{"alpha:example.com/gpu=1", "beta:example.com/gpu=2"},
-			wantResourceGroups: []v1beta1.ResourceGroup{
+			wantResourceGroups: []kueue.ResourceGroup{
 				{
 					CoveredResources: []corev1.ResourceName{"example.com/gpu"},
-					Flavors: []v1beta1.FlavorQuotas{
+					Flavors: []kueue.FlavorQuotas{
 						*utiltesting.MakeFlavorQuotas("alpha").
 							Resource("example.com/gpu", "1").
 							Obj(),
@@ -162,10 +162,10 @@ func TestParseResourceQuotas(t *testing.T) {
 		},
 		"should create one resource group when flavors listing resources in different order": {
 			quotaArgs: []string{"alpha:cpu=1;memory=1", "beta:memory=2;cpu=2"},
-			wantResourceGroups: []v1beta1.ResourceGroup{
+			wantResourceGroups: []kueue.ResourceGroup{
 				{
 					CoveredResources: []corev1.ResourceName{"cpu", "memory"},
-					Flavors: []v1beta1.FlavorQuotas{
+					Flavors: []kueue.FlavorQuotas{
 						*utiltesting.MakeFlavorQuotas("alpha").
 							Resource("cpu", "1").
 							Resource("memory", "1").
@@ -180,10 +180,10 @@ func TestParseResourceQuotas(t *testing.T) {
 		},
 		"should create two resource groups with one flavor each and nominalQuota set": {
 			quotaArgs: []string{"alpha:cpu=1;memory=1", "beta:example.com/gpu=2"},
-			wantResourceGroups: []v1beta1.ResourceGroup{
+			wantResourceGroups: []kueue.ResourceGroup{
 				{
 					CoveredResources: []corev1.ResourceName{"cpu", "memory"},
-					Flavors: []v1beta1.FlavorQuotas{
+					Flavors: []kueue.FlavorQuotas{
 						*utiltesting.MakeFlavorQuotas("alpha").
 							Resource("cpu", "1").
 							Resource("memory", "1").
@@ -192,7 +192,7 @@ func TestParseResourceQuotas(t *testing.T) {
 				},
 				{
 					CoveredResources: []corev1.ResourceName{"example.com/gpu"},
-					Flavors: []v1beta1.FlavorQuotas{
+					Flavors: []kueue.FlavorQuotas{
 						*utiltesting.MakeFlavorQuotas("beta").
 							Resource("example.com/gpu", "2").
 							Obj(),
@@ -202,10 +202,10 @@ func TestParseResourceQuotas(t *testing.T) {
 		},
 		"should create two resource groups with multiple flavors and nominalQuota set": {
 			quotaArgs: []string{"alpha:cpu=1;memory=1", "beta:example.com/gpu=2", "gamma:cpu=2;memory=2"},
-			wantResourceGroups: []v1beta1.ResourceGroup{
+			wantResourceGroups: []kueue.ResourceGroup{
 				{
 					CoveredResources: []corev1.ResourceName{"cpu", "memory"},
-					Flavors: []v1beta1.FlavorQuotas{
+					Flavors: []kueue.FlavorQuotas{
 						*utiltesting.MakeFlavorQuotas("alpha").
 							Resource("cpu", "1").
 							Resource("memory", "1").
@@ -218,7 +218,7 @@ func TestParseResourceQuotas(t *testing.T) {
 				},
 				{
 					CoveredResources: []corev1.ResourceName{"example.com/gpu"},
-					Flavors: []v1beta1.FlavorQuotas{
+					Flavors: []kueue.FlavorQuotas{
 						*utiltesting.MakeFlavorQuotas("beta").
 							Resource("example.com/gpu", "2").
 							Obj(),
@@ -230,10 +230,10 @@ func TestParseResourceQuotas(t *testing.T) {
 			quotaArgs:     []string{"alpha:cpu=1;memory=2"},
 			borrowingArgs: []string{"alpha:cpu=1;memory=2"},
 			lendingArgs:   []string{"alpha:cpu=1;memory=2"},
-			wantResourceGroups: []v1beta1.ResourceGroup{
+			wantResourceGroups: []kueue.ResourceGroup{
 				{
 					CoveredResources: []corev1.ResourceName{"cpu", "memory"},
-					Flavors: []v1beta1.FlavorQuotas{
+					Flavors: []kueue.FlavorQuotas{
 						*utiltesting.MakeFlavorQuotas("alpha").
 							Resource("cpu", "1", "1", "1").
 							Resource("memory", "2", "2", "2").
@@ -246,10 +246,10 @@ func TestParseResourceQuotas(t *testing.T) {
 			quotaArgs:     []string{"alpha:example.com/gpu=1", "beta:example.com/gpu=2"},
 			borrowingArgs: []string{"alpha:example.com/gpu=1", "beta:example.com/gpu=2"},
 			lendingArgs:   []string{"alpha:example.com/gpu=1", "beta:example.com/gpu=2"},
-			wantResourceGroups: []v1beta1.ResourceGroup{
+			wantResourceGroups: []kueue.ResourceGroup{
 				{
 					CoveredResources: []corev1.ResourceName{"example.com/gpu"},
-					Flavors: []v1beta1.FlavorQuotas{
+					Flavors: []kueue.FlavorQuotas{
 						*utiltesting.MakeFlavorQuotas("alpha").
 							Resource("example.com/gpu", "1", "1", "1").
 							Obj(),
@@ -264,10 +264,10 @@ func TestParseResourceQuotas(t *testing.T) {
 			quotaArgs:     []string{"alpha:cpu=1;memory=1", "beta:example.com/gpu=2"},
 			borrowingArgs: []string{"alpha:cpu=1;memory=1", "beta:example.com/gpu=2"},
 			lendingArgs:   []string{"alpha:cpu=1;memory=1", "beta:example.com/gpu=2"},
-			wantResourceGroups: []v1beta1.ResourceGroup{
+			wantResourceGroups: []kueue.ResourceGroup{
 				{
 					CoveredResources: []corev1.ResourceName{"cpu", "memory"},
-					Flavors: []v1beta1.FlavorQuotas{
+					Flavors: []kueue.FlavorQuotas{
 						*utiltesting.MakeFlavorQuotas("alpha").
 							Resource("cpu", "1", "1", "1").
 							Resource("memory", "1", "1", "1").
@@ -276,7 +276,7 @@ func TestParseResourceQuotas(t *testing.T) {
 				},
 				{
 					CoveredResources: []corev1.ResourceName{"example.com/gpu"},
-					Flavors: []v1beta1.FlavorQuotas{
+					Flavors: []kueue.FlavorQuotas{
 						*utiltesting.MakeFlavorQuotas("beta").
 							Resource("example.com/gpu", "2", "2", "2").
 							Obj(),
@@ -288,10 +288,10 @@ func TestParseResourceQuotas(t *testing.T) {
 			quotaArgs:     []string{"alpha:cpu=1;memory=1", "beta:example.com/gpu=2", "gamma:cpu=2;memory=2"},
 			borrowingArgs: []string{"alpha:cpu=1;memory=1", "beta:example.com/gpu=2", "gamma:cpu=2;memory=2"},
 			lendingArgs:   []string{"alpha:cpu=1;memory=1", "beta:example.com/gpu=2", "gamma:cpu=2;memory=2"},
-			wantResourceGroups: []v1beta1.ResourceGroup{
+			wantResourceGroups: []kueue.ResourceGroup{
 				{
 					CoveredResources: []corev1.ResourceName{"cpu", "memory"},
-					Flavors: []v1beta1.FlavorQuotas{
+					Flavors: []kueue.FlavorQuotas{
 						*utiltesting.MakeFlavorQuotas("alpha").
 							Resource("cpu", "1", "1", "1").
 							Resource("memory", "1", "1", "1").
@@ -304,7 +304,7 @@ func TestParseResourceQuotas(t *testing.T) {
 				},
 				{
 					CoveredResources: []corev1.ResourceName{"example.com/gpu"},
-					Flavors: []v1beta1.FlavorQuotas{
+					Flavors: []kueue.FlavorQuotas{
 						*utiltesting.MakeFlavorQuotas("beta").
 							Resource("example.com/gpu", "2", "2", "2").
 							Obj(),
diff --git a/cmd/kueuectl/app/create/create_localqueue_test.go b/cmd/kueuectl/app/create/create_localqueue_test.go
index 7bf02d629..f459d8790 100644
--- a/cmd/kueuectl/app/create/create_localqueue_test.go
+++ b/cmd/kueuectl/app/create/create_localqueue_test.go
@@ -22,13 +22,13 @@ import (
 	"github.com/google/go-cmp/cmp"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 )
 
 func TestCreateLocalQueue(t *testing.T) {
 	testCases := map[string]struct {
 		options  *LocalQueueOptions
-		expected *v1beta1.LocalQueue
+		expected *kueue.LocalQueue
 	}{
 		"success_create": {
 			options: &LocalQueueOptions{
@@ -36,10 +36,10 @@ func TestCreateLocalQueue(t *testing.T) {
 				Namespace:    "ns1",
 				ClusterQueue: "cq1",
 			},
-			expected: &v1beta1.LocalQueue{
+			expected: &kueue.LocalQueue{
 				TypeMeta:   metav1.TypeMeta{APIVersion: "kueue.x-k8s.io/v1beta1", Kind: "LocalQueue"},
 				ObjectMeta: metav1.ObjectMeta{Name: "lq1", Namespace: "ns1"},
-				Spec:       v1beta1.LocalQueueSpec{ClusterQueue: "cq1"},
+				Spec:       kueue.LocalQueueSpec{ClusterQueue: "cq1"},
 			},
 		},
 	}
diff --git a/cmd/kueuectl/app/create/create_resourceflavor_test.go b/cmd/kueuectl/app/create/create_resourceflavor_test.go
index 95f132fd7..8f1fd0b71 100644
--- a/cmd/kueuectl/app/create/create_resourceflavor_test.go
+++ b/cmd/kueuectl/app/create/create_resourceflavor_test.go
@@ -26,7 +26,7 @@ import (
 	"k8s.io/cli-runtime/pkg/genericiooptions"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/client-go/clientset/versioned/fake"
 	cmdtesting "sigs.k8s.io/kueue/cmd/kueuectl/app/testing"
 	utiltesting "sigs.k8s.io/kueue/pkg/util/testing"
@@ -205,7 +205,7 @@ func TestResourceFlavorOptions_parseTolerations(t *testing.T) {
 func TestResourceFlavorOptions_createResourceFlavor(t *testing.T) {
 	testCases := map[string]struct {
 		options  *ResourceFlavorOptions
-		expected *v1beta1.ResourceFlavor
+		expected *kueue.ResourceFlavor
 	}{
 		"success create": {
 			options: &ResourceFlavorOptions{
@@ -213,10 +213,10 @@ func TestResourceFlavorOptions_createResourceFlavor(t *testing.T) {
 				NodeLabels: map[string]string{"key1": "value"},
 				NodeTaints: []corev1.Taint{{Key: "key1", Value: "value", Effect: corev1.TaintEffectNoSchedule}},
 			},
-			expected: &v1beta1.ResourceFlavor{
+			expected: &kueue.ResourceFlavor{
 				TypeMeta:   metav1.TypeMeta{APIVersion: "kueue.x-k8s.io/v1beta1", Kind: "ResourceFlavor"},
 				ObjectMeta: metav1.ObjectMeta{Name: "rf"},
-				Spec: v1beta1.ResourceFlavorSpec{
+				Spec: kueue.ResourceFlavorSpec{
 					NodeLabels: map[string]string{"key1": "value"},
 					NodeTaints: []corev1.Taint{{Key: "key1", Value: "value", Effect: corev1.TaintEffectNoSchedule}},
 				},
@@ -237,7 +237,7 @@ func TestResourceFlavorCmd(t *testing.T) {
 	testCases := map[string]struct {
 		rfName     string
 		args       []string
-		wantRf     *v1beta1.ResourceFlavor
+		wantRf     *kueue.ResourceFlavor
 		wantOut    string
 		wantOutErr string
 		wantErr    string
@@ -250,25 +250,25 @@ func TestResourceFlavorCmd(t *testing.T) {
 		"shouldn't create resource flavor with dry-run client": {
 			rfName:  "rf",
 			args:    []string{"--dry-run", "client"},
-			wantRf:  &v1beta1.ResourceFlavor{},
+			wantRf:  &kueue.ResourceFlavor{},
 			wantOut: "resourceflavor.kueue.x-k8s.io/rf created (client dry run)\n",
 		},
 		"should create resource flavor": {
 			rfName: "rf",
-			wantRf: &v1beta1.ResourceFlavor{
-				TypeMeta:   metav1.TypeMeta{APIVersion: v1beta1.SchemeGroupVersion.String(), Kind: "ResourceFlavor"},
+			wantRf: &kueue.ResourceFlavor{
+				TypeMeta:   metav1.TypeMeta{APIVersion: kueue.SchemeGroupVersion.String(), Kind: "ResourceFlavor"},
 				ObjectMeta: metav1.ObjectMeta{Name: "rf"},
-				Spec:       v1beta1.ResourceFlavorSpec{},
+				Spec:       kueue.ResourceFlavorSpec{},
 			},
 			wantOut: "resourceflavor.kueue.x-k8s.io/rf created\n",
 		},
 		"should create resource flavor with node labels": {
 			rfName: "rf",
 			args:   []string{"--node-labels", "kubernetes.io/arch=arm64,kubernetes.io/os=linux"},
-			wantRf: &v1beta1.ResourceFlavor{
-				TypeMeta:   metav1.TypeMeta{APIVersion: v1beta1.SchemeGroupVersion.String(), Kind: "ResourceFlavor"},
+			wantRf: &kueue.ResourceFlavor{
+				TypeMeta:   metav1.TypeMeta{APIVersion: kueue.SchemeGroupVersion.String(), Kind: "ResourceFlavor"},
 				ObjectMeta: metav1.ObjectMeta{Name: "rf"},
-				Spec: v1beta1.ResourceFlavorSpec{
+				Spec: kueue.ResourceFlavorSpec{
 					NodeLabels: map[string]string{
 						corev1.LabelArchStable: "arm64",
 						corev1.LabelOSStable:   "linux",
@@ -280,10 +280,10 @@ func TestResourceFlavorCmd(t *testing.T) {
 		"should create resource flavor with node taints": {
 			rfName: "rf",
 			args:   []string{"--node-taints", "key1=value:NoSchedule,key1=value:PreferNoSchedule,key2=value:NoSchedule,key3=value:NoSchedule"},
-			wantRf: &v1beta1.ResourceFlavor{
-				TypeMeta:   metav1.TypeMeta{APIVersion: v1beta1.SchemeGroupVersion.String(), Kind: "ResourceFlavor"},
+			wantRf: &kueue.ResourceFlavor{
+				TypeMeta:   metav1.TypeMeta{APIVersion: kueue.SchemeGroupVersion.String(), Kind: "ResourceFlavor"},
 				ObjectMeta: metav1.ObjectMeta{Name: "rf"},
-				Spec: v1beta1.ResourceFlavorSpec{
+				Spec: kueue.ResourceFlavorSpec{
 					NodeTaints: []corev1.Taint{
 						{Key: "key1", Value: "value", Effect: corev1.TaintEffectNoSchedule},
 						{Key: "key1", Value: "value", Effect: corev1.TaintEffectPreferNoSchedule},
@@ -302,10 +302,10 @@ func TestResourceFlavorCmd(t *testing.T) {
 		"should create resource flavor with toleration": {
 			rfName: "rf",
 			args:   []string{"--tolerations", "key1=value:NoSchedule,key2:NoSchedule"},
-			wantRf: &v1beta1.ResourceFlavor{
-				TypeMeta:   metav1.TypeMeta{APIVersion: v1beta1.SchemeGroupVersion.String(), Kind: "ResourceFlavor"},
+			wantRf: &kueue.ResourceFlavor{
+				TypeMeta:   metav1.TypeMeta{APIVersion: kueue.SchemeGroupVersion.String(), Kind: "ResourceFlavor"},
 				ObjectMeta: metav1.ObjectMeta{Name: "rf"},
-				Spec: v1beta1.ResourceFlavorSpec{
+				Spec: kueue.ResourceFlavorSpec{
 					Tolerations: []corev1.Toleration{
 						{Key: "key1", Value: "value", Effect: corev1.TaintEffectNoSchedule, Operator: corev1.TolerationOpEqual},
 						{Key: "key2", Effect: corev1.TaintEffectNoSchedule, Operator: corev1.TolerationOpExists},
diff --git a/cmd/kueuectl/app/delete/delete_workload_test.go b/cmd/kueuectl/app/delete/delete_workload_test.go
index 8a894effe..3b3bbe9e1 100644
--- a/cmd/kueuectl/app/delete/delete_workload_test.go
+++ b/cmd/kueuectl/app/delete/delete_workload_test.go
@@ -31,7 +31,7 @@ import (
 	k8sscheme "k8s.io/client-go/kubernetes/scheme"
 	kubetesting "k8s.io/client-go/testing"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/client-go/clientset/versioned/fake"
 	cmdtesting "sigs.k8s.io/kueue/cmd/kueuectl/app/testing"
 	utiltesting "sigs.k8s.io/kueue/pkg/util/testing"
@@ -47,7 +47,7 @@ func TestWorkloadCmd(t *testing.T) {
 		workloads     []runtime.Object
 		jobs          []runtime.Object
 		gvk           schema.GroupVersionKind
-		wantWorkloads []v1beta1.Workload
+		wantWorkloads []kueue.Workload
 		wantJobList   runtime.Object
 		ignoreOut     bool
 		wantOut       string
@@ -67,7 +67,7 @@ func TestWorkloadCmd(t *testing.T) {
 				&bactchv1.Job{ObjectMeta: metav1.ObjectMeta{Name: "j1", Namespace: metav1.NamespaceDefault}},
 			},
 			gvk: schema.GroupVersionKind{Group: "batch", Version: "v1", Kind: "Job"},
-			wantWorkloads: []v1beta1.Workload{
+			wantWorkloads: []kueue.Workload{
 				*utiltesting.MakeWorkload("wl1", metav1.NamespaceDefault).OwnerReference(jobGVK, "j1", "").Obj(),
 			},
 			wantJobList: &bactchv1.JobList{
@@ -95,7 +95,7 @@ Do you want to proceed (y/n)? Deletion is canceled
 				&bactchv1.Job{ObjectMeta: metav1.ObjectMeta{Name: "j2", Namespace: metav1.NamespaceDefault}},
 			},
 			gvk: schema.GroupVersionKind{Group: "batch", Version: "v1", Kind: "Job"},
-			wantWorkloads: []v1beta1.Workload{
+			wantWorkloads: []kueue.Workload{
 				*utiltesting.MakeWorkload("wl1", metav1.NamespaceDefault).OwnerReference(jobGVK, "j1", "").Obj(),
 			},
 			wantJobList: &bactchv1.JobList{
@@ -129,7 +129,7 @@ Do you want to proceed (y/n)? Deletion is canceled
 				&bactchv1.Job{ObjectMeta: metav1.ObjectMeta{Name: "j2", Namespace: metav1.NamespaceDefault}},
 			},
 			gvk: schema.GroupVersionKind{Group: "batch", Version: "v1", Kind: "Job"},
-			wantWorkloads: []v1beta1.Workload{
+			wantWorkloads: []kueue.Workload{
 				*utiltesting.MakeWorkload("wl1", metav1.NamespaceDefault).OwnerReference(jobGVK, "j1", "").Obj(),
 				*utiltesting.MakeWorkload("wl2", metav1.NamespaceDefault).Obj(),
 			},
@@ -158,7 +158,7 @@ Do you want to proceed (y/n)? jobs.batch/j1 deleted
 				&bactchv1.Job{ObjectMeta: metav1.ObjectMeta{Name: "j2", Namespace: metav1.NamespaceDefault}},
 			},
 			gvk: schema.GroupVersionKind{Group: "batch", Version: "v1", Kind: "Job"},
-			wantWorkloads: []v1beta1.Workload{
+			wantWorkloads: []kueue.Workload{
 				*utiltesting.MakeWorkload("wl1", metav1.NamespaceDefault).OwnerReference(jobGVK, "j1", "").Obj(),
 				*utiltesting.MakeWorkload("wl2", metav1.NamespaceDefault).Obj(),
 			},
@@ -185,7 +185,7 @@ Do you want to proceed (y/n)? jobs.batch/j1 deleted
 				&bactchv1.Job{ObjectMeta: metav1.ObjectMeta{Name: "j2", Namespace: metav1.NamespaceDefault}},
 			},
 			gvk: schema.GroupVersionKind{Group: "batch", Version: "v1", Kind: "Job"},
-			wantWorkloads: []v1beta1.Workload{
+			wantWorkloads: []kueue.Workload{
 				*utiltesting.MakeWorkload("wl1", metav1.NamespaceDefault).OwnerReference(jobGVK, "j1", "").Obj(),
 				*utiltesting.MakeWorkload("wl3", "test").Obj(),
 			},
@@ -213,7 +213,7 @@ Do you want to proceed (y/n)? jobs.batch/j1 deleted
 				&bactchv1.Job{ObjectMeta: metav1.ObjectMeta{Name: "j2", Namespace: metav1.NamespaceDefault}},
 			},
 			gvk: schema.GroupVersionKind{Group: "batch", Version: "v1", Kind: "Job"},
-			wantWorkloads: []v1beta1.Workload{
+			wantWorkloads: []kueue.Workload{
 				*utiltesting.MakeWorkload("wl1", metav1.NamespaceDefault).OwnerReference(jobGVK, "j1", "").Obj(),
 			},
 			wantJobList: &bactchv1.JobList{
@@ -237,7 +237,7 @@ Do you want to proceed (y/n)? jobs.batch/j1 deleted
 				&bactchv1.Job{ObjectMeta: metav1.ObjectMeta{Name: "j1", Namespace: metav1.NamespaceDefault}},
 			},
 			gvk: schema.GroupVersionKind{Group: "batch", Version: "v1", Kind: "Job"},
-			wantWorkloads: []v1beta1.Workload{
+			wantWorkloads: []kueue.Workload{
 				*utiltesting.MakeWorkload("wl1", metav1.NamespaceDefault).OwnerReference(jobGVK, "j1", "").Obj(),
 			},
 			wantJobList: &bactchv1.JobList{
@@ -260,7 +260,7 @@ Do you want to proceed (y/n)? jobs.batch/j1 deleted
 				&bactchv1.Job{ObjectMeta: metav1.ObjectMeta{Name: "j1", Namespace: metav1.NamespaceDefault}},
 			},
 			gvk: schema.GroupVersionKind{Group: "batch", Version: "v1", Kind: "Job"},
-			wantWorkloads: []v1beta1.Workload{
+			wantWorkloads: []kueue.Workload{
 				*utiltesting.MakeWorkload("wl1", metav1.NamespaceDefault).OwnerReference(jobGVK, "j1", "").Obj(),
 			},
 			wantJobList: &bactchv1.JobList{
diff --git a/cmd/kueuectl/app/list/list_clusterqueue_test.go b/cmd/kueuectl/app/list/list_clusterqueue_test.go
index 53c18504a..9f69f70e6 100644
--- a/cmd/kueuectl/app/list/list_clusterqueue_test.go
+++ b/cmd/kueuectl/app/list/list_clusterqueue_test.go
@@ -27,7 +27,7 @@ import (
 	"k8s.io/cli-runtime/pkg/genericiooptions"
 	testingclock "k8s.io/utils/clock/testing"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/client-go/clientset/versioned/fake"
 	cmdtesting "sigs.k8s.io/kueue/cmd/kueuectl/app/testing"
 	utiltesting "sigs.k8s.io/kueue/pkg/util/testing"
@@ -52,14 +52,14 @@ func TestClusterQueueRun(t *testing.T) {
 					Cohort("cohort1").
 					PendingWorkloads(1).
 					AdmittedWorkloads(2).
-					Condition(v1beta1.ClusterQueueActive, metav1.ConditionTrue, "", "").
+					Condition(kueue.ClusterQueueActive, metav1.ConditionTrue, "", "").
 					Obj(),
 				utiltesting.MakeClusterQueue("cq2").
 					Creation(testStartTime.Add(-2*time.Hour).Truncate(time.Second)).
 					Cohort("cohort2").
 					PendingWorkloads(3).
 					AdmittedWorkloads(4).
-					Condition(v1beta1.ClusterQueueActive, metav1.ConditionFalse, "", "").
+					Condition(kueue.ClusterQueueActive, metav1.ConditionFalse, "", "").
 					Obj(),
 			},
 			wantOut: `NAME   COHORT    PENDING WORKLOADS   ADMITTED WORKLOADS   ACTIVE   AGE
@@ -74,14 +74,14 @@ cq1    cohort1   1                   2                    true     60m
 					Cohort("cohort1").
 					PendingWorkloads(1).
 					AdmittedWorkloads(2).
-					Condition(v1beta1.ClusterQueueActive, metav1.ConditionTrue, "", "").
+					Condition(kueue.ClusterQueueActive, metav1.ConditionTrue, "", "").
 					Obj(),
 				utiltesting.MakeClusterQueue("cq2").
 					Creation(testStartTime.Add(-2*time.Hour).Truncate(time.Second)).
 					Cohort("cohort2").
 					PendingWorkloads(3).
 					AdmittedWorkloads(4).
-					Condition(v1beta1.ClusterQueueActive, metav1.ConditionFalse, "", "").
+					Condition(kueue.ClusterQueueActive, metav1.ConditionFalse, "", "").
 					Obj(),
 			},
 			wantOut: `NAME   COHORT    PENDING WORKLOADS   ADMITTED WORKLOADS   ACTIVE   AGE
@@ -96,7 +96,7 @@ cq2    cohort2   3                   4                    false    120m
 					Cohort("cohort1").
 					PendingWorkloads(1).
 					AdmittedWorkloads(2).
-					Condition(v1beta1.ClusterQueueActive, metav1.ConditionTrue, "", "").
+					Condition(kueue.ClusterQueueActive, metav1.ConditionTrue, "", "").
 					Label("key", "value1").
 					Obj(),
 				utiltesting.MakeClusterQueue("cq2").
@@ -104,7 +104,7 @@ cq2    cohort2   3                   4                    false    120m
 					Cohort("cohort2").
 					PendingWorkloads(3).
 					AdmittedWorkloads(4).
-					Condition(v1beta1.ClusterQueueActive, metav1.ConditionFalse, "", "").
+					Condition(kueue.ClusterQueueActive, metav1.ConditionFalse, "", "").
 					Label("key", "value2").
 					Obj(),
 			},
@@ -120,7 +120,7 @@ cq1    cohort1   1                   2                    true     60m
 					Cohort("cohort1").
 					PendingWorkloads(1).
 					AdmittedWorkloads(2).
-					Condition(v1beta1.ClusterQueueActive, metav1.ConditionTrue, "", "").
+					Condition(kueue.ClusterQueueActive, metav1.ConditionTrue, "", "").
 					Label("key", "value1").
 					Obj(),
 				utiltesting.MakeClusterQueue("cq2").
@@ -128,7 +128,7 @@ cq1    cohort1   1                   2                    true     60m
 					Cohort("cohort2").
 					PendingWorkloads(3).
 					AdmittedWorkloads(4).
-					Condition(v1beta1.ClusterQueueActive, metav1.ConditionFalse, "", "").
+					Condition(kueue.ClusterQueueActive, metav1.ConditionFalse, "", "").
 					Label("key", "value2").
 					Obj(),
 			},
diff --git a/cmd/kueuectl/app/list/list_localqueue_printer_test.go b/cmd/kueuectl/app/list/list_localqueue_printer_test.go
index 9471e4286..b11dfe080 100644
--- a/cmd/kueuectl/app/list/list_localqueue_printer_test.go
+++ b/cmd/kueuectl/app/list/list_localqueue_printer_test.go
@@ -25,7 +25,7 @@ import (
 	"k8s.io/apimachinery/pkg/runtime"
 	testingclock "k8s.io/utils/clock/testing"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 )
 
 func TestLocalQueuePrint(t *testing.T) {
@@ -33,21 +33,21 @@ func TestLocalQueuePrint(t *testing.T) {
 
 	testCases := map[string]struct {
 		options *LocalQueueOptions
-		in      *v1beta1.LocalQueueList
+		in      *kueue.LocalQueueList
 		out     []metav1.TableRow
 	}{
 		"should print local queue list": {
 			options: &LocalQueueOptions{},
-			in: &v1beta1.LocalQueueList{
-				Items: []v1beta1.LocalQueue{
+			in: &kueue.LocalQueueList{
+				Items: []kueue.LocalQueue{
 					{
 						TypeMeta: metav1.TypeMeta{},
 						ObjectMeta: metav1.ObjectMeta{
 							Name:              "lq",
 							CreationTimestamp: metav1.NewTime(testStartTime.Add(-time.Hour).Truncate(time.Second)),
 						},
-						Spec: v1beta1.LocalQueueSpec{ClusterQueue: "cq1"},
-						Status: v1beta1.LocalQueueStatus{
+						Spec: kueue.LocalQueueSpec{ClusterQueue: "cq1"},
+						Status: kueue.LocalQueueStatus{
 							PendingWorkloads:  1,
 							AdmittedWorkloads: 2,
 						},
@@ -56,16 +56,16 @@ func TestLocalQueuePrint(t *testing.T) {
 			},
 			out: []metav1.TableRow{
 				{
-					Cells: []any{"lq", v1beta1.ClusterQueueReference("cq1"), int32(1), int32(2), "60m"},
+					Cells: []any{"lq", kueue.ClusterQueueReference("cq1"), int32(1), int32(2), "60m"},
 					Object: runtime.RawExtension{
-						Object: &v1beta1.LocalQueue{
+						Object: &kueue.LocalQueue{
 							TypeMeta: metav1.TypeMeta{},
 							ObjectMeta: metav1.ObjectMeta{
 								Name:              "lq",
 								CreationTimestamp: metav1.NewTime(testStartTime.Add(-time.Hour).Truncate(time.Second)),
 							},
-							Spec: v1beta1.LocalQueueSpec{ClusterQueue: "cq1"},
-							Status: v1beta1.LocalQueueStatus{
+							Spec: kueue.LocalQueueSpec{ClusterQueue: "cq1"},
+							Status: kueue.LocalQueueStatus{
 								PendingWorkloads:  1,
 								AdmittedWorkloads: 2,
 							},
diff --git a/cmd/kueuectl/app/list/list_localqueue_test.go b/cmd/kueuectl/app/list/list_localqueue_test.go
index ba8414bb3..0708d0f4d 100644
--- a/cmd/kueuectl/app/list/list_localqueue_test.go
+++ b/cmd/kueuectl/app/list/list_localqueue_test.go
@@ -28,7 +28,7 @@ import (
 	"k8s.io/cli-runtime/pkg/genericiooptions"
 	testingclock "k8s.io/utils/clock/testing"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/client-go/clientset/versioned/fake"
 	cmdtesting "sigs.k8s.io/kueue/cmd/kueuectl/app/testing"
 	utiltesting "sigs.k8s.io/kueue/pkg/util/testing"
@@ -37,28 +37,28 @@ import (
 func TestLocalQueueFilter(t *testing.T) {
 	testCases := map[string]struct {
 		options *LocalQueueOptions
-		in      *v1beta1.LocalQueueList
-		out     *v1beta1.LocalQueueList
+		in      *kueue.LocalQueueList
+		out     *kueue.LocalQueueList
 	}{
 		"shouldn't filter": {
 			options: &LocalQueueOptions{},
-			in: &v1beta1.LocalQueueList{
-				Items: []v1beta1.LocalQueue{
+			in: &kueue.LocalQueueList{
+				Items: []kueue.LocalQueue{
 					{
-						Spec: v1beta1.LocalQueueSpec{ClusterQueue: "cq1"},
+						Spec: kueue.LocalQueueSpec{ClusterQueue: "cq1"},
 					},
 					{
-						Spec: v1beta1.LocalQueueSpec{ClusterQueue: "cq2"},
+						Spec: kueue.LocalQueueSpec{ClusterQueue: "cq2"},
 					},
 				},
 			},
-			out: &v1beta1.LocalQueueList{
-				Items: []v1beta1.LocalQueue{
+			out: &kueue.LocalQueueList{
+				Items: []kueue.LocalQueue{
 					{
-						Spec: v1beta1.LocalQueueSpec{ClusterQueue: "cq1"},
+						Spec: kueue.LocalQueueSpec{ClusterQueue: "cq1"},
 					},
 					{
-						Spec: v1beta1.LocalQueueSpec{ClusterQueue: "cq2"},
+						Spec: kueue.LocalQueueSpec{ClusterQueue: "cq2"},
 					},
 				},
 			},
@@ -67,20 +67,20 @@ func TestLocalQueueFilter(t *testing.T) {
 			options: &LocalQueueOptions{
 				ClusterQueueFilter: "cq1",
 			},
-			in: &v1beta1.LocalQueueList{
-				Items: []v1beta1.LocalQueue{
+			in: &kueue.LocalQueueList{
+				Items: []kueue.LocalQueue{
 					{
-						Spec: v1beta1.LocalQueueSpec{ClusterQueue: "cq1"},
+						Spec: kueue.LocalQueueSpec{ClusterQueue: "cq1"},
 					},
 					{
-						Spec: v1beta1.LocalQueueSpec{ClusterQueue: "cq2"},
+						Spec: kueue.LocalQueueSpec{ClusterQueue: "cq2"},
 					},
 				},
 			},
-			out: &v1beta1.LocalQueueList{
-				Items: []v1beta1.LocalQueue{
+			out: &kueue.LocalQueueList{
+				Items: []kueue.LocalQueue{
 					{
-						Spec: v1beta1.LocalQueueSpec{ClusterQueue: "cq1"},
+						Spec: kueue.LocalQueueSpec{ClusterQueue: "cq1"},
 					},
 				},
 			},
diff --git a/cmd/kueuectl/app/list/list_resourceflavor_printer_test.go b/cmd/kueuectl/app/list/list_resourceflavor_printer_test.go
index ccbd577ad..6a7b42512 100644
--- a/cmd/kueuectl/app/list/list_resourceflavor_printer_test.go
+++ b/cmd/kueuectl/app/list/list_resourceflavor_printer_test.go
@@ -25,7 +25,7 @@ import (
 	"k8s.io/apimachinery/pkg/runtime"
 	testingclock "k8s.io/utils/clock/testing"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	utiltesting "sigs.k8s.io/kueue/pkg/util/testing"
 )
 
@@ -34,13 +34,13 @@ func TestResourceFlavorPrint(t *testing.T) {
 
 	testCases := map[string]struct {
 		options *ResourceFlavorOptions
-		in      *v1beta1.ResourceFlavorList
+		in      *kueue.ResourceFlavorList
 		out     []metav1.TableRow
 	}{
 		"should print resource flavor list": {
 			options: &ResourceFlavorOptions{},
-			in: &v1beta1.ResourceFlavorList{
-				Items: []v1beta1.ResourceFlavor{
+			in: &kueue.ResourceFlavorList{
+				Items: []kueue.ResourceFlavor{
 					*utiltesting.MakeResourceFlavor("rf").
 						Creation(testStartTime.Add(-time.Hour).Truncate(time.Second)).
 						NodeLabel("key1", "value").
diff --git a/cmd/kueuectl/app/list/list_test.go b/cmd/kueuectl/app/list/list_test.go
index 44b6e97f9..d65867776 100644
--- a/cmd/kueuectl/app/list/list_test.go
+++ b/cmd/kueuectl/app/list/list_test.go
@@ -29,7 +29,7 @@ import (
 	"k8s.io/cli-runtime/pkg/genericiooptions"
 	testingclock "k8s.io/utils/clock/testing"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/client-go/clientset/versioned/fake"
 	cmdtesting "sigs.k8s.io/kueue/cmd/kueuectl/app/testing"
 	utiltesting "sigs.k8s.io/kueue/pkg/util/testing"
@@ -92,12 +92,12 @@ ns2         lq2    cq2            2                   2                    120m
 			args: []string{"clusterqueue"},
 			objs: []runtime.Object{
 				utiltesting.MakeClusterQueue("cq1").
-					Condition(v1beta1.ClusterQueueActive, metav1.ConditionTrue, "", "").
+					Condition(kueue.ClusterQueueActive, metav1.ConditionTrue, "", "").
 					Cohort("cohort1").
 					Creation(testStartTime.Add(-1 * time.Hour).Truncate(time.Second)).
 					Obj(),
 				utiltesting.MakeClusterQueue("cq2").
-					Condition(v1beta1.ClusterQueueActive, metav1.ConditionFalse, "", "").
+					Condition(kueue.ClusterQueueActive, metav1.ConditionFalse, "", "").
 					Cohort("cohort2").
 					Creation(testStartTime.Add(-2 * time.Hour).Truncate(time.Second)).
 					Obj(),
diff --git a/pkg/controller/core/workload_controller_test.go b/pkg/controller/core/workload_controller_test.go
index ed734b70d..1fcfaa2c3 100644
--- a/pkg/controller/core/workload_controller_test.go
+++ b/pkg/controller/core/workload_controller_test.go
@@ -666,6 +666,7 @@ func TestReconcile(t *testing.T) {
 				Queue("queue").
 				Obj(),
 			cq: utiltesting.MakeClusterQueue("cq").
+				ResourceGroup(*utiltesting.MakeFlavorQuotas("flavor1").Obj(), *utiltesting.MakeFlavorQuotas("flavor2").Obj()).
 				AdmissionCheckStrategy(
 					*utiltesting.MakeAdmissionCheckStrategyRule("ac1", "flavor1").Obj(),
 					*utiltesting.MakeAdmissionCheckStrategyRule("ac2").Obj()).
@@ -699,6 +700,7 @@ func TestReconcile(t *testing.T) {
 				Queue("queue").
 				Obj(),
 			cq: utiltesting.MakeClusterQueue("cq").
+				ResourceGroup(*utiltesting.MakeFlavorQuotas("flavor1").Obj(), *utiltesting.MakeFlavorQuotas("flavor2").Obj()).
 				AdmissionChecks("ac1", "ac2").
 				Obj(),
 			lq: utiltesting.MakeLocalQueue("queue", "ns").ClusterQueue("cq").Obj(),
diff --git a/pkg/controller/jobframework/reconciler_test.go b/pkg/controller/jobframework/reconciler_test.go
index 464419385..624578346 100644
--- a/pkg/controller/jobframework/reconciler_test.go
+++ b/pkg/controller/jobframework/reconciler_test.go
@@ -186,6 +186,109 @@ func TestReconcileGenericJob(t *testing.T) {
 	}
 }
 
+type mockGenericJobWithActivation struct {
+	*mocks.MockGenericJob
+	workloadActive bool
+}
+
+func (m *mockGenericJobWithActivation) IsWorkloadActive() bool {
+	return m.workloadActive
+}
+
+func TestReconcileGenericJobWithCustomWorkloadActivation(t *testing.T) {
+	const (
+		testJobName = "test-job"
+		testNS      = metav1.NamespaceDefault
+	)
+
+	var (
+		testLocalQueueName = kueue.LocalQueueName("test-lq")
+		testGVK            = batchv1.SchemeGroupVersion.WithKind("Job")
+		req                = types.NamespacedName{Name: testJobName, Namespace: testNS}
+	)
+
+	baseJob := testingjob.MakeJob(testJobName, testNS).UID(testJobName).Queue(testLocalQueueName)
+	basePodSets := []kueue.PodSet{
+		*utiltesting.MakePodSet("main", 1).Obj(),
+	}
+	baseWl := utiltesting.MakeWorkload("job-test-job", testNS).
+		ResourceVersion("1").
+		Finalizers(kueue.ResourceInUseFinalizerName).
+		Label(constants.JobUIDLabel, testJobName).
+		ControllerReference(testGVK, testJobName, testJobName).
+		Queue(testLocalQueueName).
+		PodSets(basePodSets...).
+		Priority(0)
+
+	testCases := map[string]struct {
+		initialActive  *bool
+		jobActive      bool
+		expectedActive bool
+	}{
+		"marks workload inactive when job requests": {
+			initialActive:  nil,
+			jobActive:      false,
+			expectedActive: false,
+		},
+		"marks workload active when job requests": {
+			initialActive:  ptr.To(false),
+			jobActive:      true,
+			expectedActive: true,
+		},
+	}
+
+	for name, tc := range testCases {
+		t.Run(name, func(t *testing.T) {
+			ctx, _ := utiltesting.ContextWithLog(t)
+			mockctrl := gomock.NewController(t)
+
+			job := baseJob.DeepCopy()
+			wl := baseWl.Clone().Name("job-test-job-1").Obj()
+			if tc.initialActive == nil {
+				wl.Spec.Active = nil
+			} else {
+				wl.Spec.Active = ptr.To(*tc.initialActive)
+			}
+
+			cl := utiltesting.NewClientBuilder(batchv1.AddToScheme, kueue.AddToScheme).
+				WithObjects(job, wl).
+				WithIndex(&kueue.Workload{}, indexer.OwnerReferenceIndexKey(testGVK), indexer.WorkloadOwnerIndexFunc(testGVK)).
+				Build()
+
+			recorder := &utiltesting.EventRecorder{}
+			reconciler := NewReconciler(cl, recorder)
+
+			mgj := &mockGenericJobWithActivation{
+				MockGenericJob: mocks.NewMockGenericJob(mockctrl),
+				workloadActive: tc.jobActive,
+			}
+			mgj.EXPECT().Object().Return(job).AnyTimes()
+			mgj.EXPECT().GVK().Return(testGVK).AnyTimes()
+			mgj.EXPECT().IsSuspended().Return(ptr.Deref(job.Spec.Suspend, false)).AnyTimes()
+			mgj.EXPECT().IsActive().Return(tc.jobActive).AnyTimes()
+			mgj.EXPECT().Finished(gomock.Any()).Return("", false, false).AnyTimes()
+			mgj.EXPECT().PodSets(gomock.Any()).Return(basePodSets, nil).AnyTimes()
+			mgj.EXPECT().PodsReady(gomock.Any()).Return(false).AnyTimes()
+
+			if _, err := reconciler.ReconcileGenericJob(ctx, controllerruntime.Request{NamespacedName: req}, mgj); err != nil {
+				t.Fatalf("Failed to Reconcile GenericJob: %v", err)
+			}
+
+			updated := &kueue.Workload{}
+			if err := cl.Get(ctx, client.ObjectKey{Name: wl.Name, Namespace: wl.Namespace}, updated); err != nil {
+				t.Fatalf("Failed to get workload: %v", err)
+			}
+
+			if updated.Spec.Active == nil {
+				t.Fatalf("Workload.Spec.Active is nil, want %t", tc.expectedActive)
+			}
+			if *updated.Spec.Active != tc.expectedActive {
+				t.Fatalf("Workload.Spec.Active = %t, want %t", *updated.Spec.Active, tc.expectedActive)
+			}
+		})
+	}
+}
+
 func TestFindAncestorJobManagedByKueue(t *testing.T) {
 	grandparentJobName := "test-job-grandparent"
 	parentJobName := "test-job-parent"
diff --git a/pkg/controller/jobs/jobset/jobset_webhook_test.go b/pkg/controller/jobs/jobset/jobset_webhook_test.go
index 3110881ea..8c2158b2c 100644
--- a/pkg/controller/jobs/jobset/jobset_webhook_test.go
+++ b/pkg/controller/jobs/jobset/jobset_webhook_test.go
@@ -118,6 +118,163 @@ func TestValidateCreate(t *testing.T) {
 			}.ToAggregate(),
 			topologyAwareScheduling: true,
 		},
+		{
+			name: "valid PodSet grouping request",
+			job: testingutil.MakeJobSet("job", "default").ReplicatedJobs(testingutil.ReplicatedJobRequirements{
+				Name: "launcher", Replicas: 1, Parallelism: 1, Completions: 1,
+				PodAnnotations: map[string]string{
+					kueue.PodSetGroupName:                  "groupname",
+					kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+				},
+			}, testingutil.ReplicatedJobRequirements{
+				Name: "worker", Replicas: 4, Parallelism: 1, Completions: 1,
+				PodAnnotations: map[string]string{
+					kueue.PodSetGroupName:                  "groupname",
+					kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+				},
+			}).Obj(),
+			topologyAwareScheduling: true,
+		},
+		{
+			name: "invalid PodSet grouping request - groups of size other than 2",
+			job: testingutil.MakeJobSet("jobset", "default").
+				ReplicatedJobs(
+					testingutil.ReplicatedJobRequirements{
+						Name: "job1", Replicas: 1, Parallelism: 1, Completions: 1, PodAnnotations: map[string]string{
+							kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+							kueue.PodSetGroupName:                  "1podset",
+						},
+					},
+					testingutil.ReplicatedJobRequirements{
+						Name: "job2", Replicas: 1, Parallelism: 1, Completions: 1, PodAnnotations: map[string]string{
+							kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+							kueue.PodSetGroupName:                  "3podsets",
+						},
+					},
+					testingutil.ReplicatedJobRequirements{
+						Name: "job3", Replicas: 2, Parallelism: 1, Completions: 1, PodAnnotations: map[string]string{
+							kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+							kueue.PodSetGroupName:                  "3podsets",
+						},
+					},
+					testingutil.ReplicatedJobRequirements{
+						Name: "job4", Replicas: 2, Parallelism: 2, Completions: 1, PodAnnotations: map[string]string{
+							kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+							kueue.PodSetGroupName:                  "3podsets",
+						},
+					},
+				).
+				Obj(),
+			wantErr: field.ErrorList{
+				field.Invalid(field.NewPath("spec.replicatedJobs[0].template.spec.template.metadata.annotations").
+					Key("kueue.x-k8s.io/podset-group-name"), "1podset", "can only define groups of exactly 2 pod sets, got: 1 pod set(s)"),
+				field.Invalid(field.NewPath("spec.replicatedJobs[1].template.spec.template.metadata.annotations").
+					Key("kueue.x-k8s.io/podset-group-name"), "3podsets", "can only define groups of exactly 2 pod sets, got: 3 pod set(s)"),
+				field.Invalid(field.NewPath("spec.replicatedJobs[2].template.spec.template.metadata.annotations").
+					Key("kueue.x-k8s.io/podset-group-name"), "3podsets", "can only define groups of exactly 2 pod sets, got: 3 pod set(s)"),
+				field.Invalid(field.NewPath("spec.replicatedJobs[3].template.spec.template.metadata.annotations").
+					Key("kueue.x-k8s.io/podset-group-name"), "3podsets", "can only define groups of exactly 2 pod sets, got: 3 pod set(s)"),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
+		{
+			name: "invalid PodSet grouping request - no leader in group",
+			job: testingutil.MakeJobSet("jobset", "default").
+				ReplicatedJobs(
+					testingutil.ReplicatedJobRequirements{
+						Name: "job1", Replicas: 2, Parallelism: 1, Completions: 1, PodAnnotations: map[string]string{
+							kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+							kueue.PodSetGroupName:                  "groupname",
+						},
+					},
+					testingutil.ReplicatedJobRequirements{
+						Name: "job2", Replicas: 1, Parallelism: 3, Completions: 3, PodAnnotations: map[string]string{
+							kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+							kueue.PodSetGroupName:                  "groupname",
+						},
+					},
+				).
+				Obj(),
+			wantErr: field.ErrorList{
+				field.Invalid(field.NewPath("spec.replicatedJobs[0].template.spec.template.metadata.annotations").
+					Key("kueue.x-k8s.io/podset-group-name"), "groupname", "can only define groups where at least one pod set has only 1 replica, got: 2 replica(s) and 3 replica(s) in the group"),
+				field.Invalid(field.NewPath("spec.replicatedJobs[1].template.spec.template.metadata.annotations").
+					Key("kueue.x-k8s.io/podset-group-name"), "groupname", "can only define groups where at least one pod set has only 1 replica, got: 2 replica(s) and 3 replica(s) in the group"),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
+		{
+			name: "invalid PodSet grouping request - required topology does not match",
+			job: testingutil.MakeJobSet("jobset", "default").
+				ReplicatedJobs(
+					testingutil.ReplicatedJobRequirements{
+						Name: "job1", Replicas: 1, Parallelism: 1, Completions: 1, PodAnnotations: map[string]string{
+							kueue.PodSetRequiredTopologyAnnotation: "cloud.com/rack",
+							kueue.PodSetGroupName:                  "groupname",
+						},
+					},
+					testingutil.ReplicatedJobRequirements{
+						Name: "job2", Replicas: 2, Parallelism: 1, Completions: 1, PodAnnotations: map[string]string{
+							kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+							kueue.PodSetGroupName:                  "groupname",
+						},
+					},
+				).
+				Obj(),
+			wantErr: field.ErrorList{
+				field.Invalid(field.NewPath("spec.replicatedJobs[0].template.spec.template.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.replicatedJobs[1].template.spec.template.metadata.annotations' in group 'groupname'"),
+				field.Invalid(field.NewPath("spec.replicatedJobs[1].template.spec.template.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.replicatedJobs[0].template.spec.template.metadata.annotations' in group 'groupname'"),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
+		{
+			name: "invalid PodSet grouping request - preferred topology does not match",
+			job: testingutil.MakeJobSet("jobset", "default").
+				ReplicatedJobs(
+					testingutil.ReplicatedJobRequirements{
+						Name: "job1", Replicas: 1, Parallelism: 1, Completions: 1, PodAnnotations: map[string]string{
+							kueue.PodSetPreferredTopologyAnnotation: "cloud.com/rack",
+							kueue.PodSetGroupName:                   "groupname",
+						},
+					},
+					testingutil.ReplicatedJobRequirements{
+						Name: "job2", Replicas: 2, Parallelism: 1, Completions: 1, PodAnnotations: map[string]string{
+							kueue.PodSetPreferredTopologyAnnotation: "cloud.com/block",
+							kueue.PodSetGroupName:                   "groupname",
+						},
+					},
+				).
+				Obj(),
+			wantErr: field.ErrorList{
+				field.Invalid(field.NewPath("spec.replicatedJobs[0].template.spec.template.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.replicatedJobs[1].template.spec.template.metadata.annotations' in group 'groupname'"),
+				field.Invalid(field.NewPath("spec.replicatedJobs[1].template.spec.template.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.replicatedJobs[0].template.spec.template.metadata.annotations' in group 'groupname'"),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
+		{
+			name: "invalid PodSet grouping request - different topology annotations within group",
+			job: testingutil.MakeJobSet("jobset", "default").
+				ReplicatedJobs(
+					testingutil.ReplicatedJobRequirements{
+						Name: "job1", Replicas: 1, Parallelism: 1, Completions: 1, PodAnnotations: map[string]string{
+							kueue.PodSetRequiredTopologyAnnotation: "cloud.com/rack",
+							kueue.PodSetGroupName:                  "groupname",
+						},
+					},
+					testingutil.ReplicatedJobRequirements{
+						Name: "job2", Replicas: 2, Parallelism: 1, Completions: 1, PodAnnotations: map[string]string{
+							kueue.PodSetGroupName:                   "groupname",
+							kueue.PodSetPreferredTopologyAnnotation: "cloud.com/block",
+						},
+					},
+				).
+				Obj(),
+			wantErr: field.ErrorList{
+				field.Invalid(field.NewPath("spec.replicatedJobs[0].template.spec.template.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.replicatedJobs[1].template.spec.template.metadata.annotations' in group 'groupname'"),
+				field.Invalid(field.NewPath("spec.replicatedJobs[1].template.spec.template.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.replicatedJobs[0].template.spec.template.metadata.annotations' in group 'groupname'"),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
 	}
 
 	for _, tc := range testcases {
diff --git a/pkg/controller/jobs/leaderworkerset/leaderworkerset_webhook_test.go b/pkg/controller/jobs/leaderworkerset/leaderworkerset_webhook_test.go
index eb15ad9fe..0e898551b 100644
--- a/pkg/controller/jobs/leaderworkerset/leaderworkerset_webhook_test.go
+++ b/pkg/controller/jobs/leaderworkerset/leaderworkerset_webhook_test.go
@@ -28,7 +28,7 @@ import (
 	"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
 	leaderworkersetv1 "sigs.k8s.io/lws/api/leaderworkerset/v1"
 
-	kueuealpha "sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	qcache "sigs.k8s.io/kueue/pkg/cache/queue"
 	schdcache "sigs.k8s.io/kueue/pkg/cache/scheduler"
 	"sigs.k8s.io/kueue/pkg/controller/constants"
@@ -181,14 +181,14 @@ func TestValidateCreate(t *testing.T) {
 				LeaderTemplate(corev1.PodTemplateSpec{
 					ObjectMeta: metav1.ObjectMeta{
 						Annotations: map[string]string{
-							kueuealpha.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+							kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
 						},
 					},
 				}).
 				WorkerTemplate(corev1.PodTemplateSpec{
 					ObjectMeta: metav1.ObjectMeta{
 						Annotations: map[string]string{
-							kueuealpha.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+							kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
 						},
 					},
 				}).
@@ -202,16 +202,16 @@ func TestValidateCreate(t *testing.T) {
 				LeaderTemplate(corev1.PodTemplateSpec{
 					ObjectMeta: metav1.ObjectMeta{
 						Annotations: map[string]string{
-							kueuealpha.PodSetRequiredTopologyAnnotation:  "cloud.com/block",
-							kueuealpha.PodSetPreferredTopologyAnnotation: "cloud.com/block",
+							kueue.PodSetRequiredTopologyAnnotation:  "cloud.com/block",
+							kueue.PodSetPreferredTopologyAnnotation: "cloud.com/block",
 						},
 					},
 				}).
 				WorkerTemplate(corev1.PodTemplateSpec{
 					ObjectMeta: metav1.ObjectMeta{
 						Annotations: map[string]string{
-							kueuealpha.PodSetRequiredTopologyAnnotation:  "cloud.com/block",
-							kueuealpha.PodSetPreferredTopologyAnnotation: "cloud.com/block",
+							kueue.PodSetRequiredTopologyAnnotation:  "cloud.com/block",
+							kueue.PodSetPreferredTopologyAnnotation: "cloud.com/block",
 						},
 					},
 				}).
@@ -234,9 +234,9 @@ func TestValidateCreate(t *testing.T) {
 				LeaderTemplate(corev1.PodTemplateSpec{
 					ObjectMeta: metav1.ObjectMeta{
 						Annotations: map[string]string{
-							kueuealpha.PodSetRequiredTopologyAnnotation:      "cloud.com/block",
-							kueuealpha.PodSetSliceRequiredTopologyAnnotation: "cloud.com/block",
-							kueuealpha.PodSetSliceSizeAnnotation:             "2",
+							kueue.PodSetRequiredTopologyAnnotation:      "cloud.com/block",
+							kueue.PodSetSliceRequiredTopologyAnnotation: "cloud.com/block",
+							kueue.PodSetSliceSizeAnnotation:             "2",
 						},
 					},
 				}).
@@ -244,9 +244,9 @@ func TestValidateCreate(t *testing.T) {
 				WorkerTemplate(corev1.PodTemplateSpec{
 					ObjectMeta: metav1.ObjectMeta{
 						Annotations: map[string]string{
-							kueuealpha.PodSetRequiredTopologyAnnotation:      "cloud.com/block",
-							kueuealpha.PodSetSliceRequiredTopologyAnnotation: "cloud.com/block",
-							kueuealpha.PodSetSliceSizeAnnotation:             "20",
+							kueue.PodSetRequiredTopologyAnnotation:      "cloud.com/block",
+							kueue.PodSetSliceRequiredTopologyAnnotation: "cloud.com/block",
+							kueue.PodSetSliceSizeAnnotation:             "20",
 						},
 					},
 				}).
@@ -265,7 +265,7 @@ func TestValidateCreate(t *testing.T) {
 				LeaderTemplate(corev1.PodTemplateSpec{
 					ObjectMeta: metav1.ObjectMeta{
 						Annotations: map[string]string{
-							kueuealpha.PodSetSliceSizeAnnotation: "1",
+							kueue.PodSetSliceSizeAnnotation: "1",
 						},
 					},
 				}).
@@ -273,7 +273,7 @@ func TestValidateCreate(t *testing.T) {
 				WorkerTemplate(corev1.PodTemplateSpec{
 					ObjectMeta: metav1.ObjectMeta{
 						Annotations: map[string]string{
-							kueuealpha.PodSetSliceSizeAnnotation: "1",
+							kueue.PodSetSliceSizeAnnotation: "1",
 						},
 					},
 				}).
@@ -292,7 +292,7 @@ func TestValidateCreate(t *testing.T) {
 				LeaderTemplate(corev1.PodTemplateSpec{
 					ObjectMeta: metav1.ObjectMeta{
 						Annotations: map[string]string{
-							kueuealpha.PodSetSliceRequiredTopologyAnnotation: "cloud.com/block",
+							kueue.PodSetSliceRequiredTopologyAnnotation: "cloud.com/block",
 						},
 					},
 				}).
@@ -300,7 +300,7 @@ func TestValidateCreate(t *testing.T) {
 				WorkerTemplate(corev1.PodTemplateSpec{
 					ObjectMeta: metav1.ObjectMeta{
 						Annotations: map[string]string{
-							kueuealpha.PodSetSliceRequiredTopologyAnnotation: "cloud.com/block",
+							kueue.PodSetSliceRequiredTopologyAnnotation: "cloud.com/block",
 						},
 					},
 				}).
@@ -319,9 +319,10 @@ func TestValidateCreate(t *testing.T) {
 				LeaderTemplate(corev1.PodTemplateSpec{
 					ObjectMeta: metav1.ObjectMeta{
 						Annotations: map[string]string{
-							kueuealpha.PodSetGroupName:                       "leadername1",
-							kueuealpha.PodSetSliceRequiredTopologyAnnotation: "cloud.com/block",
-							kueuealpha.PodSetSliceSizeAnnotation:             "1",
+							kueue.PodSetGroupName:                       "groupname",
+							kueue.PodSetRequiredTopologyAnnotation:      "cloud.com/block",
+							kueue.PodSetSliceRequiredTopologyAnnotation: "cloud.com/block",
+							kueue.PodSetSliceSizeAnnotation:             "1",
 						},
 					},
 				}).
@@ -329,9 +330,10 @@ func TestValidateCreate(t *testing.T) {
 				WorkerTemplate(corev1.PodTemplateSpec{
 					ObjectMeta: metav1.ObjectMeta{
 						Annotations: map[string]string{
-							kueuealpha.PodSetGroupName:                       "workername1",
-							kueuealpha.PodSetSliceRequiredTopologyAnnotation: "cloud.com/block",
-							kueuealpha.PodSetSliceSizeAnnotation:             "1",
+							kueue.PodSetGroupName:                       "groupname",
+							kueue.PodSetRequiredTopologyAnnotation:      "cloud.com/block",
+							kueue.PodSetSliceRequiredTopologyAnnotation: "cloud.com/block",
+							kueue.PodSetSliceSizeAnnotation:             "1",
 						},
 					},
 				}).
@@ -354,14 +356,16 @@ func TestValidateCreate(t *testing.T) {
 				LeaderTemplate(corev1.PodTemplateSpec{
 					ObjectMeta: metav1.ObjectMeta{
 						Annotations: map[string]string{
-							kueuealpha.PodSetGroupName: "leadername1",
+							kueue.PodSetGroupName:                  "groupname",
+							kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
 						},
 					},
 				}).
 				WorkerTemplate(corev1.PodTemplateSpec{
 					ObjectMeta: metav1.ObjectMeta{
 						Annotations: map[string]string{
-							kueuealpha.PodSetGroupName: "workername1",
+							kueue.PodSetGroupName:                  "groupname",
+							kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
 						},
 					},
 				}).
@@ -375,14 +379,16 @@ func TestValidateCreate(t *testing.T) {
 				LeaderTemplate(corev1.PodTemplateSpec{
 					ObjectMeta: metav1.ObjectMeta{
 						Annotations: map[string]string{
-							kueuealpha.PodSetGroupName: "1234",
+							kueue.PodSetGroupName:                  "1234",
+							kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
 						},
 					},
 				}).
 				WorkerTemplate(corev1.PodTemplateSpec{
 					ObjectMeta: metav1.ObjectMeta{
 						Annotations: map[string]string{
-							kueuealpha.PodSetGroupName: "4321",
+							kueue.PodSetGroupName:                  "1234",
+							kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
 						},
 					},
 				}).
@@ -391,7 +397,190 @@ func TestValidateCreate(t *testing.T) {
 				field.Invalid(field.NewPath("spec.leaderWorkerTemplate.leaderTemplate.metadata.annotations").
 					Key("kueue.x-k8s.io/podset-group-name"), "1234", "must not be a number"),
 				field.Invalid(field.NewPath("spec.leaderWorkerTemplate.workerTemplate.metadata.annotations").
-					Key("kueue.x-k8s.io/podset-group-name"), "4321", "must not be a number"),
+					Key("kueue.x-k8s.io/podset-group-name"), "1234", "must not be a number"),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
+		"invalid PodSet grouping request - group specified only in leader": {
+			lws: testingleaderworkerset.MakeLeaderWorkerSet("test-lws", "").
+				Queue("test-queue").
+				LeaderTemplate(corev1.PodTemplateSpec{
+					ObjectMeta: metav1.ObjectMeta{
+						Annotations: map[string]string{
+							kueue.PodSetGroupName:                  "groupname",
+							kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+						},
+					},
+				}).
+				WorkerTemplate(corev1.PodTemplateSpec{}).
+				Obj(),
+			wantErr: field.ErrorList{
+				field.Invalid(field.NewPath("spec.leaderWorkerTemplate.leaderTemplate.metadata.annotations[kueue.x-k8s.io/podset-group-name]"), "groupname", "can only define groups of exactly 2 pod sets, got: 1 pod set(s)"),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
+		"invalid PodSet grouping request - group specified only in worker": {
+			lws: testingleaderworkerset.MakeLeaderWorkerSet("test-lws", "").
+				Queue("test-queue").
+				LeaderTemplate(corev1.PodTemplateSpec{}).
+				WorkerTemplate(corev1.PodTemplateSpec{
+					ObjectMeta: metav1.ObjectMeta{
+						Annotations: map[string]string{
+							kueue.PodSetGroupName:                  "groupname",
+							kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+						},
+					},
+				}).
+				Obj(),
+			wantErr: field.ErrorList{
+				field.Invalid(field.NewPath("spec.leaderWorkerTemplate.workerTemplate.metadata.annotations[kueue.x-k8s.io/podset-group-name]"), "groupname", "can only define groups of exactly 2 pod sets, got: 1 pod set(s)"),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
+		"invalid PodSet grouping request - group name does not match": {
+			lws: testingleaderworkerset.MakeLeaderWorkerSet("test-lws", "").
+				Queue("test-queue").
+				LeaderTemplate(corev1.PodTemplateSpec{
+					ObjectMeta: metav1.ObjectMeta{
+						Annotations: map[string]string{
+							kueue.PodSetGroupName:                  "groupname1",
+							kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+						},
+					},
+				}).
+				WorkerTemplate(corev1.PodTemplateSpec{
+					ObjectMeta: metav1.ObjectMeta{
+						Annotations: map[string]string{
+							kueue.PodSetGroupName:                  "groupname2",
+							kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+						},
+					},
+				}).
+				Obj(),
+			wantErr: field.ErrorList{
+				field.Invalid(field.NewPath("spec.leaderWorkerTemplate.leaderTemplate.metadata.annotations[kueue.x-k8s.io/podset-group-name]"), "groupname1", "can only define groups of exactly 2 pod sets, got: 1 pod set(s)"),
+				field.Invalid(field.NewPath("spec.leaderWorkerTemplate.workerTemplate.metadata.annotations[kueue.x-k8s.io/podset-group-name]"), "groupname2", "can only define groups of exactly 2 pod sets, got: 1 pod set(s)"),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
+		"invalid PodSet grouping request - required topology request does not match": {
+			lws: testingleaderworkerset.MakeLeaderWorkerSet("test-lws", "").
+				Queue("test-queue").
+				LeaderTemplate(corev1.PodTemplateSpec{
+					ObjectMeta: metav1.ObjectMeta{
+						Annotations: map[string]string{
+							kueue.PodSetGroupName:                  "groupname",
+							kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+						},
+					},
+				}).
+				WorkerTemplate(corev1.PodTemplateSpec{
+					ObjectMeta: metav1.ObjectMeta{
+						Annotations: map[string]string{
+							kueue.PodSetGroupName:                  "groupname",
+							kueue.PodSetRequiredTopologyAnnotation: "cloud.com/rack",
+						},
+					},
+				}).
+				Obj(),
+			wantErr: field.ErrorList{
+				field.Invalid(field.NewPath("spec.leaderWorkerTemplate.leaderTemplate.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.leaderWorkerTemplate.workerTemplate.metadata.annotations' in group 'groupname'"),
+				field.Invalid(field.NewPath("spec.leaderWorkerTemplate.workerTemplate.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.leaderWorkerTemplate.leaderTemplate.metadata.annotations' in group 'groupname'"),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
+		"invalid PodSet grouping request - preferred topology request does not match": {
+			lws: testingleaderworkerset.MakeLeaderWorkerSet("test-lws", "").
+				Queue("test-queue").
+				LeaderTemplate(corev1.PodTemplateSpec{
+					ObjectMeta: metav1.ObjectMeta{
+						Annotations: map[string]string{
+							kueue.PodSetGroupName:                   "groupname",
+							kueue.PodSetPreferredTopologyAnnotation: "cloud.com/block",
+						},
+					},
+				}).
+				WorkerTemplate(corev1.PodTemplateSpec{
+					ObjectMeta: metav1.ObjectMeta{
+						Annotations: map[string]string{
+							kueue.PodSetGroupName:                   "groupname",
+							kueue.PodSetPreferredTopologyAnnotation: "cloud.com/rack",
+						},
+					},
+				}).
+				Obj(),
+			wantErr: field.ErrorList{
+				field.Invalid(field.NewPath("spec.leaderWorkerTemplate.leaderTemplate.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.leaderWorkerTemplate.workerTemplate.metadata.annotations' in group 'groupname'"),
+				field.Invalid(field.NewPath("spec.leaderWorkerTemplate.workerTemplate.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.leaderWorkerTemplate.leaderTemplate.metadata.annotations' in group 'groupname'"),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
+		"invalid PodSet grouping request - different topology annotations within group": {
+			lws: testingleaderworkerset.MakeLeaderWorkerSet("test-lws", "").
+				Queue("test-queue").
+				LeaderTemplate(corev1.PodTemplateSpec{
+					ObjectMeta: metav1.ObjectMeta{
+						Annotations: map[string]string{
+							kueue.PodSetGroupName:                  "groupname",
+							kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+						},
+					},
+				}).
+				WorkerTemplate(corev1.PodTemplateSpec{
+					ObjectMeta: metav1.ObjectMeta{
+						Annotations: map[string]string{
+							kueue.PodSetGroupName:                   "groupname",
+							kueue.PodSetPreferredTopologyAnnotation: "cloud.com/block",
+						},
+					},
+				}).
+				Obj(),
+			wantErr: field.ErrorList{
+				field.Invalid(field.NewPath("spec.leaderWorkerTemplate.leaderTemplate.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.leaderWorkerTemplate.workerTemplate.metadata.annotations' in group 'groupname'"),
+				field.Invalid(field.NewPath("spec.leaderWorkerTemplate.workerTemplate.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.leaderWorkerTemplate.leaderTemplate.metadata.annotations' in group 'groupname'"),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
+		"invalid PodSet grouping request - neither preferred nor required topology is requested": {
+			lws: testingleaderworkerset.MakeLeaderWorkerSet("test-lws", "").
+				Queue("test-queue").
+				LeaderTemplate(corev1.PodTemplateSpec{
+					ObjectMeta: metav1.ObjectMeta{
+						Annotations: map[string]string{
+							kueue.PodSetGroupName: "groupname",
+						},
+					},
+				}).
+				WorkerTemplate(corev1.PodTemplateSpec{
+					ObjectMeta: metav1.ObjectMeta{
+						Annotations: map[string]string{
+							kueue.PodSetGroupName: "groupname",
+						},
+					},
+				}).
+				Obj(),
+			wantErr: field.ErrorList{
+				field.Forbidden(field.NewPath("spec.leaderWorkerTemplate.leaderTemplate.metadata.annotations").
+					Key("kueue.x-k8s.io/podset-group-name"), "may not be set when neither 'kueue.x-k8s.io/podset-preferred-topology' nor 'kueue.x-k8s.io/podset-required-topology' is specified"),
+				field.Forbidden(field.NewPath("spec.leaderWorkerTemplate.workerTemplate.metadata.annotations").
+					Key("kueue.x-k8s.io/podset-group-name"), "may not be set when neither 'kueue.x-k8s.io/podset-preferred-topology' nor 'kueue.x-k8s.io/podset-required-topology' is specified"),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
+		"invalid PodSet grouping request - grouping requested without leader template": {
+			lws: testingleaderworkerset.MakeLeaderWorkerSet("test-lws", "").
+				Queue("test-queue").
+				WorkerTemplate(corev1.PodTemplateSpec{
+					ObjectMeta: metav1.ObjectMeta{
+						Annotations: map[string]string{
+							kueue.PodSetGroupName:                   "groupname",
+							kueue.PodSetPreferredTopologyAnnotation: "cloud.com/block",
+						},
+					},
+				}).
+				Obj(),
+			wantErr: field.ErrorList{
+				field.Invalid(field.NewPath("spec.leaderWorkerTemplate.workerTemplate.metadata.annotations[kueue.x-k8s.io/podset-group-name]"), "groupname", "can only define groups of exactly 2 pod sets, got: 1 pod set(s)"),
 			}.ToAggregate(),
 			topologyAwareScheduling: true,
 		},
@@ -802,14 +991,14 @@ func TestValidateUpdate(t *testing.T) {
 				LeaderTemplate(corev1.PodTemplateSpec{
 					ObjectMeta: metav1.ObjectMeta{
 						Annotations: map[string]string{
-							kueuealpha.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+							kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
 						},
 					},
 				}).
 				WorkerTemplate(corev1.PodTemplateSpec{
 					ObjectMeta: metav1.ObjectMeta{
 						Annotations: map[string]string{
-							kueuealpha.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+							kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
 						},
 					},
 				}).
@@ -827,16 +1016,16 @@ func TestValidateUpdate(t *testing.T) {
 				LeaderTemplate(corev1.PodTemplateSpec{
 					ObjectMeta: metav1.ObjectMeta{
 						Annotations: map[string]string{
-							kueuealpha.PodSetRequiredTopologyAnnotation:  "cloud.com/block",
-							kueuealpha.PodSetPreferredTopologyAnnotation: "cloud.com/block",
+							kueue.PodSetRequiredTopologyAnnotation:  "cloud.com/block",
+							kueue.PodSetPreferredTopologyAnnotation: "cloud.com/block",
 						},
 					},
 				}).
 				WorkerTemplate(corev1.PodTemplateSpec{
 					ObjectMeta: metav1.ObjectMeta{
 						Annotations: map[string]string{
-							kueuealpha.PodSetRequiredTopologyAnnotation:  "cloud.com/block",
-							kueuealpha.PodSetPreferredTopologyAnnotation: "cloud.com/block",
+							kueue.PodSetRequiredTopologyAnnotation:  "cloud.com/block",
+							kueue.PodSetPreferredTopologyAnnotation: "cloud.com/block",
 						},
 					},
 				}).
diff --git a/pkg/controller/jobs/mpijob/mpijob_webhook_test.go b/pkg/controller/jobs/mpijob/mpijob_webhook_test.go
index db0b7819a..e8fac75dd 100644
--- a/pkg/controller/jobs/mpijob/mpijob_webhook_test.go
+++ b/pkg/controller/jobs/mpijob/mpijob_webhook_test.go
@@ -148,6 +148,156 @@ func TestValidateCreate(t *testing.T) {
 			}.ToAggregate(),
 			topologyAwareScheduling: true,
 		},
+		{
+			name: "valid PodSet grouping request",
+			job: testingutil.MakeMPIJob("job", "default").
+				Queue("queue-name").
+				MPIJobReplicaSpecs(
+					testingutil.MPIJobReplicaSpecRequirement{
+						ReplicaType:  v2beta1.MPIReplicaTypeLauncher,
+						ReplicaCount: 1,
+					},
+					testingutil.MPIJobReplicaSpecRequirement{
+						ReplicaType:  v2beta1.MPIReplicaTypeWorker,
+						ReplicaCount: 3,
+					},
+				).
+				PodAnnotation(v2beta1.MPIReplicaTypeLauncher, kueue.PodSetGroupName, "groupname").
+				PodAnnotation(v2beta1.MPIReplicaTypeLauncher, kueue.PodSetRequiredTopologyAnnotation, "cloud.com/block").
+				PodAnnotation(v2beta1.MPIReplicaTypeWorker, kueue.PodSetGroupName, "groupname").
+				PodAnnotation(v2beta1.MPIReplicaTypeWorker, kueue.PodSetRequiredTopologyAnnotation, "cloud.com/block").
+				Obj(),
+			topologyAwareScheduling: true,
+		},
+		{
+			name: "invalid PodSet grouping request - groups of size other than 2",
+			job: testingutil.MakeMPIJob("job", "default").
+				Queue("queue-name").
+				MPIJobReplicaSpecs(
+					testingutil.MPIJobReplicaSpecRequirement{
+						ReplicaType:  v2beta1.MPIReplicaTypeLauncher,
+						ReplicaCount: 1,
+					},
+					testingutil.MPIJobReplicaSpecRequirement{
+						ReplicaType:  v2beta1.MPIReplicaTypeWorker,
+						ReplicaCount: 3,
+					},
+				).
+				PodAnnotation(v2beta1.MPIReplicaTypeLauncher, kueue.PodSetGroupName, "groupname1").
+				PodAnnotation(v2beta1.MPIReplicaTypeLauncher, kueue.PodSetRequiredTopologyAnnotation, "cloud.com/block").
+				PodAnnotation(v2beta1.MPIReplicaTypeWorker, kueue.PodSetGroupName, "groupname2").
+				PodAnnotation(v2beta1.MPIReplicaTypeWorker, kueue.PodSetRequiredTopologyAnnotation, "cloud.com/block").
+				Obj(),
+			wantErr: field.ErrorList{
+				field.Invalid(field.NewPath("spec.mpiReplicaSpecs[Launcher].template.metadata.annotations").
+					Key("kueue.x-k8s.io/podset-group-name"), "groupname1", "can only define groups of exactly 2 pod sets, got: 1 pod set(s)"),
+				field.Invalid(field.NewPath("spec.mpiReplicaSpecs[Worker].template.metadata.annotations").
+					Key("kueue.x-k8s.io/podset-group-name"), "groupname2", "can only define groups of exactly 2 pod sets, got: 1 pod set(s)"),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
+		{
+			name: "invalid PodSet grouping request - no leader in group",
+			job: testingutil.MakeMPIJob("job", "default").
+				Queue("queue-name").
+				MPIJobReplicaSpecs(
+					testingutil.MPIJobReplicaSpecRequirement{
+						ReplicaType:  v2beta1.MPIReplicaTypeLauncher,
+						ReplicaCount: 2,
+					},
+					testingutil.MPIJobReplicaSpecRequirement{
+						ReplicaType:  v2beta1.MPIReplicaTypeWorker,
+						ReplicaCount: 3,
+					},
+				).
+				PodAnnotation(v2beta1.MPIReplicaTypeLauncher, kueue.PodSetGroupName, "groupname").
+				PodAnnotation(v2beta1.MPIReplicaTypeLauncher, kueue.PodSetRequiredTopologyAnnotation, "cloud.com/block").
+				PodAnnotation(v2beta1.MPIReplicaTypeWorker, kueue.PodSetGroupName, "groupname").
+				PodAnnotation(v2beta1.MPIReplicaTypeWorker, kueue.PodSetRequiredTopologyAnnotation, "cloud.com/block").
+				Obj(),
+			wantErr: field.ErrorList{
+				field.Invalid(field.NewPath("spec.mpiReplicaSpecs[Launcher].template.metadata.annotations").
+					Key("kueue.x-k8s.io/podset-group-name"), "groupname", "can only define groups where at least one pod set has only 1 replica, got: 2 replica(s) and 3 replica(s) in the group"),
+				field.Invalid(field.NewPath("spec.mpiReplicaSpecs[Worker].template.metadata.annotations").
+					Key("kueue.x-k8s.io/podset-group-name"), "groupname", "can only define groups where at least one pod set has only 1 replica, got: 2 replica(s) and 3 replica(s) in the group"),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
+		{
+			name: "invalid PodSet grouping request - required topology does not match",
+			job: testingutil.MakeMPIJob("job", "default").
+				Queue("queue-name").
+				MPIJobReplicaSpecs(
+					testingutil.MPIJobReplicaSpecRequirement{
+						ReplicaType:  v2beta1.MPIReplicaTypeLauncher,
+						ReplicaCount: 1,
+					},
+					testingutil.MPIJobReplicaSpecRequirement{
+						ReplicaType:  v2beta1.MPIReplicaTypeWorker,
+						ReplicaCount: 3,
+					},
+				).
+				PodAnnotation(v2beta1.MPIReplicaTypeLauncher, kueue.PodSetGroupName, "groupname").
+				PodAnnotation(v2beta1.MPIReplicaTypeLauncher, kueue.PodSetRequiredTopologyAnnotation, "cloud.com/block").
+				PodAnnotation(v2beta1.MPIReplicaTypeWorker, kueue.PodSetGroupName, "groupname").
+				PodAnnotation(v2beta1.MPIReplicaTypeWorker, kueue.PodSetRequiredTopologyAnnotation, "cloud.com/rack").
+				Obj(),
+			wantErr: field.ErrorList{
+				field.Invalid(field.NewPath("spec.mpiReplicaSpecs[Launcher].template.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.mpiReplicaSpecs[Worker].template.metadata.annotations' in group 'groupname'"),
+				field.Invalid(field.NewPath("spec.mpiReplicaSpecs[Worker].template.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.mpiReplicaSpecs[Launcher].template.metadata.annotations' in group 'groupname'"),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
+		{
+			name: "invalid PodSet grouping request - preferred topology does not match",
+			job: testingutil.MakeMPIJob("job", "default").
+				Queue("queue-name").
+				MPIJobReplicaSpecs(
+					testingutil.MPIJobReplicaSpecRequirement{
+						ReplicaType:  v2beta1.MPIReplicaTypeLauncher,
+						ReplicaCount: 1,
+					},
+					testingutil.MPIJobReplicaSpecRequirement{
+						ReplicaType:  v2beta1.MPIReplicaTypeWorker,
+						ReplicaCount: 3,
+					},
+				).
+				PodAnnotation(v2beta1.MPIReplicaTypeLauncher, kueue.PodSetGroupName, "groupname").
+				PodAnnotation(v2beta1.MPIReplicaTypeLauncher, kueue.PodSetPreferredTopologyAnnotation, "cloud.com/block").
+				PodAnnotation(v2beta1.MPIReplicaTypeWorker, kueue.PodSetGroupName, "groupname").
+				PodAnnotation(v2beta1.MPIReplicaTypeWorker, kueue.PodSetPreferredTopologyAnnotation, "cloud.com/rack").
+				Obj(),
+			wantErr: field.ErrorList{
+				field.Invalid(field.NewPath("spec.mpiReplicaSpecs[Launcher].template.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.mpiReplicaSpecs[Worker].template.metadata.annotations' in group 'groupname'"),
+				field.Invalid(field.NewPath("spec.mpiReplicaSpecs[Worker].template.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.mpiReplicaSpecs[Launcher].template.metadata.annotations' in group 'groupname'"),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
+		{
+			name: "invalid PodSet grouping request - different topology annotations within group",
+			job: testingutil.MakeMPIJob("job", "default").
+				Queue("queue-name").
+				MPIJobReplicaSpecs(
+					testingutil.MPIJobReplicaSpecRequirement{
+						ReplicaType:  v2beta1.MPIReplicaTypeLauncher,
+						ReplicaCount: 1,
+					},
+					testingutil.MPIJobReplicaSpecRequirement{
+						ReplicaType:  v2beta1.MPIReplicaTypeWorker,
+						ReplicaCount: 3,
+					},
+				).
+				PodAnnotation(v2beta1.MPIReplicaTypeLauncher, kueue.PodSetGroupName, "groupname").
+				PodAnnotation(v2beta1.MPIReplicaTypeLauncher, kueue.PodSetRequiredTopologyAnnotation, "cloud.com/block").
+				PodAnnotation(v2beta1.MPIReplicaTypeWorker, kueue.PodSetGroupName, "groupname").
+				PodAnnotation(v2beta1.MPIReplicaTypeWorker, kueue.PodSetPreferredTopologyAnnotation, "cloud.com/rack").
+				Obj(),
+			wantErr: field.ErrorList{
+				field.Invalid(field.NewPath("spec.mpiReplicaSpecs[Launcher].template.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.mpiReplicaSpecs[Worker].template.metadata.annotations' in group 'groupname'"),
+				field.Invalid(field.NewPath("spec.mpiReplicaSpecs[Worker].template.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.mpiReplicaSpecs[Launcher].template.metadata.annotations' in group 'groupname'"),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
 	}
 
 	for _, tc := range testcases {
diff --git a/pkg/controller/jobs/pod/pod_webhook_test.go b/pkg/controller/jobs/pod/pod_webhook_test.go
index 058bf778e..78a964d4f 100644
--- a/pkg/controller/jobs/pod/pod_webhook_test.go
+++ b/pkg/controller/jobs/pod/pod_webhook_test.go
@@ -36,7 +36,7 @@ import (
 	"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
 
 	configapi "sigs.k8s.io/kueue/apis/config/v1beta1"
-	kueuealpha "sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	qcache "sigs.k8s.io/kueue/pkg/cache/queue"
 	schdcache "sigs.k8s.io/kueue/pkg/cache/scheduler"
 	"sigs.k8s.io/kueue/pkg/controller/constants"
@@ -358,11 +358,11 @@ func TestDefault(t *testing.T) {
 			namespaceSelector:             defaultNamespaceSelector,
 			pod: testingpod.MakePod("test-pod", defaultNamespace.Name).
 				Queue("test-queue").
-				Annotation(kueuealpha.PodSetRequiredTopologyAnnotation, "block").
+				Annotation(kueue.PodSetRequiredTopologyAnnotation, "block").
 				Obj(),
 			want: testingpod.MakePod("test-pod", defaultNamespace.Name).
 				Queue("test-queue").
-				Annotation(kueuealpha.PodSetRequiredTopologyAnnotation, "block").
+				Annotation(kueue.PodSetRequiredTopologyAnnotation, "block").
 				ManagedByKueueLabel().
 				KueueFinalizer().
 				RoleHash("a9f06f3a").
@@ -378,15 +378,15 @@ func TestDefault(t *testing.T) {
 			pod: testingpod.MakePod("test-pod", defaultNamespace.Name).
 				Queue("test-queue").
 				Label("test-label", "test-value").
-				Annotation(kueuealpha.PodGroupPodIndexLabelAnnotation, "test-label").
-				Annotation(kueuealpha.PodSetRequiredTopologyAnnotation, "block").
+				Annotation(kueue.PodGroupPodIndexLabelAnnotation, "test-label").
+				Annotation(kueue.PodSetRequiredTopologyAnnotation, "block").
 				Obj(),
 			want: testingpod.MakePod("test-pod", defaultNamespace.Name).
 				Queue("test-queue").
-				Annotation(kueuealpha.PodGroupPodIndexLabelAnnotation, "test-label").
-				Annotation(kueuealpha.PodSetRequiredTopologyAnnotation, "block").
+				Annotation(kueue.PodGroupPodIndexLabelAnnotation, "test-label").
+				Annotation(kueue.PodSetRequiredTopologyAnnotation, "block").
 				Label("test-label", "test-value").
-				Label(kueuealpha.PodGroupPodIndexLabel, "test-value").
+				Label(kueue.PodGroupPodIndexLabel, "test-value").
 				ManagedByKueueLabel().
 				RoleHash("a9f06f3a").
 				KueueFinalizer().
@@ -732,14 +732,14 @@ func TestValidateCreate(t *testing.T) {
 		"valid topology request": {
 			pod: testingpod.MakePod("test-pod", "test-ns").
 				ManagedByKueueLabel().
-				Annotation(kueuealpha.PodSetRequiredTopologyAnnotation, "cloud.com/block").
+				Annotation(kueue.PodSetRequiredTopologyAnnotation, "cloud.com/block").
 				Obj(),
 		},
 		"invalid topology request": {
 			pod: testingpod.MakePod("test-pod", "test-ns").
 				ManagedByKueueLabel().
-				Annotation(kueuealpha.PodSetRequiredTopologyAnnotation, "cloud.com/block").
-				Annotation(kueuealpha.PodSetPreferredTopologyAnnotation, "cloud.com/block").
+				Annotation(kueue.PodSetRequiredTopologyAnnotation, "cloud.com/block").
+				Annotation(kueue.PodSetPreferredTopologyAnnotation, "cloud.com/block").
 				Obj(),
 			wantErr: field.ErrorList{
 				&field.Error{
diff --git a/pkg/controller/jobs/raycluster/raycluster_webhook_test.go b/pkg/controller/jobs/raycluster/raycluster_webhook_test.go
index 8c7e32aff..19ec7109f 100644
--- a/pkg/controller/jobs/raycluster/raycluster_webhook_test.go
+++ b/pkg/controller/jobs/raycluster/raycluster_webhook_test.go
@@ -298,6 +298,233 @@ func TestValidateCreate(t *testing.T) {
 			}.ToAggregate(),
 			topologyAwareScheduling: true,
 		},
+		"valid PodSet grouping request": {
+			job: testingrayutil.MakeCluster("raycluster", "ns").Queue("queue").
+				WithHeadGroupSpec(rayv1.HeadGroupSpec{
+					Template: corev1.PodTemplateSpec{
+						ObjectMeta: metav1.ObjectMeta{
+							Annotations: map[string]string{
+								kueue.PodSetGroupName:                  "groupname",
+								kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+							},
+						},
+					},
+				}).
+				WithWorkerGroups(
+					rayv1.WorkerGroupSpec{
+						GroupName: "wg1",
+						Template: corev1.PodTemplateSpec{
+							ObjectMeta: metav1.ObjectMeta{
+								Annotations: map[string]string{
+									kueue.PodSetGroupName:                  "groupname",
+									kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+								},
+							},
+						},
+					},
+				).
+				Obj(),
+			topologyAwareScheduling: true,
+		},
+		"invalid PodSet grouping request - groups of size other than 2": {
+			job: testingrayutil.MakeCluster("rayjob", "ns").Queue("queue").
+				WithHeadGroupSpec(rayv1.HeadGroupSpec{
+					Template: corev1.PodTemplateSpec{
+						ObjectMeta: metav1.ObjectMeta{
+							Annotations: map[string]string{
+								kueue.PodSetGroupName:                  "1podset",
+								kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+							},
+						},
+					},
+				}).
+				WithWorkerGroups(
+					rayv1.WorkerGroupSpec{
+						GroupName: "wg1",
+						Replicas:  ptr.To(int32(5)),
+						Template: corev1.PodTemplateSpec{
+							ObjectMeta: metav1.ObjectMeta{
+								Annotations: map[string]string{
+									kueue.PodSetGroupName:                  "3podsets",
+									kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+								},
+							},
+						},
+					},
+					rayv1.WorkerGroupSpec{
+						GroupName: "wg2",
+						Replicas:  ptr.To(int32(10)),
+						Template: corev1.PodTemplateSpec{
+							ObjectMeta: metav1.ObjectMeta{
+								Annotations: map[string]string{
+									kueue.PodSetGroupName:                  "3podsets",
+									kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+								},
+							},
+						},
+					},
+					rayv1.WorkerGroupSpec{
+						GroupName: "wg3",
+						Replicas:  ptr.To(int32(10)),
+						Template: corev1.PodTemplateSpec{
+							ObjectMeta: metav1.ObjectMeta{
+								Annotations: map[string]string{
+									kueue.PodSetGroupName:                  "3podsets",
+									kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+								},
+							},
+						},
+					},
+				).
+				Obj(),
+			wantErr: field.ErrorList{
+				field.Invalid(field.NewPath("spec.headGroupSpec.template.metadata.annotations").
+					Key("kueue.x-k8s.io/podset-group-name"), "1podset", "can only define groups of exactly 2 pod sets, got: 1 pod set(s)"),
+				field.Invalid(field.NewPath("spec.workerGroupSpecs[0].template.metadata.annotations").
+					Key("kueue.x-k8s.io/podset-group-name"), "3podsets", "can only define groups of exactly 2 pod sets, got: 3 pod set(s)"),
+				field.Invalid(field.NewPath("spec.workerGroupSpecs[1].template.metadata.annotations").
+					Key("kueue.x-k8s.io/podset-group-name"), "3podsets", "can only define groups of exactly 2 pod sets, got: 3 pod set(s)"),
+				field.Invalid(field.NewPath("spec.workerGroupSpecs[2].template.metadata.annotations").
+					Key("kueue.x-k8s.io/podset-group-name"), "3podsets", "can only define groups of exactly 2 pod sets, got: 3 pod set(s)"),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
+		"invalid PodSet grouping request - no leader in group": {
+			job: testingrayutil.MakeCluster("rayjob", "ns").Queue("queue").
+				WithWorkerGroups(
+					rayv1.WorkerGroupSpec{
+						GroupName: "wg1",
+						Replicas:  ptr.To(int32(5)),
+						Template: corev1.PodTemplateSpec{
+							ObjectMeta: metav1.ObjectMeta{
+								Annotations: map[string]string{
+									kueue.PodSetGroupName:                  "groupname",
+									kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+								},
+							},
+						},
+					},
+					rayv1.WorkerGroupSpec{
+						GroupName: "wg2",
+						Replicas:  ptr.To(int32(10)),
+						Template: corev1.PodTemplateSpec{
+							ObjectMeta: metav1.ObjectMeta{
+								Annotations: map[string]string{
+									kueue.PodSetGroupName:                  "groupname",
+									kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+								},
+							},
+						},
+					},
+				).
+				Obj(),
+			wantErr: field.ErrorList{
+				field.Invalid(field.NewPath("spec.workerGroupSpecs[0].template.metadata.annotations").
+					Key("kueue.x-k8s.io/podset-group-name"), "groupname", "can only define groups where at least one pod set has only 1 replica, got: 5 replica(s) and 10 replica(s) in the group"),
+				field.Invalid(field.NewPath("spec.workerGroupSpecs[1].template.metadata.annotations").
+					Key("kueue.x-k8s.io/podset-group-name"), "groupname", "can only define groups where at least one pod set has only 1 replica, got: 5 replica(s) and 10 replica(s) in the group"),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
+		"invalid PodSet grouping request - required topology does not match": {
+			job: testingrayutil.MakeCluster("rayjob", "ns").Queue("queue").
+				WithHeadGroupSpec(rayv1.HeadGroupSpec{
+					Template: corev1.PodTemplateSpec{
+						ObjectMeta: metav1.ObjectMeta{
+							Annotations: map[string]string{
+								kueue.PodSetGroupName:                  "groupname",
+								kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+							},
+						},
+					},
+				}).
+				WithWorkerGroups(
+					rayv1.WorkerGroupSpec{
+						GroupName: "wg1",
+						Replicas:  ptr.To(int32(5)),
+						Template: corev1.PodTemplateSpec{
+							ObjectMeta: metav1.ObjectMeta{
+								Annotations: map[string]string{
+									kueue.PodSetGroupName:                  "groupname",
+									kueue.PodSetRequiredTopologyAnnotation: "cloud.com/rack",
+								},
+							},
+						},
+					},
+				).
+				Obj(),
+			wantErr: field.ErrorList{
+				field.Invalid(field.NewPath("spec.headGroupSpec.template.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.workerGroupSpecs[0].template.metadata.annotations' in group 'groupname'"),
+				field.Invalid(field.NewPath("spec.workerGroupSpecs[0].template.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.headGroupSpec.template.metadata.annotations' in group 'groupname'"),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
+		"invalid PodSet grouping request - preferred topology does not match": {
+			job: testingrayutil.MakeCluster("rayjob", "ns").Queue("queue").
+				WithHeadGroupSpec(rayv1.HeadGroupSpec{
+					Template: corev1.PodTemplateSpec{
+						ObjectMeta: metav1.ObjectMeta{
+							Annotations: map[string]string{
+								kueue.PodSetGroupName:                   "groupname",
+								kueue.PodSetPreferredTopologyAnnotation: "cloud.com/block",
+							},
+						},
+					},
+				}).
+				WithWorkerGroups(
+					rayv1.WorkerGroupSpec{
+						GroupName: "wg1",
+						Replicas:  ptr.To(int32(5)),
+						Template: corev1.PodTemplateSpec{
+							ObjectMeta: metav1.ObjectMeta{
+								Annotations: map[string]string{
+									kueue.PodSetGroupName:                   "groupname",
+									kueue.PodSetPreferredTopologyAnnotation: "cloud.com/rack",
+								},
+							},
+						},
+					},
+				).
+				Obj(),
+			wantErr: field.ErrorList{
+				field.Invalid(field.NewPath("spec.headGroupSpec.template.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.workerGroupSpecs[0].template.metadata.annotations' in group 'groupname'"),
+				field.Invalid(field.NewPath("spec.workerGroupSpecs[0].template.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.headGroupSpec.template.metadata.annotations' in group 'groupname'"),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
+		"invalid PodSet grouping request - different topology annotations within group": {
+			job: testingrayutil.MakeCluster("rayjob", "ns").Queue("queue").
+				WithHeadGroupSpec(rayv1.HeadGroupSpec{
+					Template: corev1.PodTemplateSpec{
+						ObjectMeta: metav1.ObjectMeta{
+							Annotations: map[string]string{
+								kueue.PodSetGroupName:                   "groupname",
+								kueue.PodSetPreferredTopologyAnnotation: "cloud.com/block",
+							},
+						},
+					},
+				}).
+				WithWorkerGroups(
+					rayv1.WorkerGroupSpec{
+						GroupName: "wg1",
+						Replicas:  ptr.To(int32(5)),
+						Template: corev1.PodTemplateSpec{
+							ObjectMeta: metav1.ObjectMeta{
+								Annotations: map[string]string{
+									kueue.PodSetGroupName:                  "groupname",
+									kueue.PodSetRequiredTopologyAnnotation: "cloud.com/rack",
+								},
+							},
+						},
+					},
+				).
+				Obj(),
+			wantErr: field.ErrorList{
+				field.Invalid(field.NewPath("spec.headGroupSpec.template.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.workerGroupSpecs[0].template.metadata.annotations' in group 'groupname'"),
+				field.Invalid(field.NewPath("spec.workerGroupSpecs[0].template.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.headGroupSpec.template.metadata.annotations' in group 'groupname'"),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
 	}
 
 	for name, tc := range testcases {
diff --git a/pkg/controller/jobs/rayjob/rayjob_webhook_test.go b/pkg/controller/jobs/rayjob/rayjob_webhook_test.go
index 58308fb94..2d3474240 100644
--- a/pkg/controller/jobs/rayjob/rayjob_webhook_test.go
+++ b/pkg/controller/jobs/rayjob/rayjob_webhook_test.go
@@ -351,6 +351,233 @@ func TestValidateCreate(t *testing.T) {
 			}.ToAggregate(),
 			topologyAwareScheduling: true,
 		},
+		"valid PodSet grouping request": {
+			job: testingrayutil.MakeJob("rayjob", "ns").Queue("queue").
+				WithHeadGroupSpec(rayv1.HeadGroupSpec{
+					Template: corev1.PodTemplateSpec{
+						ObjectMeta: metav1.ObjectMeta{
+							Annotations: map[string]string{
+								kueue.PodSetGroupName:                  "groupname",
+								kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+							},
+						},
+					},
+				}).
+				WithWorkerGroups(
+					rayv1.WorkerGroupSpec{
+						GroupName: "wg1",
+						Template: corev1.PodTemplateSpec{
+							ObjectMeta: metav1.ObjectMeta{
+								Annotations: map[string]string{
+									kueue.PodSetGroupName:                  "groupname",
+									kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+								},
+							},
+						},
+					},
+				).
+				Obj(),
+			topologyAwareScheduling: true,
+		},
+		"invalid PodSet grouping request - groups of size other than 2": {
+			job: testingrayutil.MakeJob("rayjob", "ns").Queue("queue").
+				WithHeadGroupSpec(rayv1.HeadGroupSpec{
+					Template: corev1.PodTemplateSpec{
+						ObjectMeta: metav1.ObjectMeta{
+							Annotations: map[string]string{
+								kueue.PodSetGroupName:                  "1podset",
+								kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+							},
+						},
+					},
+				}).
+				WithWorkerGroups(
+					rayv1.WorkerGroupSpec{
+						GroupName: "wg1",
+						Replicas:  ptr.To(int32(5)),
+						Template: corev1.PodTemplateSpec{
+							ObjectMeta: metav1.ObjectMeta{
+								Annotations: map[string]string{
+									kueue.PodSetGroupName:                  "3podsets",
+									kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+								},
+							},
+						},
+					},
+					rayv1.WorkerGroupSpec{
+						GroupName: "wg2",
+						Replicas:  ptr.To(int32(10)),
+						Template: corev1.PodTemplateSpec{
+							ObjectMeta: metav1.ObjectMeta{
+								Annotations: map[string]string{
+									kueue.PodSetGroupName:                  "3podsets",
+									kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+								},
+							},
+						},
+					},
+					rayv1.WorkerGroupSpec{
+						GroupName: "wg3",
+						Replicas:  ptr.To(int32(10)),
+						Template: corev1.PodTemplateSpec{
+							ObjectMeta: metav1.ObjectMeta{
+								Annotations: map[string]string{
+									kueue.PodSetGroupName:                  "3podsets",
+									kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+								},
+							},
+						},
+					},
+				).
+				Obj(),
+			wantErr: field.ErrorList{
+				field.Invalid(field.NewPath("spec.rayClusterSpec.headGroupSpec.template.metadata.annotations").
+					Key("kueue.x-k8s.io/podset-group-name"), "1podset", "can only define groups of exactly 2 pod sets, got: 1 pod set(s)"),
+				field.Invalid(field.NewPath("spec.rayClusterSpec.workerGroupSpecs[0].template.metadata.annotations").
+					Key("kueue.x-k8s.io/podset-group-name"), "3podsets", "can only define groups of exactly 2 pod sets, got: 3 pod set(s)"),
+				field.Invalid(field.NewPath("spec.rayClusterSpec.workerGroupSpecs[1].template.metadata.annotations").
+					Key("kueue.x-k8s.io/podset-group-name"), "3podsets", "can only define groups of exactly 2 pod sets, got: 3 pod set(s)"),
+				field.Invalid(field.NewPath("spec.rayClusterSpec.workerGroupSpecs[2].template.metadata.annotations").
+					Key("kueue.x-k8s.io/podset-group-name"), "3podsets", "can only define groups of exactly 2 pod sets, got: 3 pod set(s)"),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
+		"invalid PodSet grouping request - no leader in group": {
+			job: testingrayutil.MakeJob("rayjob", "ns").Queue("queue").
+				WithWorkerGroups(
+					rayv1.WorkerGroupSpec{
+						GroupName: "wg1",
+						Replicas:  ptr.To(int32(5)),
+						Template: corev1.PodTemplateSpec{
+							ObjectMeta: metav1.ObjectMeta{
+								Annotations: map[string]string{
+									kueue.PodSetGroupName:                  "groupname",
+									kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+								},
+							},
+						},
+					},
+					rayv1.WorkerGroupSpec{
+						GroupName: "wg2",
+						Replicas:  ptr.To(int32(10)),
+						Template: corev1.PodTemplateSpec{
+							ObjectMeta: metav1.ObjectMeta{
+								Annotations: map[string]string{
+									kueue.PodSetGroupName:                  "groupname",
+									kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+								},
+							},
+						},
+					},
+				).
+				Obj(),
+			wantErr: field.ErrorList{
+				field.Invalid(field.NewPath("spec.rayClusterSpec.workerGroupSpecs[0].template.metadata.annotations").
+					Key("kueue.x-k8s.io/podset-group-name"), "groupname", "can only define groups where at least one pod set has only 1 replica, got: 5 replica(s) and 10 replica(s) in the group"),
+				field.Invalid(field.NewPath("spec.rayClusterSpec.workerGroupSpecs[1].template.metadata.annotations").
+					Key("kueue.x-k8s.io/podset-group-name"), "groupname", "can only define groups where at least one pod set has only 1 replica, got: 5 replica(s) and 10 replica(s) in the group"),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
+		"invalid PodSet grouping request - required topology does not match": {
+			job: testingrayutil.MakeJob("rayjob", "ns").Queue("queue").
+				WithHeadGroupSpec(rayv1.HeadGroupSpec{
+					Template: corev1.PodTemplateSpec{
+						ObjectMeta: metav1.ObjectMeta{
+							Annotations: map[string]string{
+								kueue.PodSetGroupName:                  "groupname",
+								kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+							},
+						},
+					},
+				}).
+				WithWorkerGroups(
+					rayv1.WorkerGroupSpec{
+						GroupName: "wg1",
+						Replicas:  ptr.To(int32(5)),
+						Template: corev1.PodTemplateSpec{
+							ObjectMeta: metav1.ObjectMeta{
+								Annotations: map[string]string{
+									kueue.PodSetGroupName:                  "groupname",
+									kueue.PodSetRequiredTopologyAnnotation: "cloud.com/rack",
+								},
+							},
+						},
+					},
+				).
+				Obj(),
+			wantErr: field.ErrorList{
+				field.Invalid(field.NewPath("spec.rayClusterSpec.headGroupSpec.template.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.rayClusterSpec.workerGroupSpecs[0].template.metadata.annotations' in group 'groupname'"),
+				field.Invalid(field.NewPath("spec.rayClusterSpec.workerGroupSpecs[0].template.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.rayClusterSpec.headGroupSpec.template.metadata.annotations' in group 'groupname'"),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
+		"invalid PodSet grouping request - preferred topology does not match": {
+			job: testingrayutil.MakeJob("rayjob", "ns").Queue("queue").
+				WithHeadGroupSpec(rayv1.HeadGroupSpec{
+					Template: corev1.PodTemplateSpec{
+						ObjectMeta: metav1.ObjectMeta{
+							Annotations: map[string]string{
+								kueue.PodSetGroupName:                   "groupname",
+								kueue.PodSetPreferredTopologyAnnotation: "cloud.com/block",
+							},
+						},
+					},
+				}).
+				WithWorkerGroups(
+					rayv1.WorkerGroupSpec{
+						GroupName: "wg1",
+						Replicas:  ptr.To(int32(5)),
+						Template: corev1.PodTemplateSpec{
+							ObjectMeta: metav1.ObjectMeta{
+								Annotations: map[string]string{
+									kueue.PodSetGroupName:                   "groupname",
+									kueue.PodSetPreferredTopologyAnnotation: "cloud.com/rack",
+								},
+							},
+						},
+					},
+				).
+				Obj(),
+			wantErr: field.ErrorList{
+				field.Invalid(field.NewPath("spec.rayClusterSpec.headGroupSpec.template.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.rayClusterSpec.workerGroupSpecs[0].template.metadata.annotations' in group 'groupname'"),
+				field.Invalid(field.NewPath("spec.rayClusterSpec.workerGroupSpecs[0].template.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.rayClusterSpec.headGroupSpec.template.metadata.annotations' in group 'groupname'"),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
+		"invalid PodSet grouping request - different topology annotations within group": {
+			job: testingrayutil.MakeJob("rayjob", "ns").Queue("queue").
+				WithHeadGroupSpec(rayv1.HeadGroupSpec{
+					Template: corev1.PodTemplateSpec{
+						ObjectMeta: metav1.ObjectMeta{
+							Annotations: map[string]string{
+								kueue.PodSetGroupName:                   "groupname",
+								kueue.PodSetPreferredTopologyAnnotation: "cloud.com/block",
+							},
+						},
+					},
+				}).
+				WithWorkerGroups(
+					rayv1.WorkerGroupSpec{
+						GroupName: "wg1",
+						Replicas:  ptr.To(int32(5)),
+						Template: corev1.PodTemplateSpec{
+							ObjectMeta: metav1.ObjectMeta{
+								Annotations: map[string]string{
+									kueue.PodSetGroupName:                  "groupname",
+									kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+								},
+							},
+						},
+					},
+				).
+				Obj(),
+			wantErr: field.ErrorList{
+				field.Invalid(field.NewPath("spec.rayClusterSpec.headGroupSpec.template.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.rayClusterSpec.workerGroupSpecs[0].template.metadata.annotations' in group 'groupname'"),
+				field.Invalid(field.NewPath("spec.rayClusterSpec.workerGroupSpecs[0].template.metadata.annotations"), field.OmitValueType{}, "must specify 'kueue.x-k8s.io/podset-required-topology' or 'kueue.x-k8s.io/podset-preferred-topology' topology consistent with 'spec.rayClusterSpec.headGroupSpec.template.metadata.annotations' in group 'groupname'"),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
 	}
 
 	for name, tc := range testcases {
diff --git a/pkg/dra/claims_test.go b/pkg/dra/claims_test.go
index ccade3e52..130e46b06 100644
--- a/pkg/dra/claims_test.go
+++ b/pkg/dra/claims_test.go
@@ -32,14 +32,14 @@ import (
 	"sigs.k8s.io/controller-runtime/pkg/client/fake"
 
 	configapi "sigs.k8s.io/kueue/apis/config/v1beta1"
-	kueuev1beta1 "sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/pkg/dra"
 )
 
 func Test_GetResourceRequests(t *testing.T) {
 	scheme := runtime.NewScheme()
 	_ = clientgoscheme.AddToScheme(scheme)
-	_ = kueuev1beta1.AddToScheme(scheme)
+	_ = kueue.AddToScheme(scheme)
 	_ = resourcev1.AddToScheme(scheme)
 
 	tmpl := &resourcev1.ResourceClaimTemplate{
@@ -74,10 +74,10 @@ func Test_GetResourceRequests(t *testing.T) {
 		},
 	}
 
-	wl := &kueuev1beta1.Workload{
+	wl := &kueue.Workload{
 		ObjectMeta: metav1.ObjectMeta{Name: "wl", Namespace: "ns1"},
-		Spec: kueuev1beta1.WorkloadSpec{
-			PodSets: []kueuev1beta1.PodSet{{
+		Spec: kueue.WorkloadSpec{
+			PodSets: []kueue.PodSet{{
 				Name:  "main",
 				Count: 1,
 				Template: corev1.PodTemplateSpec{
@@ -95,10 +95,10 @@ func Test_GetResourceRequests(t *testing.T) {
 
 	tests := []struct {
 		name         string
-		modifyWL     func(w *kueuev1beta1.Workload)
+		modifyWL     func(w *kueue.Workload)
 		extraObjects []runtime.Object
 		lookup       func(corev1.ResourceName) (corev1.ResourceName, bool)
-		want         map[kueuev1beta1.PodSetReference]corev1.ResourceList
+		want         map[kueue.PodSetReference]corev1.ResourceList
 		wantErr      bool
 	}{
 		{
@@ -111,7 +111,7 @@ func Test_GetResourceRequests(t *testing.T) {
 				lr, ok := m[dc]
 				return lr, ok
 			},
-			want: map[kueuev1beta1.PodSetReference]corev1.ResourceList{
+			want: map[kueue.PodSetReference]corev1.ResourceList{
 				"main": {
 					"res-1": resource.MustParse("2"),
 				},
@@ -124,7 +124,7 @@ func Test_GetResourceRequests(t *testing.T) {
 		},
 		{
 			name: "Two containers each using different claim templates",
-			modifyWL: func(w *kueuev1beta1.Workload) {
+			modifyWL: func(w *kueue.Workload) {
 				w.Spec.PodSets[0].Template.Spec.Containers = []corev1.Container{
 					{
 						Name:  "c1",
@@ -157,11 +157,11 @@ func Test_GetResourceRequests(t *testing.T) {
 				lr, ok := m[dc]
 				return lr, ok
 			},
-			want: map[kueuev1beta1.PodSetReference]corev1.ResourceList{"main": {"res-1": resource.MustParse("2"), "res-2": resource.MustParse("1")}},
+			want: map[kueue.PodSetReference]corev1.ResourceList{"main": {"res-1": resource.MustParse("2"), "res-2": resource.MustParse("1")}},
 		},
 		{
 			name: "Two containers sharing one claim template",
-			modifyWL: func(w *kueuev1beta1.Workload) {
+			modifyWL: func(w *kueue.Workload) {
 				w.Spec.PodSets[0].Template.Spec.Containers = []corev1.Container{
 					{
 						Name:  "c1",
@@ -188,7 +188,7 @@ func Test_GetResourceRequests(t *testing.T) {
 				}
 				return "", false
 			},
-			want: map[kueuev1beta1.PodSetReference]corev1.ResourceList{"main": {"res-1": resource.MustParse("2")}},
+			want: map[kueue.PodSetReference]corev1.ResourceList{"main": {"res-1": resource.MustParse("2")}},
 		},
 		{
 			name: "Single template requesting two devices",
@@ -198,7 +198,7 @@ func Test_GetResourceRequests(t *testing.T) {
 					Spec:       resourcev1.ResourceClaimTemplateSpec{Spec: resourcev1.ResourceClaimSpec{Devices: resourcev1.DeviceClaim{Requests: []resourcev1.DeviceRequest{{Exactly: &resourcev1.ExactDeviceRequest{AllocationMode: resourcev1.DeviceAllocationModeExactCount, Count: 2, DeviceClassName: "test-deviceclass-1"}}}}}},
 				},
 			},
-			modifyWL: func(w *kueuev1beta1.Workload) {
+			modifyWL: func(w *kueue.Workload) {
 				w.Spec.PodSets[0].Template.Spec.Containers = []corev1.Container{
 					{
 						Name:  "c",
@@ -218,11 +218,11 @@ func Test_GetResourceRequests(t *testing.T) {
 				}
 				return "", false
 			},
-			want: map[kueuev1beta1.PodSetReference]corev1.ResourceList{"main": {"res-1": resource.MustParse("2")}},
+			want: map[kueue.PodSetReference]corev1.ResourceList{"main": {"res-1": resource.MustParse("2")}},
 		},
 		{
 			name: "Init and regular container sharing one template",
-			modifyWL: func(w *kueuev1beta1.Workload) {
+			modifyWL: func(w *kueue.Workload) {
 				w.Spec.PodSets[0].Template.Spec.InitContainers = []corev1.Container{
 					{
 						Name:  "init",
@@ -251,7 +251,7 @@ func Test_GetResourceRequests(t *testing.T) {
 				}
 				return "", false
 			},
-			want: map[kueuev1beta1.PodSetReference]corev1.ResourceList{"main": {"res-1": resource.MustParse("2")}},
+			want: map[kueue.PodSetReference]corev1.ResourceList{"main": {"res-1": resource.MustParse("2")}},
 		},
 	}
 
diff --git a/pkg/scheduler/scheduler_afs_test.go b/pkg/scheduler/scheduler_afs_test.go
index f0b19e027..02d2b1c56 100644
--- a/pkg/scheduler/scheduler_afs_test.go
+++ b/pkg/scheduler/scheduler_afs_test.go
@@ -18,6 +18,7 @@ package scheduler
 
 import (
 	"context"
+	"fmt"
 	"sync"
 	"testing"
 	"time"
@@ -513,87 +514,90 @@ func TestScheduleForAFS(t *testing.T) {
 	}
 
 	for name, tc := range cases {
-		t.Run(name, func(t *testing.T) {
-			if tc.enableFairSharing {
-				features.SetFeatureGateDuringTest(t, features.AdmissionFairSharing, true)
-			}
+		for _, enabled := range []bool{false, true} {
+			t.Run(fmt.Sprintf("%s WorkloadRequestUseMergePatch enabled: %t", name, enabled), func(t *testing.T) {
+				features.SetFeatureGateDuringTest(t, features.WorkloadRequestUseMergePatch, enabled)
+				if tc.enableFairSharing {
+					features.SetFeatureGateDuringTest(t, features.AdmissionFairSharing, true)
+				}
 
-			for i, q := range queues {
-				if resList, found := tc.initialUsage[q.Name]; found {
-					queues[i].Status.FairSharing.AdmissionFairSharingStatus.ConsumedResources = resList
+				for i, q := range queues {
+					if resList, found := tc.initialUsage[q.Name]; found {
+						queues[i].Status.FairSharing.AdmissionFairSharingStatus.ConsumedResources = resList
+					}
 				}
-			}
 
-			clientBuilder := utiltesting.NewClientBuilder().
-				WithLists(
-					&kueue.WorkloadList{Items: tc.workloads},
-					&kueue.ClusterQueueList{Items: clusterQueues},
-					&kueue.LocalQueueList{Items: queues}).
-				WithObjects(
-					utiltesting.MakeNamespace("default"),
-				).
-				WithStatusSubresource(&kueue.Workload{}).
-				WithInterceptorFuncs(interceptor.Funcs{SubResourcePatch: utiltesting.TreatSSAAsStrategicMerge})
-			cl := clientBuilder.Build()
+				clientBuilder := utiltesting.NewClientBuilder().
+					WithLists(
+						&kueue.WorkloadList{Items: tc.workloads},
+						&kueue.ClusterQueueList{Items: clusterQueues},
+						&kueue.LocalQueueList{Items: queues}).
+					WithObjects(
+						utiltesting.MakeNamespace("default"),
+					).
+					WithStatusSubresource(&kueue.Workload{}).
+					WithInterceptorFuncs(interceptor.Funcs{SubResourcePatch: utiltesting.TreatSSAAsStrategicMerge})
+				cl := clientBuilder.Build()
 
-			fairSharing := &config.FairSharing{
-				Enable: tc.enableFairSharing,
-			}
-			cqCache := schdcache.New(cl, schdcache.WithFairSharing(fairSharing.Enable), schdcache.WithAdmissionFairSharing(afsConfig))
-			qManager := qcache.NewManager(cl, cqCache, qcache.WithAdmissionFairSharing(afsConfig))
+				fairSharing := &config.FairSharing{
+					Enable: tc.enableFairSharing,
+				}
+				cqCache := schdcache.New(cl, schdcache.WithFairSharing(fairSharing.Enable), schdcache.WithAdmissionFairSharing(afsConfig))
+				qManager := qcache.NewManager(cl, cqCache, qcache.WithAdmissionFairSharing(afsConfig))
 
-			ctx, log := utiltesting.ContextWithLog(t)
-			for _, q := range queues {
-				if err := qManager.AddLocalQueue(ctx, &q); err != nil {
-					t.Fatalf("Inserting queue %s/%s in manager: %v", q.Namespace, q.Name, err)
+				ctx, log := utiltesting.ContextWithLog(t)
+				for _, q := range queues {
+					if err := qManager.AddLocalQueue(ctx, &q); err != nil {
+						t.Fatalf("Inserting queue %s/%s in manager: %v", q.Namespace, q.Name, err)
+					}
 				}
-			}
-			for _, rf := range resourceFlavors {
-				cqCache.AddOrUpdateResourceFlavor(log, rf)
-			}
-			for _, cq := range clusterQueues {
-				if err := cqCache.AddClusterQueue(ctx, &cq); err != nil {
-					t.Fatalf("Inserting clusterQueue %s in cache: %v", cq.Name, err)
+				for _, rf := range resourceFlavors {
+					cqCache.AddOrUpdateResourceFlavor(log, rf)
 				}
-				if err := qManager.AddClusterQueue(ctx, &cq); err != nil {
-					t.Fatalf("Inserting clusterQueue %s in manager: %v", cq.Name, err)
+				for _, cq := range clusterQueues {
+					if err := cqCache.AddClusterQueue(ctx, &cq); err != nil {
+						t.Fatalf("Inserting clusterQueue %s in cache: %v", cq.Name, err)
+					}
+					if err := qManager.AddClusterQueue(ctx, &cq); err != nil {
+						t.Fatalf("Inserting clusterQueue %s in manager: %v", cq.Name, err)
+					}
 				}
-			}
-			recorder := &utiltesting.EventRecorder{}
-			scheduler := New(qManager, cqCache, cl, recorder,
-				WithFairSharing(fairSharing),
-				WithAdmissionFairSharing(afsConfig),
-				WithClock(t, fakeClock))
-			wg := sync.WaitGroup{}
-			scheduler.setAdmissionRoutineWrapper(routine.NewWrapper(
-				func() { wg.Add(1) },
-				func() { wg.Done() },
-			))
+				recorder := &utiltesting.EventRecorder{}
+				scheduler := New(qManager, cqCache, cl, recorder,
+					WithFairSharing(fairSharing),
+					WithAdmissionFairSharing(afsConfig),
+					WithClock(t, fakeClock))
+				wg := sync.WaitGroup{}
+				scheduler.setAdmissionRoutineWrapper(routine.NewWrapper(
+					func() { wg.Add(1) },
+					func() { wg.Done() },
+				))
 
-			ctx, cancel := context.WithTimeout(ctx, queueingTimeout)
-			go qManager.CleanUpOnContext(ctx)
-			defer cancel()
+				ctx, cancel := context.WithTimeout(ctx, queueingTimeout)
+				go qManager.CleanUpOnContext(ctx)
+				defer cancel()
 
-			for range len(tc.workloads) {
-				scheduler.schedule(ctx)
-				wg.Wait()
-			}
+				for range len(tc.workloads) {
+					scheduler.schedule(ctx)
+					wg.Wait()
+				}
 
-			gotWorkloads := &kueue.WorkloadList{}
-			err := cl.List(ctx, gotWorkloads)
-			if err != nil {
-				t.Fatalf("Unexpected list workloads error: %v", err)
-			}
+				gotWorkloads := &kueue.WorkloadList{}
+				err := cl.List(ctx, gotWorkloads)
+				if err != nil {
+					t.Fatalf("Unexpected list workloads error: %v", err)
+				}
 
-			defaultWorkloadCmpOpts := cmp.Options{
-				cmpopts.EquateEmpty(),
-				cmpopts.IgnoreFields(kueue.AdmissionCheckState{}, "LastTransitionTime"),
-				cmpopts.IgnoreFields(kueue.Workload{}, "ObjectMeta.ResourceVersion"),
-			}
+				defaultWorkloadCmpOpts := cmp.Options{
+					cmpopts.EquateEmpty(),
+					cmpopts.IgnoreFields(kueue.AdmissionCheckState{}, "LastTransitionTime"),
+					cmpopts.IgnoreFields(kueue.Workload{}, "ObjectMeta.ResourceVersion"),
+				}
 
-			if diff := cmp.Diff(tc.wantWorkloads, gotWorkloads.Items, defaultWorkloadCmpOpts); diff != "" {
-				t.Errorf("Unexpected workloads (-want,+got):\n%s", diff)
-			}
-		})
+				if diff := cmp.Diff(tc.wantWorkloads, gotWorkloads.Items, defaultWorkloadCmpOpts); diff != "" {
+					t.Errorf("Unexpected workloads (-want,+got):\n%s", diff)
+				}
+			})
+		}
 	}
 }
diff --git a/pkg/scheduler/scheduler_tas_test.go b/pkg/scheduler/scheduler_tas_test.go
index 93c477575..b43f3eb9c 100644
--- a/pkg/scheduler/scheduler_tas_test.go
+++ b/pkg/scheduler/scheduler_tas_test.go
@@ -18,6 +18,7 @@ package scheduler
 
 import (
 	"context"
+	"fmt"
 	"sync"
 	"testing"
 	"time"
@@ -2373,122 +2374,129 @@ func TestScheduleForTAS(t *testing.T) {
 		},
 	}
 	for name, tc := range cases {
-		t.Run(name, func(t *testing.T) {
-			for fg, enable := range tc.featureGates {
-				features.SetFeatureGateDuringTest(t, fg, enable)
-			}
-			ctx, log := utiltesting.ContextWithLog(t)
+		for _, enabled := range []bool{false, true} {
+			t.Run(fmt.Sprintf("%s WorkloadRequestUseMergePatch enabled: %t", name, enabled), func(t *testing.T) {
+				features.SetFeatureGateDuringTest(t, features.WorkloadRequestUseMergePatch, enabled)
+				for fg, enable := range tc.featureGates {
+					features.SetFeatureGateDuringTest(t, fg, enable)
+				}
+				ctx, log := utiltesting.ContextWithLog(t)
+				testWls := make([]kueue.Workload, 0, len(tc.workloads))
+				for _, wl := range tc.workloads {
+					testWls = append(testWls, *wl.DeepCopy())
+				}
 
-			clientBuilder := utiltesting.NewClientBuilder().
-				WithLists(
-					&kueue.AdmissionCheckList{Items: tc.admissionChecks},
-					&kueue.WorkloadList{Items: tc.workloads},
-					&kueue.TopologyList{Items: tc.topologies},
-					&corev1.PodList{Items: tc.pods},
-					&corev1.NodeList{Items: tc.nodes},
-					&kueue.LocalQueueList{Items: queues}).
-				WithObjects(utiltesting.MakeNamespace("default")).
-				WithInterceptorFuncs(interceptor.Funcs{SubResourcePatch: utiltesting.TreatSSAAsStrategicMerge}).
-				WithStatusSubresource(&kueue.Workload{}, &kueue.ClusterQueue{}, &kueue.LocalQueue{})
+				clientBuilder := utiltesting.NewClientBuilder().
+					WithLists(
+						&kueue.AdmissionCheckList{Items: tc.admissionChecks},
+						&kueue.WorkloadList{Items: testWls},
+						&kueue.TopologyList{Items: tc.topologies},
+						&corev1.PodList{Items: tc.pods},
+						&corev1.NodeList{Items: tc.nodes},
+						&kueue.LocalQueueList{Items: queues}).
+					WithObjects(utiltesting.MakeNamespace("default")).
+					WithInterceptorFuncs(interceptor.Funcs{SubResourcePatch: utiltesting.TreatSSAAsStrategicMerge}).
+					WithStatusSubresource(&kueue.Workload{}, &kueue.ClusterQueue{}, &kueue.LocalQueue{})
 
-			for _, ac := range tc.admissionChecks {
-				clientBuilder = clientBuilder.WithStatusSubresource(ac.DeepCopy())
-			}
-			_ = tasindexer.SetupIndexes(ctx, utiltesting.AsIndexer(clientBuilder))
-			cl := clientBuilder.Build()
-			recorder := &utiltesting.EventRecorder{}
-			cqCache := schdcache.New(cl)
-			now := time.Now()
-			fakeClock := testingclock.NewFakeClock(now)
-			qManager := qcache.NewManager(cl, cqCache, qcache.WithClock(fakeClock))
-			topologyByName := slices.ToMap(tc.topologies, func(i int) (kueue.TopologyReference, kueue.Topology) {
-				return kueue.TopologyReference(tc.topologies[i].Name), tc.topologies[i]
-			})
-			for _, ac := range tc.admissionChecks {
-				cqCache.AddOrUpdateAdmissionCheck(log, &ac)
-			}
-			for _, flavor := range tc.resourceFlavors {
-				cqCache.AddOrUpdateResourceFlavor(log, &flavor)
-				if flavor.Spec.TopologyName != nil {
-					t := topologyByName[*flavor.Spec.TopologyName]
-					cqCache.AddOrUpdateTopology(log, &t)
+				for _, ac := range tc.admissionChecks {
+					clientBuilder = clientBuilder.WithStatusSubresource(ac.DeepCopy())
 				}
-			}
-			for _, cq := range tc.clusterQueues {
-				if err := cqCache.AddClusterQueue(ctx, &cq); err != nil {
-					t.Fatalf("Inserting clusterQueue %s in cache: %v", cq.Name, err)
+				_ = tasindexer.SetupIndexes(ctx, utiltesting.AsIndexer(clientBuilder))
+				cl := clientBuilder.Build()
+				recorder := &utiltesting.EventRecorder{}
+				cqCache := schdcache.New(cl)
+				now := time.Now()
+				fakeClock := testingclock.NewFakeClock(now)
+				qManager := qcache.NewManager(cl, cqCache, qcache.WithClock(fakeClock))
+				topologyByName := slices.ToMap(tc.topologies, func(i int) (kueue.TopologyReference, kueue.Topology) {
+					return kueue.TopologyReference(tc.topologies[i].Name), tc.topologies[i]
+				})
+				for _, ac := range tc.admissionChecks {
+					cqCache.AddOrUpdateAdmissionCheck(log, &ac)
 				}
-				if err := qManager.AddClusterQueue(ctx, &cq); err != nil {
-					t.Fatalf("Inserting clusterQueue %s in manager: %v", cq.Name, err)
+				for _, flavor := range tc.resourceFlavors {
+					cqCache.AddOrUpdateResourceFlavor(log, &flavor)
+					if flavor.Spec.TopologyName != nil {
+						t := topologyByName[*flavor.Spec.TopologyName]
+						cqCache.AddOrUpdateTopology(log, &t)
+					}
 				}
-				if err := cl.Create(ctx, &cq); err != nil {
-					t.Fatalf("couldn't create the cluster queue: %v", err)
+				for _, cq := range tc.clusterQueues {
+					if err := cqCache.AddClusterQueue(ctx, &cq); err != nil {
+						t.Fatalf("Inserting clusterQueue %s in cache: %v", cq.Name, err)
+					}
+					if err := qManager.AddClusterQueue(ctx, &cq); err != nil {
+						t.Fatalf("Inserting clusterQueue %s in manager: %v", cq.Name, err)
+					}
+					if err := cl.Create(ctx, &cq); err != nil {
+						t.Fatalf("couldn't create the cluster queue: %v", err)
+					}
 				}
-			}
-			for _, q := range queues {
-				if err := qManager.AddLocalQueue(ctx, &q); err != nil {
-					t.Fatalf("Inserting queue %s/%s in manager: %v", q.Namespace, q.Name, err)
+				for _, q := range queues {
+					if err := qManager.AddLocalQueue(ctx, &q); err != nil {
+						t.Fatalf("Inserting queue %s/%s in manager: %v", q.Namespace, q.Name, err)
+					}
 				}
-			}
-			initiallyAdmittedWorkloads := sets.New[workload.Reference]()
-			for _, w := range tc.workloads {
-				if workload.IsAdmitted(&w) && !workload.HasUnhealthyNodes(&w) {
-					initiallyAdmittedWorkloads.Insert(workload.Key(&w))
+				initiallyAdmittedWorkloads := sets.New[workload.Reference]()
+				for _, w := range testWls {
+					if workload.IsAdmitted(&w) && !workload.HasUnhealthyNodes(&w) {
+						initiallyAdmittedWorkloads.Insert(workload.Key(&w))
+					}
 				}
-			}
-			for _, w := range tc.workloads {
-				if qManager.QueueSecondPassIfNeeded(ctx, &w, 0) {
-					fakeClock.Step(time.Second)
+				for _, w := range testWls {
+					if qManager.QueueSecondPassIfNeeded(ctx, &w, 0) {
+						fakeClock.Step(time.Second)
+					}
 				}
-			}
-			scheduler := New(qManager, cqCache, cl, recorder)
-			wg := sync.WaitGroup{}
-			scheduler.setAdmissionRoutineWrapper(routine.NewWrapper(
-				func() { wg.Add(1) },
-				func() { wg.Done() },
-			))
+				scheduler := New(qManager, cqCache, cl, recorder)
+				wg := sync.WaitGroup{}
+				scheduler.setAdmissionRoutineWrapper(routine.NewWrapper(
+					func() { wg.Add(1) },
+					func() { wg.Done() },
+				))
 
-			ctx, cancel := context.WithTimeout(ctx, queueingTimeout)
-			go qManager.CleanUpOnContext(ctx)
-			defer cancel()
+				ctx, cancel := context.WithTimeout(ctx, queueingTimeout)
+				go qManager.CleanUpOnContext(ctx)
+				defer cancel()
 
-			scheduler.schedule(ctx)
-			wg.Wait()
-			snapshot, err := cqCache.Snapshot(ctx)
-			if err != nil {
-				t.Fatalf("unexpected error while building snapshot: %v", err)
-			}
-			gotAssignments := make(map[workload.Reference]kueue.Admission)
-			for cqName, c := range snapshot.ClusterQueues() {
-				for name, w := range c.Workloads {
-					if initiallyAdmittedWorkloads.Has(workload.Key(w.Obj)) {
-						continue
-					}
-					switch {
-					case !workload.HasQuotaReservation(w.Obj):
-						t.Fatalf("Workload %s is not admitted by a clusterQueue, but it is found as member of clusterQueue %s in the cache", name, cqName)
-					case w.Obj.Status.Admission.ClusterQueue != cqName:
-						t.Fatalf("Workload %s is admitted by clusterQueue %s, but it is found as member of clusterQueue %s in the cache", name, w.Obj.Status.Admission.ClusterQueue, cqName)
-					default:
-						gotAssignments[name] = *w.Obj.Status.Admission
+				scheduler.schedule(ctx)
+				wg.Wait()
+				snapshot, err := cqCache.Snapshot(ctx)
+				if err != nil {
+					t.Fatalf("unexpected error while building snapshot: %v", err)
+				}
+				gotAssignments := make(map[workload.Reference]kueue.Admission)
+				for cqName, c := range snapshot.ClusterQueues() {
+					for name, w := range c.Workloads {
+						if initiallyAdmittedWorkloads.Has(workload.Key(w.Obj)) {
+							continue
+						}
+						switch {
+						case !workload.HasQuotaReservation(w.Obj):
+							t.Fatalf("Workload %s is not admitted by a clusterQueue, but it is found as member of clusterQueue %s in the cache", name, cqName)
+						case w.Obj.Status.Admission.ClusterQueue != cqName:
+							t.Fatalf("Workload %s is admitted by clusterQueue %s, but it is found as member of clusterQueue %s in the cache", name, w.Obj.Status.Admission.ClusterQueue, cqName)
+						default:
+							gotAssignments[name] = *w.Obj.Status.Admission
+						}
 					}
 				}
-			}
-			if diff := cmp.Diff(tc.wantNewAssignments, gotAssignments, cmpopts.EquateEmpty()); diff != "" {
-				t.Errorf("Unexpected assigned clusterQueues in cache (-want,+got):\n%s", diff)
-			}
-			qDump := qManager.Dump()
-			if diff := cmp.Diff(tc.wantLeft, qDump, cmpDump...); diff != "" {
-				t.Errorf("Unexpected elements left in the queue (-want,+got):\n%s", diff)
-			}
-			qDumpInadmissible := qManager.DumpInadmissible()
-			if diff := cmp.Diff(tc.wantInadmissibleLeft, qDumpInadmissible, cmpDump...); diff != "" {
-				t.Errorf("Unexpected elements left in inadmissible workloads (-want,+got):\n%s", diff)
-			}
-			if diff := cmp.Diff(tc.wantEvents, recorder.RecordedEvents, tc.eventCmpOpts...); diff != "" {
-				t.Errorf("unexpected events (-want/+got):\n%s", diff)
-			}
-		})
+				if diff := cmp.Diff(tc.wantNewAssignments, gotAssignments, cmpopts.EquateEmpty()); diff != "" {
+					t.Errorf("Unexpected assigned clusterQueues in cache (-want,+got):\n%s", diff)
+				}
+				qDump := qManager.Dump()
+				if diff := cmp.Diff(tc.wantLeft, qDump, cmpDump...); diff != "" {
+					t.Errorf("Unexpected elements left in the queue (-want,+got):\n%s", diff)
+				}
+				qDumpInadmissible := qManager.DumpInadmissible()
+				if diff := cmp.Diff(tc.wantInadmissibleLeft, qDumpInadmissible, cmpDump...); diff != "" {
+					t.Errorf("Unexpected elements left in inadmissible workloads (-want,+got):\n%s", diff)
+				}
+				if diff := cmp.Diff(tc.wantEvents, recorder.RecordedEvents, tc.eventCmpOpts...); diff != "" {
+					t.Errorf("unexpected events (-want/+got):\n%s", diff)
+				}
+			})
+		}
 	}
 }
 
@@ -2919,116 +2927,122 @@ func TestScheduleForTASPreemption(t *testing.T) {
 		},
 	}
 	for name, tc := range cases {
-		t.Run(name, func(t *testing.T) {
-			ctx, log := utiltesting.ContextWithLog(t)
-
-			clientBuilder := utiltesting.NewClientBuilder().
-				WithLists(
-					&kueue.WorkloadList{Items: tc.workloads},
-					&kueue.TopologyList{Items: tc.topologies},
-					&corev1.PodList{Items: tc.pods},
-					&corev1.NodeList{Items: tc.nodes},
-					&kueue.LocalQueueList{Items: queues}).
-				WithObjects(
-					utiltesting.MakeNamespace("default"),
-				)
-			_ = tasindexer.SetupIndexes(ctx, utiltesting.AsIndexer(clientBuilder))
-			cl := clientBuilder.Build()
-			recorder := &utiltesting.EventRecorder{}
-			cqCache := schdcache.New(cl)
-			qManager := qcache.NewManager(cl, cqCache)
-			topologyByName := slices.ToMap(tc.topologies, func(i int) (kueue.TopologyReference, kueue.Topology) {
-				return kueue.TopologyReference(tc.topologies[i].Name), tc.topologies[i]
-			})
-			for _, flavor := range tc.resourceFlavors {
-				cqCache.AddOrUpdateResourceFlavor(log, &flavor)
-				if flavor.Spec.TopologyName != nil {
-					t := topologyByName[*flavor.Spec.TopologyName]
-					cqCache.AddOrUpdateTopology(log, &t)
-				}
-			}
-			for _, cq := range tc.clusterQueues {
-				if err := cqCache.AddClusterQueue(ctx, &cq); err != nil {
-					t.Fatalf("Inserting clusterQueue %s in cache: %v", cq.Name, err)
+		for _, enabled := range []bool{false, true} {
+			t.Run(fmt.Sprintf("%s WorkloadRequestUseMergePatch enabled: %t", name, enabled), func(t *testing.T) {
+				features.SetFeatureGateDuringTest(t, features.WorkloadRequestUseMergePatch, enabled)
+				ctx, log := utiltesting.ContextWithLog(t)
+				testWls := make([]kueue.Workload, 0, len(tc.workloads))
+				for _, wl := range tc.workloads {
+					testWls = append(testWls, *wl.DeepCopy())
 				}
-				if err := qManager.AddClusterQueue(ctx, &cq); err != nil {
-					t.Fatalf("Inserting clusterQueue %s in manager: %v", cq.Name, err)
+				clientBuilder := utiltesting.NewClientBuilder().
+					WithLists(
+						&kueue.WorkloadList{Items: testWls},
+						&kueue.TopologyList{Items: tc.topologies},
+						&corev1.PodList{Items: tc.pods},
+						&corev1.NodeList{Items: tc.nodes},
+						&kueue.LocalQueueList{Items: queues}).
+					WithObjects(
+						utiltesting.MakeNamespace("default"),
+					)
+				_ = tasindexer.SetupIndexes(ctx, utiltesting.AsIndexer(clientBuilder))
+				cl := clientBuilder.Build()
+				recorder := &utiltesting.EventRecorder{}
+				cqCache := schdcache.New(cl)
+				qManager := qcache.NewManager(cl, cqCache)
+				topologyByName := slices.ToMap(tc.topologies, func(i int) (kueue.TopologyReference, kueue.Topology) {
+					return kueue.TopologyReference(tc.topologies[i].Name), tc.topologies[i]
+				})
+				for _, flavor := range tc.resourceFlavors {
+					cqCache.AddOrUpdateResourceFlavor(log, &flavor)
+					if flavor.Spec.TopologyName != nil {
+						t := topologyByName[*flavor.Spec.TopologyName]
+						cqCache.AddOrUpdateTopology(log, &t)
+					}
 				}
-				if err := cl.Create(ctx, &cq); err != nil {
-					t.Fatalf("couldn't create the cluster queue: %v", err)
+				for _, cq := range tc.clusterQueues {
+					if err := cqCache.AddClusterQueue(ctx, &cq); err != nil {
+						t.Fatalf("Inserting clusterQueue %s in cache: %v", cq.Name, err)
+					}
+					if err := qManager.AddClusterQueue(ctx, &cq); err != nil {
+						t.Fatalf("Inserting clusterQueue %s in manager: %v", cq.Name, err)
+					}
+					if err := cl.Create(ctx, &cq); err != nil {
+						t.Fatalf("couldn't create the cluster queue: %v", err)
+					}
 				}
-			}
-			for _, q := range queues {
-				if err := qManager.AddLocalQueue(ctx, &q); err != nil {
-					t.Fatalf("Inserting queue %s/%s in manager: %v", q.Namespace, q.Name, err)
+				for _, q := range queues {
+					if err := qManager.AddLocalQueue(ctx, &q); err != nil {
+						t.Fatalf("Inserting queue %s/%s in manager: %v", q.Namespace, q.Name, err)
+					}
 				}
-			}
-			initiallyAdmittedWorkloads := sets.New[workload.Reference]()
-			for _, w := range tc.workloads {
-				if workload.IsAdmitted(&w) {
-					initiallyAdmittedWorkloads.Insert(workload.Key(&w))
+				initiallyAdmittedWorkloads := sets.New[workload.Reference]()
+				for _, w := range testWls {
+					if workload.IsAdmitted(&w) {
+						initiallyAdmittedWorkloads.Insert(workload.Key(&w))
+					}
 				}
-			}
-			scheduler := New(qManager, cqCache, cl, recorder)
-			wg := sync.WaitGroup{}
-			scheduler.setAdmissionRoutineWrapper(routine.NewWrapper(
-				func() { wg.Add(1) },
-				func() { wg.Done() },
-			))
+				scheduler := New(qManager, cqCache, cl, recorder)
+				wg := sync.WaitGroup{}
+				scheduler.setAdmissionRoutineWrapper(routine.NewWrapper(
+					func() { wg.Add(1) },
+					func() { wg.Done() },
+				))
 
-			var mu sync.Mutex
-			gotPreempted := sets.New[workload.Reference]()
-			scheduler.preemptor.OverrideApply(func(_ context.Context, w *kueue.Workload, _, _ string) error {
-				mu.Lock()
-				gotPreempted.Insert(workload.Key(w))
-				mu.Unlock()
-				return nil
-			})
+				var mu sync.Mutex
+				gotPreempted := sets.New[workload.Reference]()
+				scheduler.preemptor.OverrideApply(func(_ context.Context, w *kueue.Workload, _, _ string) error {
+					mu.Lock()
+					gotPreempted.Insert(workload.Key(w))
+					mu.Unlock()
+					return nil
+				})
 
-			ctx, cancel := context.WithTimeout(ctx, queueingTimeout)
-			go qManager.CleanUpOnContext(ctx)
-			defer cancel()
+				ctx, cancel := context.WithTimeout(ctx, queueingTimeout)
+				go qManager.CleanUpOnContext(ctx)
+				defer cancel()
 
-			scheduler.schedule(ctx)
-			wg.Wait()
-			snapshot, err := cqCache.Snapshot(ctx)
-			if err != nil {
-				t.Fatalf("unexpected error while building snapshot: %v", err)
-			}
-			if diff := cmp.Diff(tc.wantPreempted, gotPreempted); diff != "" {
-				t.Errorf("Unexpected preemptions (-want,+got):\n%s", diff)
-			}
-			gotAssignments := make(map[workload.Reference]kueue.Admission)
-			for cqName, c := range snapshot.ClusterQueues() {
-				for name, w := range c.Workloads {
-					if initiallyAdmittedWorkloads.Has(workload.Key(w.Obj)) {
-						continue
-					}
-					switch {
-					case !workload.HasQuotaReservation(w.Obj):
-						t.Fatalf("Workload %s is not admitted by a clusterQueue, but it is found as member of clusterQueue %s in the cache", name, cqName)
-					case w.Obj.Status.Admission.ClusterQueue != cqName:
-						t.Fatalf("Workload %s is admitted by clusterQueue %s, but it is found as member of clusterQueue %s in the cache", name, w.Obj.Status.Admission.ClusterQueue, cqName)
-					default:
-						gotAssignments[name] = *w.Obj.Status.Admission
+				scheduler.schedule(ctx)
+				wg.Wait()
+				snapshot, err := cqCache.Snapshot(ctx)
+				if err != nil {
+					t.Fatalf("unexpected error while building snapshot: %v", err)
+				}
+				if diff := cmp.Diff(tc.wantPreempted, gotPreempted); diff != "" {
+					t.Errorf("Unexpected preemptions (-want,+got):\n%s", diff)
+				}
+				gotAssignments := make(map[workload.Reference]kueue.Admission)
+				for cqName, c := range snapshot.ClusterQueues() {
+					for name, w := range c.Workloads {
+						if initiallyAdmittedWorkloads.Has(workload.Key(w.Obj)) {
+							continue
+						}
+						switch {
+						case !workload.HasQuotaReservation(w.Obj):
+							t.Fatalf("Workload %s is not admitted by a clusterQueue, but it is found as member of clusterQueue %s in the cache", name, cqName)
+						case w.Obj.Status.Admission.ClusterQueue != cqName:
+							t.Fatalf("Workload %s is admitted by clusterQueue %s, but it is found as member of clusterQueue %s in the cache", name, w.Obj.Status.Admission.ClusterQueue, cqName)
+						default:
+							gotAssignments[name] = *w.Obj.Status.Admission
+						}
 					}
 				}
-			}
-			if diff := cmp.Diff(tc.wantNewAssignments, gotAssignments, cmpopts.EquateEmpty()); diff != "" {
-				t.Errorf("Unexpected assigned clusterQueues in cache (-want,+got):\n%s", diff)
-			}
-			qDump := qManager.Dump()
-			if diff := cmp.Diff(tc.wantLeft, qDump, cmpDump...); diff != "" {
-				t.Errorf("Unexpected elements left in the queue (-want,+got):\n%s", diff)
-			}
-			qDumpInadmissible := qManager.DumpInadmissible()
-			if diff := cmp.Diff(tc.wantInadmissibleLeft, qDumpInadmissible, cmpDump...); diff != "" {
-				t.Errorf("Unexpected elements left in inadmissible workloads (-want,+got):\n%s", diff)
-			}
-			if diff := cmp.Diff(tc.wantEvents, recorder.RecordedEvents, tc.eventCmpOpts...); diff != "" {
-				t.Errorf("unexpected events (-want/+got):\n%s", diff)
-			}
-		})
+				if diff := cmp.Diff(tc.wantNewAssignments, gotAssignments, cmpopts.EquateEmpty()); diff != "" {
+					t.Errorf("Unexpected assigned clusterQueues in cache (-want,+got):\n%s", diff)
+				}
+				qDump := qManager.Dump()
+				if diff := cmp.Diff(tc.wantLeft, qDump, cmpDump...); diff != "" {
+					t.Errorf("Unexpected elements left in the queue (-want,+got):\n%s", diff)
+				}
+				qDumpInadmissible := qManager.DumpInadmissible()
+				if diff := cmp.Diff(tc.wantInadmissibleLeft, qDumpInadmissible, cmpDump...); diff != "" {
+					t.Errorf("Unexpected elements left in inadmissible workloads (-want,+got):\n%s", diff)
+				}
+				if diff := cmp.Diff(tc.wantEvents, recorder.RecordedEvents, tc.eventCmpOpts...); diff != "" {
+					t.Errorf("unexpected events (-want/+got):\n%s", diff)
+				}
+			})
+		}
 	}
 }
 
@@ -3883,116 +3897,124 @@ func TestScheduleForTASCohorts(t *testing.T) {
 		},
 	}
 	for name, tc := range cases {
-		t.Run(name, func(t *testing.T) {
-			features.SetFeatureGateDuringTest(t, features.TopologyAwareScheduling, true)
-			ctx, log := utiltesting.ContextWithLog(t)
+		for _, enabled := range []bool{false, true} {
+			t.Run(fmt.Sprintf("%s WorkloadRequestUseMergePatch enabled: %t", name, enabled), func(t *testing.T) {
+				features.SetFeatureGateDuringTest(t, features.WorkloadRequestUseMergePatch, enabled)
+				features.SetFeatureGateDuringTest(t, features.TopologyAwareScheduling, true)
+				ctx, log := utiltesting.ContextWithLog(t)
 
-			clientBuilder := utiltesting.NewClientBuilder().
-				WithLists(
-					&kueue.WorkloadList{Items: tc.workloads},
-					&kueue.TopologyList{Items: tc.topologies},
-					&corev1.PodList{Items: tc.pods},
-					&corev1.NodeList{Items: tc.nodes},
-					&kueue.LocalQueueList{Items: queues}).
-				WithObjects(
-					utiltesting.MakeNamespace("default"),
-				)
-			_ = tasindexer.SetupIndexes(ctx, utiltesting.AsIndexer(clientBuilder))
-			cl := clientBuilder.Build()
-			recorder := &utiltesting.EventRecorder{}
-			cqCache := schdcache.New(cl)
-			qManager := qcache.NewManager(cl, cqCache)
-			topologyByName := slices.ToMap(tc.topologies, func(i int) (kueue.TopologyReference, kueue.Topology) {
-				return kueue.TopologyReference(tc.topologies[i].Name), tc.topologies[i]
-			})
-			for _, flavor := range tc.resourceFlavors {
-				cqCache.AddOrUpdateResourceFlavor(log, &flavor)
-				if flavor.Spec.TopologyName != nil {
-					t := topologyByName[*flavor.Spec.TopologyName]
-					cqCache.AddOrUpdateTopology(log, &t)
-				}
-			}
-			for _, cq := range tc.clusterQueues {
-				if err := cqCache.AddClusterQueue(ctx, &cq); err != nil {
-					t.Fatalf("Inserting clusterQueue %s in cache: %v", cq.Name, err)
+				testWls := make([]kueue.Workload, 0, len(tc.workloads))
+				for _, wl := range tc.workloads {
+					testWls = append(testWls, *wl.DeepCopy())
 				}
-				if err := qManager.AddClusterQueue(ctx, &cq); err != nil {
-					t.Fatalf("Inserting clusterQueue %s in manager: %v", cq.Name, err)
+				clientBuilder := utiltesting.NewClientBuilder().
+					WithLists(
+						&kueue.WorkloadList{Items: testWls},
+						&kueue.TopologyList{Items: tc.topologies},
+						&corev1.PodList{Items: tc.pods},
+						&corev1.NodeList{Items: tc.nodes},
+						&kueue.LocalQueueList{Items: queues}).
+					WithObjects(
+						utiltesting.MakeNamespace("default"),
+					).
+					WithStatusSubresource(&kueue.Workload{})
+				_ = tasindexer.SetupIndexes(ctx, utiltesting.AsIndexer(clientBuilder))
+				cl := clientBuilder.Build()
+				recorder := &utiltesting.EventRecorder{}
+				cqCache := schdcache.New(cl)
+				qManager := qcache.NewManager(cl, cqCache)
+				topologyByName := slices.ToMap(tc.topologies, func(i int) (kueue.TopologyReference, kueue.Topology) {
+					return kueue.TopologyReference(tc.topologies[i].Name), tc.topologies[i]
+				})
+				for _, flavor := range tc.resourceFlavors {
+					cqCache.AddOrUpdateResourceFlavor(log, &flavor)
+					if flavor.Spec.TopologyName != nil {
+						t := topologyByName[*flavor.Spec.TopologyName]
+						cqCache.AddOrUpdateTopology(log, &t)
+					}
 				}
-				if err := cl.Create(ctx, &cq); err != nil {
-					t.Fatalf("couldn't create the cluster queue: %v", err)
+				for _, cq := range tc.clusterQueues {
+					if err := cqCache.AddClusterQueue(ctx, &cq); err != nil {
+						t.Fatalf("Inserting clusterQueue %s in cache: %v", cq.Name, err)
+					}
+					if err := qManager.AddClusterQueue(ctx, &cq); err != nil {
+						t.Fatalf("Inserting clusterQueue %s in manager: %v", cq.Name, err)
+					}
+					if err := cl.Create(ctx, &cq); err != nil {
+						t.Fatalf("couldn't create the cluster queue: %v", err)
+					}
 				}
-			}
-			for _, q := range queues {
-				if err := qManager.AddLocalQueue(ctx, &q); err != nil {
-					t.Fatalf("Inserting queue %s/%s in manager: %v", q.Namespace, q.Name, err)
+				for _, q := range queues {
+					if err := qManager.AddLocalQueue(ctx, &q); err != nil {
+						t.Fatalf("Inserting queue %s/%s in manager: %v", q.Namespace, q.Name, err)
+					}
 				}
-			}
-			initiallyAdmittedWorkloads := sets.New[workload.Reference]()
-			for _, w := range tc.workloads {
-				if workload.IsAdmitted(&w) {
-					initiallyAdmittedWorkloads.Insert(workload.Key(&w))
+				initiallyAdmittedWorkloads := sets.New[workload.Reference]()
+				for _, w := range testWls {
+					if workload.IsAdmitted(&w) {
+						initiallyAdmittedWorkloads.Insert(workload.Key(&w))
+					}
 				}
-			}
-			scheduler := New(qManager, cqCache, cl, recorder)
-			wg := sync.WaitGroup{}
-			scheduler.setAdmissionRoutineWrapper(routine.NewWrapper(
-				func() { wg.Add(1) },
-				func() { wg.Done() },
-			))
+				scheduler := New(qManager, cqCache, cl, recorder)
+				wg := sync.WaitGroup{}
+				scheduler.setAdmissionRoutineWrapper(routine.NewWrapper(
+					func() { wg.Add(1) },
+					func() { wg.Done() },
+				))
 
-			var mu sync.Mutex
-			gotPreempted := sets.New[workload.Reference]()
-			scheduler.preemptor.OverrideApply(func(_ context.Context, w *kueue.Workload, _, _ string) error {
-				mu.Lock()
-				gotPreempted.Insert(workload.Key(w))
-				mu.Unlock()
-				return nil
-			})
+				var mu sync.Mutex
+				gotPreempted := sets.New[workload.Reference]()
+				scheduler.preemptor.OverrideApply(func(_ context.Context, w *kueue.Workload, _, _ string) error {
+					mu.Lock()
+					gotPreempted.Insert(workload.Key(w))
+					mu.Unlock()
+					return nil
+				})
 
-			ctx, cancel := context.WithTimeout(ctx, queueingTimeout)
-			go qManager.CleanUpOnContext(ctx)
-			defer cancel()
+				ctx, cancel := context.WithTimeout(ctx, queueingTimeout)
+				go qManager.CleanUpOnContext(ctx)
+				defer cancel()
 
-			scheduler.schedule(ctx)
-			wg.Wait()
-			snapshot, err := cqCache.Snapshot(ctx)
-			if err != nil {
-				t.Fatalf("unexpected error while building snapshot: %v", err)
-			}
-			if diff := cmp.Diff(tc.wantPreempted, gotPreempted); diff != "" {
-				t.Errorf("Unexpected preemptions (-want,+got):\n%s", diff)
-			}
-			gotAssignments := make(map[workload.Reference]kueue.Admission)
-			for cqName, c := range snapshot.ClusterQueues() {
-				for name, w := range c.Workloads {
-					if initiallyAdmittedWorkloads.Has(workload.Key(w.Obj)) {
-						continue
-					}
-					switch {
-					case !workload.HasQuotaReservation(w.Obj):
-						t.Fatalf("Workload %s is not admitted by a clusterQueue, but it is found as member of clusterQueue %s in the cache", name, cqName)
-					case w.Obj.Status.Admission.ClusterQueue != cqName:
-						t.Fatalf("Workload %s is admitted by clusterQueue %s, but it is found as member of clusterQueue %s in the cache", name, w.Obj.Status.Admission.ClusterQueue, cqName)
-					default:
-						gotAssignments[name] = *w.Obj.Status.Admission
+				scheduler.schedule(ctx)
+				wg.Wait()
+				snapshot, err := cqCache.Snapshot(ctx)
+				if err != nil {
+					t.Fatalf("unexpected error while building snapshot: %v", err)
+				}
+				if diff := cmp.Diff(tc.wantPreempted, gotPreempted); diff != "" {
+					t.Errorf("Unexpected preemptions (-want,+got):\n%s", diff)
+				}
+				gotAssignments := make(map[workload.Reference]kueue.Admission)
+				for cqName, c := range snapshot.ClusterQueues() {
+					for name, w := range c.Workloads {
+						if initiallyAdmittedWorkloads.Has(workload.Key(w.Obj)) {
+							continue
+						}
+						switch {
+						case !workload.HasQuotaReservation(w.Obj):
+							t.Fatalf("Workload %s is not admitted by a clusterQueue, but it is found as member of clusterQueue %s in the cache", name, cqName)
+						case w.Obj.Status.Admission.ClusterQueue != cqName:
+							t.Fatalf("Workload %s is admitted by clusterQueue %s, but it is found as member of clusterQueue %s in the cache", name, w.Obj.Status.Admission.ClusterQueue, cqName)
+						default:
+							gotAssignments[name] = *w.Obj.Status.Admission
+						}
 					}
 				}
-			}
-			if diff := cmp.Diff(tc.wantNewAssignments, gotAssignments, cmpopts.EquateEmpty()); diff != "" {
-				t.Errorf("Unexpected assigned clusterQueues in cache (-want,+got):\n%s", diff)
-			}
-			qDump := qManager.Dump()
-			if diff := cmp.Diff(tc.wantLeft, qDump, cmpDump...); diff != "" {
-				t.Errorf("Unexpected elements left in the queue (-want,+got):\n%s", diff)
-			}
-			qDumpInadmissible := qManager.DumpInadmissible()
-			if diff := cmp.Diff(tc.wantInadmissibleLeft, qDumpInadmissible, cmpDump...); diff != "" {
-				t.Errorf("Unexpected elements left in inadmissible workloads (-want,+got):\n%s", diff)
-			}
-			if diff := cmp.Diff(tc.wantEvents, recorder.RecordedEvents, append(tc.eventCmpOpts, cmpopts.SortSlices(utiltesting.SortEvents))...); diff != "" {
-				t.Errorf("unexpected events (-want/+got):\n%s", diff)
-			}
-		})
+				if diff := cmp.Diff(tc.wantNewAssignments, gotAssignments, cmpopts.EquateEmpty()); diff != "" {
+					t.Errorf("Unexpected assigned clusterQueues in cache (-want,+got):\n%s", diff)
+				}
+				qDump := qManager.Dump()
+				if diff := cmp.Diff(tc.wantLeft, qDump, cmpDump...); diff != "" {
+					t.Errorf("Unexpected elements left in the queue (-want,+got):\n%s", diff)
+				}
+				qDumpInadmissible := qManager.DumpInadmissible()
+				if diff := cmp.Diff(tc.wantInadmissibleLeft, qDumpInadmissible, cmpDump...); diff != "" {
+					t.Errorf("Unexpected elements left in inadmissible workloads (-want,+got):\n%s", diff)
+				}
+				if diff := cmp.Diff(tc.wantEvents, recorder.RecordedEvents, append(tc.eventCmpOpts, cmpopts.SortSlices(utiltesting.SortEvents))...); diff != "" {
+					t.Errorf("unexpected events (-want/+got):\n%s", diff)
+				}
+			})
+		}
 	}
 }
diff --git a/pkg/scheduler/scheduler_test.go b/pkg/scheduler/scheduler_test.go
index 599a29a68..681a67c76 100644
--- a/pkg/scheduler/scheduler_test.go
+++ b/pkg/scheduler/scheduler_test.go
@@ -6939,170 +6939,173 @@ func TestSchedule(t *testing.T) {
 		},
 	}
 	for name, tc := range cases {
-		t.Run(name, func(t *testing.T) {
-			metrics.AdmissionCyclePreemptionSkips.Reset()
-			if tc.disableLendingLimit {
-				features.SetFeatureGateDuringTest(t, features.LendingLimit, false)
-			}
-			if tc.disablePartialAdmission {
-				features.SetFeatureGateDuringTest(t, features.PartialAdmission, false)
-			}
-			features.SetFeatureGateDuringTest(t, features.ElasticJobsViaWorkloadSlices, tc.enableElasticJobsViaWorkloadSlice)
-			features.SetFeatureGateDuringTest(t, features.FlavorFungibilityImplicitPreferenceDefault, tc.flavorFungibilityImplicitPreferenceDefault)
+		for _, enabled := range []bool{false, true} {
+			t.Run(fmt.Sprintf("%s WorkloadRequestUseMergePatch enabled: %t", name, enabled), func(t *testing.T) {
+				features.SetFeatureGateDuringTest(t, features.WorkloadRequestUseMergePatch, enabled)
+				metrics.AdmissionCyclePreemptionSkips.Reset()
+				if tc.disableLendingLimit {
+					features.SetFeatureGateDuringTest(t, features.LendingLimit, false)
+				}
+				if tc.disablePartialAdmission {
+					features.SetFeatureGateDuringTest(t, features.PartialAdmission, false)
+				}
+				features.SetFeatureGateDuringTest(t, features.ElasticJobsViaWorkloadSlices, tc.enableElasticJobsViaWorkloadSlice)
+				features.SetFeatureGateDuringTest(t, features.FlavorFungibilityImplicitPreferenceDefault, tc.flavorFungibilityImplicitPreferenceDefault)
 
-			ctx, log := utiltesting.ContextWithLog(t)
+				ctx, log := utiltesting.ContextWithLog(t)
 
-			allQueues := append(queues, tc.additionalLocalQueues...)
-			allClusterQueues := append(clusterQueues, tc.additionalClusterQueues...)
+				allQueues := append(queues, tc.additionalLocalQueues...)
+				allClusterQueues := append(clusterQueues, tc.additionalClusterQueues...)
 
-			clientBuilder := utiltesting.NewClientBuilder().
-				WithLists(&kueue.WorkloadList{Items: tc.workloads}, &kueue.LocalQueueList{Items: allQueues}).
-				WithObjects(append(
-					[]client.Object{
-						utiltesting.MakeNamespaceWrapper("default").Obj(),
-						utiltesting.MakeNamespaceWrapper("eng-alpha").Label("dep", "eng").Obj(),
-						utiltesting.MakeNamespaceWrapper("eng-beta").Label("dep", "eng").Obj(),
-						utiltesting.MakeNamespaceWrapper("eng-gamma").Label("dep", "eng").Obj(),
-						utiltesting.MakeNamespaceWrapper("sales").Label("dep", "sales").Obj(),
-						utiltesting.MakeNamespaceWrapper("lend").Label("dep", "lend").Obj(),
-					}, tc.objects...,
-				)...).
-				WithStatusSubresource(&kueue.Workload{}).
-				WithInterceptorFuncs(interceptor.Funcs{
-					SubResourcePatch: func(ctx context.Context, client client.Client, subResourceName string, obj client.Object, patch client.Patch, opts ...client.SubResourcePatchOption) error {
-						if _, ok := obj.(*kueue.Workload); ok && subResourceName == "status" && tc.admissionError != nil {
-							return tc.admissionError
-						}
-						return utiltesting.TreatSSAAsStrategicMerge(ctx, client, subResourceName, obj, patch, opts...)
-					},
-				})
+				clientBuilder := utiltesting.NewClientBuilder().
+					WithLists(&kueue.WorkloadList{Items: tc.workloads}, &kueue.LocalQueueList{Items: allQueues}).
+					WithObjects(append(
+						[]client.Object{
+							utiltesting.MakeNamespaceWrapper("default").Obj(),
+							utiltesting.MakeNamespaceWrapper("eng-alpha").Label("dep", "eng").Obj(),
+							utiltesting.MakeNamespaceWrapper("eng-beta").Label("dep", "eng").Obj(),
+							utiltesting.MakeNamespaceWrapper("eng-gamma").Label("dep", "eng").Obj(),
+							utiltesting.MakeNamespaceWrapper("sales").Label("dep", "sales").Obj(),
+							utiltesting.MakeNamespaceWrapper("lend").Label("dep", "lend").Obj(),
+						}, tc.objects...,
+					)...).
+					WithStatusSubresource(&kueue.Workload{}).
+					WithInterceptorFuncs(interceptor.Funcs{
+						SubResourcePatch: func(ctx context.Context, client client.Client, subResourceName string, obj client.Object, patch client.Patch, opts ...client.SubResourcePatchOption) error {
+							if _, ok := obj.(*kueue.Workload); ok && subResourceName == "status" && tc.admissionError != nil {
+								return tc.admissionError
+							}
+							return utiltesting.TreatSSAAsStrategicMerge(ctx, client, subResourceName, obj, patch, opts...)
+						},
+					})
 
-			cl := clientBuilder.Build()
-			recorder := &utiltesting.EventRecorder{}
-			cqCache := schdcache.New(cl)
-			qManager := qcache.NewManager(cl, cqCache)
-			// Workloads are loaded into queues or clusterQueues as we add them.
-			for _, q := range allQueues {
-				if err := qManager.AddLocalQueue(ctx, &q); err != nil {
-					t.Fatalf("Inserting queue %s/%s in manager: %v", q.Namespace, q.Name, err)
-				}
-			}
-			for i := range resourceFlavors {
-				cqCache.AddOrUpdateResourceFlavor(log, resourceFlavors[i])
-			}
-			for _, cq := range allClusterQueues {
-				if err := cqCache.AddClusterQueue(ctx, &cq); err != nil {
-					t.Fatalf("Inserting clusterQueue %s in cache: %v", cq.Name, err)
+				cl := clientBuilder.Build()
+				recorder := &utiltesting.EventRecorder{}
+				cqCache := schdcache.New(cl)
+				qManager := qcache.NewManager(cl, cqCache)
+				// Workloads are loaded into queues or clusterQueues as we add them.
+				for _, q := range allQueues {
+					if err := qManager.AddLocalQueue(ctx, &q); err != nil {
+						t.Fatalf("Inserting queue %s/%s in manager: %v", q.Namespace, q.Name, err)
+					}
 				}
-				if err := qManager.AddClusterQueue(ctx, &cq); err != nil {
-					t.Fatalf("Inserting clusterQueue %s in manager: %v", cq.Name, err)
+				for i := range resourceFlavors {
+					cqCache.AddOrUpdateResourceFlavor(log, resourceFlavors[i])
 				}
-				if err := cl.Create(ctx, &cq); err != nil {
-					t.Errorf("couldn't create the cluster queue: %v", err)
+				for _, cq := range allClusterQueues {
+					if err := cqCache.AddClusterQueue(ctx, &cq); err != nil {
+						t.Fatalf("Inserting clusterQueue %s in cache: %v", cq.Name, err)
+					}
+					if err := qManager.AddClusterQueue(ctx, &cq); err != nil {
+						t.Fatalf("Inserting clusterQueue %s in manager: %v", cq.Name, err)
+					}
+					if err := cl.Create(ctx, &cq); err != nil {
+						t.Errorf("couldn't create the cluster queue: %v", err)
+					}
 				}
-			}
 
-			for _, cohort := range tc.cohorts {
-				if err := cqCache.AddOrUpdateCohort(&cohort); err != nil {
-					t.Fatalf("Inserting Cohort %s in cache: %v", cohort.Name, err)
+				for _, cohort := range tc.cohorts {
+					if err := cqCache.AddOrUpdateCohort(&cohort); err != nil {
+						t.Fatalf("Inserting Cohort %s in cache: %v", cohort.Name, err)
+					}
 				}
-			}
 
-			scheduler := New(qManager, cqCache, cl, recorder, WithFairSharing(&config.FairSharing{Enable: tc.enableFairSharing}), WithClock(t, fakeClock))
-			wg := sync.WaitGroup{}
-			scheduler.setAdmissionRoutineWrapper(routine.NewWrapper(
-				func() { wg.Add(1) },
-				func() { wg.Done() },
-			))
+				scheduler := New(qManager, cqCache, cl, recorder, WithFairSharing(&config.FairSharing{Enable: tc.enableFairSharing}), WithClock(t, fakeClock))
+				wg := sync.WaitGroup{}
+				scheduler.setAdmissionRoutineWrapper(routine.NewWrapper(
+					func() { wg.Add(1) },
+					func() { wg.Done() },
+				))
 
-			var mu sync.Mutex
-			gotPreempted := sets.New[workload.Reference]()
-			scheduler.preemptor.OverrideApply(func(_ context.Context, w *kueue.Workload, _, _ string) error {
-				mu.Lock()
-				gotPreempted.Insert(workload.Key(w))
-				mu.Unlock()
-				return nil
-			})
+				var mu sync.Mutex
+				gotPreempted := sets.New[workload.Reference]()
+				scheduler.preemptor.OverrideApply(func(_ context.Context, w *kueue.Workload, _, _ string) error {
+					mu.Lock()
+					gotPreempted.Insert(workload.Key(w))
+					mu.Unlock()
+					return nil
+				})
 
-			ctx, cancel := context.WithTimeout(ctx, queueingTimeout)
-			go qManager.CleanUpOnContext(ctx)
-			defer cancel()
+				ctx, cancel := context.WithTimeout(ctx, queueingTimeout)
+				go qManager.CleanUpOnContext(ctx)
+				defer cancel()
 
-			scheduler.schedule(ctx)
-			wg.Wait()
+				scheduler.schedule(ctx)
+				wg.Wait()
 
-			if diff := cmp.Diff(tc.wantPreempted, gotPreempted); diff != "" {
-				t.Errorf("Unexpected preemptions (-want,+got):\n%s", diff)
-			}
+				if diff := cmp.Diff(tc.wantPreempted, gotPreempted); diff != "" {
+					t.Errorf("Unexpected preemptions (-want,+got):\n%s", diff)
+				}
 
-			// Verify assignments in cache.
-			gotAssignments := make(map[workload.Reference]kueue.Admission)
-			snapshot, err := cqCache.Snapshot(ctx)
-			if err != nil {
-				t.Fatalf("unexpected error while building snapshot: %v", err)
-			}
-			for cqName, c := range snapshot.ClusterQueues() {
-				for name, w := range c.Workloads {
-					switch {
-					case !workload.HasQuotaReservation(w.Obj):
-						t.Errorf("Workload %s is not admitted by a clusterQueue, but it is found as member of clusterQueue %s in the cache", name, cqName)
-					case w.Obj.Status.Admission.ClusterQueue != cqName:
-						t.Errorf("Workload %s is admitted by clusterQueue %s, but it is found as member of clusterQueue %s in the cache", name, w.Obj.Status.Admission.ClusterQueue, cqName)
-					default:
-						gotAssignments[name] = *w.Obj.Status.Admission
+				// Verify assignments in cache.
+				gotAssignments := make(map[workload.Reference]kueue.Admission)
+				snapshot, err := cqCache.Snapshot(ctx)
+				if err != nil {
+					t.Fatalf("unexpected error while building snapshot: %v", err)
+				}
+				for cqName, c := range snapshot.ClusterQueues() {
+					for name, w := range c.Workloads {
+						switch {
+						case !workload.HasQuotaReservation(w.Obj):
+							t.Errorf("Workload %s is not admitted by a clusterQueue, but it is found as member of clusterQueue %s in the cache", name, cqName)
+						case w.Obj.Status.Admission.ClusterQueue != cqName:
+							t.Errorf("Workload %s is admitted by clusterQueue %s, but it is found as member of clusterQueue %s in the cache", name, w.Obj.Status.Admission.ClusterQueue, cqName)
+						default:
+							gotAssignments[name] = *w.Obj.Status.Admission
+						}
 					}
 				}
-			}
 
-			gotWorkloads := &kueue.WorkloadList{}
-			err = cl.List(ctx, gotWorkloads)
-			if err != nil {
-				t.Fatalf("Unexpected list workloads error: %v", err)
-			}
-
-			defaultWorkloadCmpOpts := cmp.Options{
-				cmpopts.EquateEmpty(),
-				cmpopts.IgnoreFields(kueue.AdmissionCheckState{}, "LastTransitionTime"),
-				cmpopts.IgnoreFields(kueue.Workload{}, "ObjectMeta.ResourceVersion", "ObjectMeta.CreationTimestamp"),
-			}
+				gotWorkloads := &kueue.WorkloadList{}
+				err = cl.List(ctx, gotWorkloads)
+				if err != nil {
+					t.Fatalf("Unexpected list workloads error: %v", err)
+				}
 
-			if diff := cmp.Diff(tc.wantWorkloads, gotWorkloads.Items, defaultWorkloadCmpOpts); diff != "" {
-				t.Errorf("Unexpected workloads (-want,+got):\n%s", diff)
-			}
+				defaultWorkloadCmpOpts := cmp.Options{
+					cmpopts.EquateEmpty(),
+					cmpopts.IgnoreFields(kueue.AdmissionCheckState{}, "LastTransitionTime"),
+					cmpopts.IgnoreFields(kueue.Workload{}, "ObjectMeta.ResourceVersion", "ObjectMeta.CreationTimestamp"),
+				}
 
-			if len(gotAssignments) == 0 {
-				gotAssignments = nil
-			}
-			if diff := cmp.Diff(tc.wantAssignments, gotAssignments); diff != "" {
-				t.Errorf("Unexpected assigned clusterQueues in cache (-want,+got):\n%s", diff)
-			}
+				if diff := cmp.Diff(tc.wantWorkloads, gotWorkloads.Items, defaultWorkloadCmpOpts); diff != "" {
+					t.Errorf("Unexpected workloads (-want,+got):\n%s", diff)
+				}
 
-			qDump := qManager.Dump()
-			if diff := cmp.Diff(tc.wantLeft, qDump, cmpDump...); diff != "" {
-				t.Errorf("Unexpected elements left in the queue (-want,+got):\n%s", diff)
-			}
-			qDumpInadmissible := qManager.DumpInadmissible()
-			if diff := cmp.Diff(tc.wantInadmissibleLeft, qDumpInadmissible, cmpDump...); diff != "" {
-				t.Errorf("Unexpected elements left in inadmissible workloads (-want,+got):\n%s", diff)
-			}
+				if len(gotAssignments) == 0 {
+					gotAssignments = nil
+				}
+				if diff := cmp.Diff(tc.wantAssignments, gotAssignments); diff != "" {
+					t.Errorf("Unexpected assigned clusterQueues in cache (-want,+got):\n%s", diff)
+				}
 
-			if len(tc.wantEvents) > 0 {
-				if diff := cmp.Diff(tc.wantEvents, recorder.RecordedEvents, tc.eventCmpOpts...); diff != "" {
-					t.Errorf("unexpected events (-want/+got):\n%s", diff)
+				qDump := qManager.Dump()
+				if diff := cmp.Diff(tc.wantLeft, qDump, cmpDump...); diff != "" {
+					t.Errorf("Unexpected elements left in the queue (-want,+got):\n%s", diff)
+				}
+				qDumpInadmissible := qManager.DumpInadmissible()
+				if diff := cmp.Diff(tc.wantInadmissibleLeft, qDumpInadmissible, cmpDump...); diff != "" {
+					t.Errorf("Unexpected elements left in inadmissible workloads (-want,+got):\n%s", diff)
 				}
-			}
 
-			for cqName, want := range tc.wantSkippedPreemptions {
-				val, err := testutil.GetGaugeMetricValue(metrics.AdmissionCyclePreemptionSkips.WithLabelValues(cqName))
-				if err != nil {
-					t.Fatalf("Couldn't get value for metric admission_cycle_preemption_skips for %q: %v", cqName, err)
+				if len(tc.wantEvents) > 0 {
+					if diff := cmp.Diff(tc.wantEvents, recorder.RecordedEvents, tc.eventCmpOpts...); diff != "" {
+						t.Errorf("unexpected events (-want/+got):\n%s", diff)
+					}
 				}
-				got := int(val)
-				if want != got {
-					t.Errorf("Counted %d skips for %q, want %d", got, cqName, want)
+
+				for cqName, want := range tc.wantSkippedPreemptions {
+					val, err := testutil.GetGaugeMetricValue(metrics.AdmissionCyclePreemptionSkips.WithLabelValues(cqName))
+					if err != nil {
+						t.Fatalf("Couldn't get value for metric admission_cycle_preemption_skips for %q: %v", cqName, err)
+					}
+					got := int(val)
+					if want != got {
+						t.Errorf("Counted %d skips for %q, want %d", got, cqName, want)
+					}
 				}
-			}
-		})
+			})
+		}
 	}
 }
 
@@ -8194,6 +8197,12 @@ func TestLastSchedulingContext(t *testing.T) {
 				scheduler.schedule(ctx)
 				wg.Wait()
 
+				if features.Enabled(features.WorkloadRequestUseMergePatch) {
+					// Schedule again to ensure all workloads are admitted, as with MergePatch we enforce stricter patching.
+					scheduler.schedule(ctx)
+					wg.Wait()
+				}
+
 				if diff := cmp.Diff(tc.wantPreempted, gotPreempted); diff != "" {
 					t.Errorf("Unexpected preemptions (-want,+got):\n%s", diff)
 				}
diff --git a/pkg/util/orderedgroups/ordered_groups_test.go b/pkg/util/orderedgroups/ordered_groups_test.go
new file mode 100644
index 000000000..405475436
--- /dev/null
+++ b/pkg/util/orderedgroups/ordered_groups_test.go
@@ -0,0 +1,111 @@
+/*
+Copyright The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package orderedgroups
+
+import (
+	"testing"
+
+	"github.com/google/go-cmp/cmp"
+)
+
+func TestInsert(t *testing.T) {
+	cases := map[string]struct {
+		initialGroups *OrderedGroups[string, int]
+		newKey        string
+		newVal        int
+		wantGroups    *OrderedGroups[string, int]
+	}{
+		"tracks order of a newly inserted group": {
+			initialGroups: &OrderedGroups[string, int]{
+				groups:         make(map[string][]int),
+				insertionOrder: make([]string, 0),
+			},
+			newKey: "newgroup",
+			newVal: 10,
+			wantGroups: &OrderedGroups[string, int]{
+				groups:         map[string][]int{"newgroup": {10}},
+				insertionOrder: []string{"newgroup"},
+			},
+		},
+		"tracks a newly inserted group": {
+			initialGroups: &OrderedGroups[string, int]{
+				groups:         make(map[string][]int),
+				insertionOrder: make([]string, 0),
+			},
+			newKey: "newgroup",
+			newVal: 10,
+			wantGroups: &OrderedGroups[string, int]{
+				groups:         map[string][]int{"newgroup": {10}},
+				insertionOrder: []string{"newgroup"},
+			},
+		},
+		"appends to an existing group": {
+			initialGroups: &OrderedGroups[string, int]{
+				groups:         map[string][]int{"oldgroup": {10}},
+				insertionOrder: []string{"oldgroup"},
+			},
+			newKey: "oldgroup",
+			newVal: 20,
+			wantGroups: &OrderedGroups[string, int]{
+				groups:         map[string][]int{"oldgroup": {10, 20}},
+				insertionOrder: []string{"oldgroup"},
+			},
+		},
+	}
+	for name, tc := range cases {
+		t.Run(name, func(t *testing.T) {
+			groups := tc.initialGroups
+			groups.Insert(tc.newKey, tc.newVal)
+			if diff := cmp.Diff(tc.wantGroups, groups, cmp.AllowUnexported(OrderedGroups[string, int]{})); diff != "" {
+				t.Errorf("Processed result (-want,+got):\n%s", diff)
+			}
+		})
+	}
+}
+
+func TestInOrder(t *testing.T) {
+	cases := map[string]struct {
+		groups    *OrderedGroups[string, int]
+		wantOrder [][]int
+	}{
+		"handles no groups": {
+			groups: &OrderedGroups[string, int]{
+				groups:         make(map[string][]int),
+				insertionOrder: make([]string, 0),
+			},
+			wantOrder: make([][]int, 0),
+		},
+		"returns groups in order of insertion": {
+			groups: &OrderedGroups[string, int]{
+				groups:         map[string][]int{"second": {2, 2}, "first": {1, 1}, "third": {3, 3}},
+				insertionOrder: []string{"first", "second", "third"},
+			},
+			wantOrder: [][]int{{1, 1}, {2, 2}, {3, 3}},
+		},
+	}
+	for name, tc := range cases {
+		t.Run(name, func(t *testing.T) {
+			ordering := make([][]int, 0, len(tc.groups.insertionOrder))
+			for _, group := range tc.groups.InOrder {
+				ordering = append(ordering, group)
+			}
+			if diff := cmp.Diff(tc.wantOrder, ordering, cmp.AllowUnexported(OrderedGroups[string, int]{})); diff != "" {
+				t.Errorf("Processed result (-want,+got):\n%s", diff)
+			}
+		})
+	}
+}
diff --git a/pkg/util/testing/condition_matchers.go b/pkg/util/testing/condition_matchers.go
index 6a3e8dad1..74bddf520 100644
--- a/pkg/util/testing/condition_matchers.go
+++ b/pkg/util/testing/condition_matchers.go
@@ -70,7 +70,7 @@ type conditionMatcher struct {
 func (matcher *conditionMatcher) Match(actual any) (bool, error) {
 	conditions, ok := actual.([]metav1.Condition)
 	if !ok {
-		return false, fmt.Errorf("Condition matcher expects a []metav1.Condition. Got:\n%s", format.Object(actual, 1))
+		return false, fmt.Errorf("condition matcher expects a []metav1.Condition. Got:\n%s", format.Object(actual, 1))
 	}
 
 	found := apimeta.FindStatusCondition(conditions, matcher.conditionType)
diff --git a/pkg/util/testing/condition_matchers_test.go b/pkg/util/testing/condition_matchers_test.go
index 6bf5632bb..e88721476 100644
--- a/pkg/util/testing/condition_matchers_test.go
+++ b/pkg/util/testing/condition_matchers_test.go
@@ -38,7 +38,7 @@ func TestHaveConditionStatusAndReason(t *testing.T) {
 			conditionType: "TestCondition",
 			conditions:    "invalid type",
 			want:          false,
-			wantErr:       "Condition matcher expects a []metav1.Condition. Got:\n    <string>: invalid type",
+			wantErr:       "condition matcher expects a []metav1.Condition. Got:\n    <string>: invalid type",
 		},
 		"success": {
 			conditionType: "TestCondition",
diff --git a/pkg/util/testing/defaults.go b/pkg/util/testing/defaults.go
index af6e5b0fb..eb83349de 100644
--- a/pkg/util/testing/defaults.go
+++ b/pkg/util/testing/defaults.go
@@ -21,7 +21,7 @@ import (
 
 	corev1 "k8s.io/api/core/v1"
 
-	kueuealpha "sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 )
 
 const (
@@ -30,21 +30,21 @@ const (
 )
 
 // MakeDefaultOneLevelTopology creates a default topology with hostname level.
-func MakeDefaultOneLevelTopology(name string) *kueuealpha.Topology {
+func MakeDefaultOneLevelTopology(name string) *kueue.Topology {
 	return MakeTopology(name).
 		Levels(corev1.LabelHostname).
 		Obj()
 }
 
 // MakeDefaultTwoLevelTopology creates a default topology with block and rack levels.
-func MakeDefaultTwoLevelTopology(name string) *kueuealpha.Topology {
+func MakeDefaultTwoLevelTopology(name string) *kueue.Topology {
 	return MakeTopology(name).
 		Levels(DefaultBlockTopologyLevel, DefaultRackTopologyLevel).
 		Obj()
 }
 
 // MakeDefaultThreeLevelTopology creates a default topology with block, rack and hostname levels.
-func MakeDefaultThreeLevelTopology(name string) *kueuealpha.Topology {
+func MakeDefaultThreeLevelTopology(name string) *kueue.Topology {
 	return MakeTopology(name).
 		Levels(DefaultBlockTopologyLevel, DefaultRackTopologyLevel, corev1.LabelHostname).
 		Obj()
diff --git a/pkg/util/testingjobs/statefulset/wrappers.go b/pkg/util/testingjobs/statefulset/wrappers.go
index 298d80de6..645b62283 100644
--- a/pkg/util/testingjobs/statefulset/wrappers.go
+++ b/pkg/util/testingjobs/statefulset/wrappers.go
@@ -27,7 +27,7 @@ import (
 	"k8s.io/apimachinery/pkg/types"
 	"k8s.io/utils/ptr"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/pkg/constants"
 	controllerconstants "sigs.k8s.io/kueue/pkg/controller/constants"
 	"sigs.k8s.io/kueue/pkg/controller/jobframework"
@@ -199,7 +199,7 @@ func (ss *StatefulSetWrapper) PodTemplateSpecPodGroupServingAnnotation() *Statef
 }
 
 func (ss *StatefulSetWrapper) PodTemplateSpecPodGroupPodIndexLabelAnnotation(labelName string) *StatefulSetWrapper {
-	return ss.PodTemplateSpecAnnotation(v1beta1.PodGroupPodIndexLabelAnnotation, labelName)
+	return ss.PodTemplateSpecAnnotation(kueue.PodGroupPodIndexLabelAnnotation, labelName)
 }
 
 func (ss *StatefulSetWrapper) Image(image string, args []string) *StatefulSetWrapper {
diff --git a/pkg/util/wait/backoff_test.go b/pkg/util/wait/backoff_test.go
index 9a1ae05f7..bafb13ef7 100644
--- a/pkg/util/wait/backoff_test.go
+++ b/pkg/util/wait/backoff_test.go
@@ -18,6 +18,7 @@ package wait
 
 import (
 	"context"
+	"math"
 	"testing"
 	"time"
 
@@ -112,3 +113,97 @@ func TestUntilWithBackoff(t *testing.T) {
 		})
 	}
 }
+
+func TestBackoff_WaitTime(t *testing.T) {
+	testCases := []struct {
+		name      string
+		backoff   Backoff
+		iteration int
+		want      time.Duration
+	}{
+		{
+			name:      "iteration zero returns zero",
+			backoff:   NewBackoff(time.Millisecond, time.Second, 2, 0),
+			iteration: 0,
+			want:      0,
+		},
+		{
+			name:      "negative iteration returns zero",
+			backoff:   NewBackoff(time.Millisecond, time.Second, 2, 0),
+			iteration: -3,
+			want:      0,
+		},
+		{
+			name:      "simple exponential (factor=2)",
+			backoff:   NewBackoff(time.Millisecond, time.Second, 2, 0),
+			iteration: 4, // steps: 1ms, 2ms, 4ms, 8ms
+			want:      8 * time.Millisecond,
+		},
+		{
+			name:      "caps at limit",
+			backoff:   NewBackoff(time.Second, 5*time.Second, 2, 0),
+			iteration: 4, // steps: 1s, 2s, 4s, 8s, -> cap 5s
+			want:      5 * time.Second,
+		},
+		{
+			name:      "very large iteration still returns cap",
+			backoff:   NewBackoff(time.Millisecond, time.Second, 2, 0),
+			iteration: 1000,
+			want:      time.Second,
+		},
+		{
+			name:      "very large iteration, no cap",
+			backoff:   NewBackoff(time.Millisecond, 0, 3, 0),
+			iteration: 1000,
+			want:      time.Duration(math.MaxInt64 / math.Ceil(3)),
+		},
+	}
+
+	for _, tc := range testCases {
+		t.Run(tc.name, func(t *testing.T) {
+			if diff := cmp.Diff(tc.want, tc.backoff.WaitTime(tc.iteration)); diff != "" {
+				t.Errorf("Unexpected wait time returned (-want,+got):\n%s", diff)
+			}
+		})
+	}
+}
+
+func TestBackoff_WaitTime_Consecutive(t *testing.T) {
+	testCases := []struct {
+		name       string
+		backoff    Backoff
+		iterations []int
+		want       []time.Duration
+	}{
+		{
+			name:       "two subsequent calls",
+			backoff:    NewBackoff(time.Millisecond, time.Second, 2, 0),
+			iterations: []int{1, 2},
+			want:       []time.Duration{time.Millisecond, 2 * time.Millisecond},
+		},
+		{
+			name:       "reset after first call",
+			backoff:    NewBackoff(time.Millisecond, time.Second, 2, 0),
+			iterations: []int{5, 1},
+			want:       []time.Duration{16 * time.Millisecond, time.Millisecond},
+		},
+		{
+			name:       "series of same calls",
+			backoff:    NewBackoff(time.Millisecond, time.Second, 2, 0),
+			iterations: []int{5, 5, 5, 5},
+			want:       []time.Duration{16 * time.Millisecond, 16 * time.Millisecond, 16 * time.Millisecond, 16 * time.Millisecond},
+		},
+	}
+
+	for _, tc := range testCases {
+		t.Run(tc.name, func(t *testing.T) {
+			got := make([]time.Duration, 0, len(tc.iterations))
+			for _, it := range tc.iterations {
+				got = append(got, tc.backoff.WaitTime(it))
+			}
+			if diff := cmp.Diff(tc.want, got); diff != "" {
+				t.Errorf("Unexpected wait time for consecutive runs returned (-want,+got):\n%s", diff)
+			}
+		})
+	}
+}
diff --git a/pkg/workload/workload_test.go b/pkg/workload/workload_test.go
index e1a88ce07..54c098e65 100644
--- a/pkg/workload/workload_test.go
+++ b/pkg/workload/workload_test.go
@@ -37,6 +37,7 @@ import (
 	"sigs.k8s.io/kueue/pkg/features"
 	"sigs.k8s.io/kueue/pkg/resources"
 	"sigs.k8s.io/kueue/pkg/util/admissioncheck"
+	qutil "sigs.k8s.io/kueue/pkg/util/queue"
 	utiltas "sigs.k8s.io/kueue/pkg/util/tas"
 	utiltesting "sigs.k8s.io/kueue/pkg/util/testing"
 )
@@ -844,6 +845,7 @@ func TestAdmissionCheckStrategy(t *testing.T) {
 					Obj()).
 				Obj(),
 			cq: utiltesting.MakeClusterQueue("cq").
+				ResourceGroup(*utiltesting.MakeFlavorQuotas("flavor1").Obj(), *utiltesting.MakeFlavorQuotas("flavor2").Obj()).
 				AdmissionCheckStrategy(*utiltesting.MakeAdmissionCheckStrategyRule("ac1", "flavor1").Obj()).
 				Obj(),
 			wantAdmissionChecks: sets.New[kueue.AdmissionCheckReference]("ac1"),
@@ -857,6 +859,7 @@ func TestAdmissionCheckStrategy(t *testing.T) {
 					Obj()).
 				Obj(),
 			cq: utiltesting.MakeClusterQueue("cq").
+				ResourceGroup(*utiltesting.MakeFlavorQuotas("flavor1").Obj(), *utiltesting.MakeFlavorQuotas("flavor2").Obj()).
 				AdmissionCheckStrategy(*utiltesting.MakeAdmissionCheckStrategyRule("ac1", "unmatched-flavor").Obj()).
 				Obj(),
 			wantAdmissionChecks: nil,
@@ -870,6 +873,7 @@ func TestAdmissionCheckStrategy(t *testing.T) {
 					Obj()).
 				Obj(),
 			cq: utiltesting.MakeClusterQueue("cq").
+				ResourceGroup(*utiltesting.MakeFlavorQuotas("flavor1").Obj(), *utiltesting.MakeFlavorQuotas("flavor2").Obj()).
 				AdmissionCheckStrategy(*utiltesting.MakeAdmissionCheckStrategyRule("ac1").Obj()).
 				Obj(),
 			wantAdmissionChecks: sets.New[kueue.AdmissionCheckReference]("ac1"),
@@ -883,16 +887,33 @@ func TestAdmissionCheckStrategy(t *testing.T) {
 					Obj()).
 				Obj(),
 			cq: utiltesting.MakeClusterQueue("cq").
+				ResourceGroup(*utiltesting.MakeFlavorQuotas("flavor1").Obj(), *utiltesting.MakeFlavorQuotas("flavor2").Obj()).
 				AdmissionCheckStrategy(
 					*utiltesting.MakeAdmissionCheckStrategyRule("ac1", "flavor1").Obj(),
 					*utiltesting.MakeAdmissionCheckStrategyRule("ac2").Obj()).
 				Obj(),
 			wantAdmissionChecks: sets.New[kueue.AdmissionCheckReference]("ac1", "ac2"),
 		},
+		"AdmissionCheckStrategy with a non-existent flavor": {
+			wl: utiltesting.MakeWorkload("wl", "ns").
+				ReserveQuota(utiltesting.MakeAdmission("cq").
+					PodSets(utiltesting.MakePodSetAssignment(kueue.DefaultPodSetName).
+						Assignment("cpu", "flavor1", "1").
+						Obj()).
+					Obj()).
+				Obj(),
+			cq: utiltesting.MakeClusterQueue("cq").
+				ResourceGroup(*utiltesting.MakeFlavorQuotas("flavor1").Obj()).
+				AdmissionCheckStrategy(
+					*utiltesting.MakeAdmissionCheckStrategyRule("ac1", "flavor-nonexistent").Obj()).
+				Obj(),
+			wantAdmissionChecks: sets.New[kueue.AdmissionCheckReference](),
+		},
 		"Workload has no QuotaReserved": {
 			wl: utiltesting.MakeWorkload("wl", "ns").
 				Obj(),
 			cq: utiltesting.MakeClusterQueue("cq").
+				ResourceGroup(*utiltesting.MakeFlavorQuotas("flavor1").Obj(), *utiltesting.MakeFlavorQuotas("flavor2").Obj()).
 				AdmissionCheckStrategy(
 					*utiltesting.MakeAdmissionCheckStrategyRule("ac1", "flavor1").Obj(),
 					*utiltesting.MakeAdmissionCheckStrategyRule("ac2").Obj()).
@@ -903,7 +924,7 @@ func TestAdmissionCheckStrategy(t *testing.T) {
 	for name, tc := range cases {
 		t.Run(name, func(t *testing.T) {
 			_, log := utiltesting.ContextWithLog(t)
-			gotAdmissionChecks := AdmissionChecksForWorkload(log, tc.wl, admissioncheck.NewAdmissionChecks(tc.cq))
+			gotAdmissionChecks := AdmissionChecksForWorkload(log, tc.wl, admissioncheck.NewAdmissionChecks(tc.cq), qutil.AllFlavors(tc.cq.Spec.ResourceGroups))
 
 			if diff := cmp.Diff(tc.wantAdmissionChecks, gotAdmissionChecks); diff != "" {
 				t.Errorf("Unexpected AdmissionChecks, (want-/got+):\n%s", diff)
diff --git a/test/e2e/certmanager/metrics_test.go b/test/e2e/certmanager/metrics_test.go
index 29e674753..7813ab86f 100644
--- a/test/e2e/certmanager/metrics_test.go
+++ b/test/e2e/certmanager/metrics_test.go
@@ -26,7 +26,7 @@ import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	utiltesting "sigs.k8s.io/kueue/pkg/util/testing"
 	testingjobspod "sigs.k8s.io/kueue/pkg/util/testingjobs/pod"
 	"sigs.k8s.io/kueue/test/util"
@@ -43,7 +43,7 @@ const (
 var _ = ginkgo.Describe("Metrics", ginkgo.Ordered, func() {
 	var (
 		ns             *corev1.Namespace
-		resourceFlavor *v1beta1.ResourceFlavor
+		resourceFlavor *kueue.ResourceFlavor
 
 		metricsReaderClusterRoleBinding *rbacv1.ClusterRoleBinding
 
@@ -128,9 +128,9 @@ var _ = ginkgo.Describe("Metrics", ginkgo.Ordered, func() {
 
 	ginkgo.When("workload is admitted", func() {
 		var (
-			clusterQueue *v1beta1.ClusterQueue
-			localQueue   *v1beta1.LocalQueue
-			workload     *v1beta1.Workload
+			clusterQueue *kueue.ClusterQueue
+			localQueue   *kueue.LocalQueue
+			workload     *kueue.Workload
 		)
 
 		ginkgo.BeforeEach(func() {
@@ -152,7 +152,7 @@ var _ = ginkgo.Describe("Metrics", ginkgo.Ordered, func() {
 			gomega.Expect(k8sClient.Create(ctx, localQueue)).To(gomega.Succeed())
 
 			workload = utiltesting.MakeWorkload("test-workload", ns.Name).
-				Queue(v1beta1.LocalQueueName(localQueue.Name)).
+				Queue(kueue.LocalQueueName(localQueue.Name)).
 				PodSets(
 					*utiltesting.MakePodSet("ps1", 1).Obj(),
 				).
diff --git a/test/e2e/singlecluster/fair_sharing_test.go b/test/e2e/singlecluster/fair_sharing_test.go
index 5f215c7cc..a6e0bc0b3 100644
--- a/test/e2e/singlecluster/fair_sharing_test.go
+++ b/test/e2e/singlecluster/fair_sharing_test.go
@@ -24,7 +24,7 @@ import (
 	corev1 "k8s.io/api/core/v1"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	utiltesting "sigs.k8s.io/kueue/pkg/util/testing"
 	jobtesting "sigs.k8s.io/kueue/pkg/util/testingjobs/job"
 	"sigs.k8s.io/kueue/test/util"
@@ -33,13 +33,13 @@ import (
 var _ = ginkgo.Describe("Fair Sharing", ginkgo.Ordered, ginkgo.ContinueOnFailure, func() {
 	var (
 		ns  *corev1.Namespace
-		rf  *v1beta1.ResourceFlavor
-		cq1 *v1beta1.ClusterQueue
-		cq2 *v1beta1.ClusterQueue
-		cq3 *v1beta1.ClusterQueue
-		lq1 *v1beta1.LocalQueue
-		lq2 *v1beta1.LocalQueue
-		lq3 *v1beta1.LocalQueue
+		rf  *kueue.ResourceFlavor
+		cq1 *kueue.ClusterQueue
+		cq2 *kueue.ClusterQueue
+		cq3 *kueue.ClusterQueue
+		lq1 *kueue.LocalQueue
+		lq2 *kueue.LocalQueue
+		lq3 *kueue.LocalQueue
 	)
 
 	ginkgo.BeforeEach(func() {
@@ -95,7 +95,7 @@ var _ = ginkgo.Describe("Fair Sharing", ginkgo.Ordered, ginkgo.ContinueOnFailure
 			ginkgo.By("create jobs")
 			for i := range 4 {
 				job := jobtesting.MakeJob(fmt.Sprintf("j%d", i+1), ns.Name).
-					Queue(v1beta1.LocalQueueName(lq1.Name)).
+					Queue(kueue.LocalQueueName(lq1.Name)).
 					Image(util.GetAgnHostImage(), util.BehaviorWaitForDeletion).
 					Parallelism(3).
 					Completions(3).
diff --git a/test/e2e/singlecluster/kueuectl_test.go b/test/e2e/singlecluster/kueuectl_test.go
index 80b5d6896..0aebd41f4 100644
--- a/test/e2e/singlecluster/kueuectl_test.go
+++ b/test/e2e/singlecluster/kueuectl_test.go
@@ -24,7 +24,7 @@ import (
 	corev1 "k8s.io/api/core/v1"
 	"k8s.io/apimachinery/pkg/types"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/pkg/util/testing"
 	"sigs.k8s.io/kueue/test/util"
 )
@@ -32,7 +32,7 @@ import (
 var _ = ginkgo.Describe("Kueuectl Create", ginkgo.Ordered, ginkgo.ContinueOnFailure, func() {
 	var (
 		ns *corev1.Namespace
-		cq *v1beta1.ClusterQueue
+		cq *kueue.ClusterQueue
 	)
 
 	ginkgo.BeforeEach(func() {
@@ -59,11 +59,11 @@ var _ = ginkgo.Describe("Kueuectl Create", ginkgo.Ordered, ginkgo.ContinueOnFail
 			})
 
 			ginkgo.By("Check that the local queue successfully created", func() {
-				var createdQueue v1beta1.LocalQueue
+				var createdQueue kueue.LocalQueue
 				gomega.Eventually(func(g gomega.Gomega) {
 					g.Expect(k8sClient.Get(ctx, types.NamespacedName{Name: lqName, Namespace: ns.Name}, &createdQueue)).To(gomega.Succeed())
 					g.Expect(createdQueue.Name).Should(gomega.Equal(lqName))
-					g.Expect(createdQueue.Spec.ClusterQueue).Should(gomega.Equal(v1beta1.ClusterQueueReference(cq.Name)))
+					g.Expect(createdQueue.Spec.ClusterQueue).Should(gomega.Equal(kueue.ClusterQueueReference(cq.Name)))
 				}, util.Timeout, util.Interval).Should(gomega.Succeed())
 			})
 		})
@@ -79,7 +79,7 @@ var _ = ginkgo.Describe("Kueuectl Create", ginkgo.Ordered, ginkgo.ContinueOnFail
 			})
 
 			ginkgo.By("Check that the local queue did not create", func() {
-				var createdQueue v1beta1.LocalQueue
+				var createdQueue kueue.LocalQueue
 				gomega.Expect(k8sClient.Get(ctx, types.NamespacedName{Name: lqName, Namespace: ns.Name}, &createdQueue)).ToNot(gomega.Succeed())
 			})
 		})
diff --git a/test/e2e/singlecluster/metrics_test.go b/test/e2e/singlecluster/metrics_test.go
index 1ad48a45b..72038bf60 100644
--- a/test/e2e/singlecluster/metrics_test.go
+++ b/test/e2e/singlecluster/metrics_test.go
@@ -28,7 +28,7 @@ import (
 	"k8s.io/utils/ptr"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/pkg/controller/jobs/job"
 	utiltesting "sigs.k8s.io/kueue/pkg/util/testing"
 	testingjob "sigs.k8s.io/kueue/pkg/util/testingjobs/job"
@@ -45,7 +45,7 @@ const (
 var _ = ginkgo.Describe("Metrics", func() {
 	var (
 		ns             *corev1.Namespace
-		resourceFlavor *v1beta1.ResourceFlavor
+		resourceFlavor *kueue.ResourceFlavor
 
 		metricsReaderClusterRoleBinding *rbacv1.ClusterRoleBinding
 
@@ -100,9 +100,9 @@ var _ = ginkgo.Describe("Metrics", func() {
 
 	ginkgo.When("workload is admitted", func() {
 		var (
-			clusterQueue *v1beta1.ClusterQueue
-			localQueue   *v1beta1.LocalQueue
-			workload     *v1beta1.Workload
+			clusterQueue *kueue.ClusterQueue
+			localQueue   *kueue.LocalQueue
+			workload     *kueue.Workload
 		)
 
 		ginkgo.BeforeEach(func() {
@@ -124,7 +124,7 @@ var _ = ginkgo.Describe("Metrics", func() {
 			util.MustCreate(ctx, k8sClient, localQueue)
 
 			workload = utiltesting.MakeWorkload("test-workload", ns.Name).
-				Queue(v1beta1.LocalQueueName(localQueue.Name)).
+				Queue(kueue.LocalQueueName(localQueue.Name)).
 				PodSets(
 					*utiltesting.MakePodSet("ps1", 1).Obj(),
 				).
@@ -226,12 +226,12 @@ var _ = ginkgo.Describe("Metrics", func() {
 
 	ginkgo.When("workload is admitted with admission checks", func() {
 		var (
-			admissionCheck  *v1beta1.AdmissionCheck
-			clusterQueue    *v1beta1.ClusterQueue
-			localQueue      *v1beta1.LocalQueue
+			admissionCheck  *kueue.AdmissionCheck
+			clusterQueue    *kueue.ClusterQueue
+			localQueue      *kueue.LocalQueue
 			createdJob      *batchv1.Job
 			workloadKey     types.NamespacedName
-			createdWorkload *v1beta1.Workload
+			createdWorkload *kueue.Workload
 		)
 
 		ginkgo.BeforeEach(func() {
@@ -248,7 +248,7 @@ var _ = ginkgo.Describe("Metrics", func() {
 						Resource(corev1.ResourceMemory, "1Gi").
 						Obj(),
 				).
-				AdmissionChecks(v1beta1.AdmissionCheckReference(admissionCheck.Name)).
+				AdmissionChecks(kueue.AdmissionCheckReference(admissionCheck.Name)).
 				Obj()
 			util.MustCreate(ctx, k8sClient, clusterQueue)
 
@@ -259,7 +259,7 @@ var _ = ginkgo.Describe("Metrics", func() {
 			util.MustCreate(ctx, k8sClient, localQueue)
 
 			createdJob = testingjob.MakeJob("admission-checked-job", ns.Name).
-				Queue(v1beta1.LocalQueueName(localQueue.Name)).
+				Queue(kueue.LocalQueueName(localQueue.Name)).
 				RequestAndLimit(corev1.ResourceCPU, "1").
 				Obj()
 			util.MustCreate(ctx, k8sClient, createdJob)
@@ -270,11 +270,11 @@ var _ = ginkgo.Describe("Metrics", func() {
 				Namespace: ns.Name,
 			}
 
-			createdWorkload = &v1beta1.Workload{}
+			createdWorkload = &kueue.Workload{}
 
 			gomega.Eventually(func(g gomega.Gomega) {
 				g.Expect(k8sClient.Get(ctx, workloadKey, createdWorkload)).Should(gomega.Succeed())
-				g.Expect(createdWorkload.Status.Conditions).Should(utiltesting.HaveConditionStatusTrue(v1beta1.WorkloadQuotaReserved))
+				g.Expect(createdWorkload.Status.Conditions).Should(utiltesting.HaveConditionStatusTrue(kueue.WorkloadQuotaReserved))
 			}, util.Timeout, util.Interval).Should(gomega.Succeed())
 		})
 
@@ -291,9 +291,9 @@ var _ = ginkgo.Describe("Metrics", func() {
 				gomega.Eventually(func(g gomega.Gomega) {
 					g.Expect(k8sClient.Get(ctx, workloadKey, createdWorkload)).Should(gomega.Succeed())
 					patch := util.BaseSSAWorkload(createdWorkload)
-					workload.SetAdmissionCheckState(&patch.Status.AdmissionChecks, v1beta1.AdmissionCheckState{
-						Name:  v1beta1.AdmissionCheckReference(admissionCheck.Name),
-						State: v1beta1.CheckStateReady,
+					workload.SetAdmissionCheckState(&patch.Status.AdmissionChecks, kueue.AdmissionCheckState{
+						Name:  kueue.AdmissionCheckReference(admissionCheck.Name),
+						State: kueue.CheckStateReady,
 					}, realClock)
 					g.Expect(k8sClient.Status().
 						Patch(ctx, patch, client.Apply, client.FieldOwner("test-admission-check-controller"), client.ForceOwnership)).
@@ -325,25 +325,25 @@ var _ = ginkgo.Describe("Metrics", func() {
 
 	ginkgo.When("workload is admitted with eviction and preemption", func() {
 		var (
-			clusterQueue1 *v1beta1.ClusterQueue
-			clusterQueue2 *v1beta1.ClusterQueue
+			clusterQueue1 *kueue.ClusterQueue
+			clusterQueue2 *kueue.ClusterQueue
 
-			localQueue1 *v1beta1.LocalQueue
-			localQueue2 *v1beta1.LocalQueue
+			localQueue1 *kueue.LocalQueue
+			localQueue2 *kueue.LocalQueue
 
 			highPriorityClass *schedulingv1.PriorityClass
 
 			lowerJob1         *batchv1.Job
 			lowerWorkload1Key types.NamespacedName
-			lowerWorkload1    *v1beta1.Workload
+			lowerWorkload1    *kueue.Workload
 
 			lowerJob2         *batchv1.Job
 			lowerWorkload2Key types.NamespacedName
-			lowerWorkload2    *v1beta1.Workload
+			lowerWorkload2    *kueue.Workload
 
 			blockerJob         *batchv1.Job
 			blockerWorkloadKey types.NamespacedName
-			blockerWorkload    *v1beta1.Workload
+			blockerWorkload    *kueue.Workload
 
 			higherJob1 *batchv1.Job
 			higherJob2 *batchv1.Job
@@ -358,11 +358,11 @@ var _ = ginkgo.Describe("Metrics", func() {
 						Resource(corev1.ResourceCPU, "2").
 						Obj(),
 				).
-				Preemption(v1beta1.ClusterQueuePreemption{
-					ReclaimWithinCohort: v1beta1.PreemptionPolicyLowerPriority,
-					WithinClusterQueue:  v1beta1.PreemptionPolicyLowerPriority,
-					BorrowWithinCohort: &v1beta1.BorrowWithinCohort{
-						Policy: v1beta1.BorrowWithinCohortPolicyLowerPriority,
+				Preemption(kueue.ClusterQueuePreemption{
+					ReclaimWithinCohort: kueue.PreemptionPolicyLowerPriority,
+					WithinClusterQueue:  kueue.PreemptionPolicyLowerPriority,
+					BorrowWithinCohort: &kueue.BorrowWithinCohort{
+						Policy: kueue.BorrowWithinCohortPolicyLowerPriority,
 					},
 				}).
 				Obj()
@@ -376,11 +376,11 @@ var _ = ginkgo.Describe("Metrics", func() {
 						Resource(corev1.ResourceCPU, "3").
 						Obj(),
 				).
-				Preemption(v1beta1.ClusterQueuePreemption{
-					ReclaimWithinCohort: v1beta1.PreemptionPolicyLowerPriority,
-					WithinClusterQueue:  v1beta1.PreemptionPolicyLowerPriority,
-					BorrowWithinCohort: &v1beta1.BorrowWithinCohort{
-						Policy: v1beta1.BorrowWithinCohortPolicyLowerPriority,
+				Preemption(kueue.ClusterQueuePreemption{
+					ReclaimWithinCohort: kueue.PreemptionPolicyLowerPriority,
+					WithinClusterQueue:  kueue.PreemptionPolicyLowerPriority,
+					BorrowWithinCohort: &kueue.BorrowWithinCohort{
+						Policy: kueue.BorrowWithinCohortPolicyLowerPriority,
 					},
 				}).
 				Obj()
@@ -402,7 +402,7 @@ var _ = ginkgo.Describe("Metrics", func() {
 			util.MustCreate(ctx, k8sClient, highPriorityClass)
 
 			lowerJob1 = testingjob.MakeJob("lower-job-1", ns.Name).
-				Queue(v1beta1.LocalQueueName(localQueue1.Name)).
+				Queue(kueue.LocalQueueName(localQueue1.Name)).
 				RequestAndLimit(corev1.ResourceCPU, "1").
 				Obj()
 			util.MustCreate(ctx, k8sClient, lowerJob1)
@@ -412,7 +412,7 @@ var _ = ginkgo.Describe("Metrics", func() {
 				Name:      lowerWLName1,
 				Namespace: ns.Name,
 			}
-			lowerWorkload1 = &v1beta1.Workload{}
+			lowerWorkload1 = &kueue.Workload{}
 
 			gomega.Eventually(func(g gomega.Gomega) {
 				g.Expect(k8sClient.Get(ctx, lowerWorkload1Key, lowerWorkload1)).To(gomega.Succeed())
@@ -421,7 +421,7 @@ var _ = ginkgo.Describe("Metrics", func() {
 			util.ExpectWorkloadsToBeAdmitted(ctx, k8sClient, lowerWorkload1)
 
 			lowerJob2 = testingjob.MakeJob("lower-job-2", ns.Name).
-				Queue(v1beta1.LocalQueueName(localQueue2.Name)).
+				Queue(kueue.LocalQueueName(localQueue2.Name)).
 				RequestAndLimit(corev1.ResourceCPU, "1").
 				Obj()
 			util.MustCreate(ctx, k8sClient, lowerJob2)
@@ -431,7 +431,7 @@ var _ = ginkgo.Describe("Metrics", func() {
 				Name:      lowerWLName2,
 				Namespace: ns.Name,
 			}
-			lowerWorkload2 = &v1beta1.Workload{}
+			lowerWorkload2 = &kueue.Workload{}
 
 			gomega.Eventually(func(g gomega.Gomega) {
 				g.Expect(k8sClient.Get(ctx, lowerWorkload2Key, lowerWorkload2)).To(gomega.Succeed())
@@ -440,7 +440,7 @@ var _ = ginkgo.Describe("Metrics", func() {
 			util.ExpectWorkloadsToBeAdmitted(ctx, k8sClient, lowerWorkload2)
 
 			blockerJob = testingjob.MakeJob("blocker", ns.Name).
-				Queue(v1beta1.LocalQueueName(localQueue2.Name)).
+				Queue(kueue.LocalQueueName(localQueue2.Name)).
 				PriorityClass(highPriorityClass.Name).
 				RequestAndLimit(corev1.ResourceCPU, "3").
 				Obj()
@@ -451,7 +451,7 @@ var _ = ginkgo.Describe("Metrics", func() {
 				Name:      blockerWLName,
 				Namespace: ns.Name,
 			}
-			blockerWorkload = &v1beta1.Workload{}
+			blockerWorkload = &kueue.Workload{}
 
 			gomega.Eventually(func(g gomega.Gomega) {
 				g.Expect(k8sClient.Get(ctx, blockerWorkloadKey, blockerWorkload)).To(gomega.Succeed())
@@ -460,14 +460,14 @@ var _ = ginkgo.Describe("Metrics", func() {
 			util.ExpectWorkloadsToBeAdmitted(ctx, k8sClient, blockerWorkload)
 
 			higherJob1 = testingjob.MakeJob("high-large-1", ns.Name).
-				Queue(v1beta1.LocalQueueName(localQueue1.Name)).
+				Queue(kueue.LocalQueueName(localQueue1.Name)).
 				PriorityClass(highPriorityClass.Name).
 				RequestAndLimit(corev1.ResourceCPU, "4").
 				Obj()
 			util.MustCreate(ctx, k8sClient, higherJob1)
 
 			higherJob2 = testingjob.MakeJob("high-large-2", ns.Name).
-				Queue(v1beta1.LocalQueueName(localQueue2.Name)).
+				Queue(kueue.LocalQueueName(localQueue2.Name)).
 				PriorityClass(highPriorityClass.Name).
 				RequestAndLimit(corev1.ResourceCPU, "4").
 				Obj()
@@ -501,7 +501,7 @@ var _ = ginkgo.Describe("Metrics", func() {
 
 			gomega.Eventually(func(g gomega.Gomega) {
 				g.Expect(k8sClient.Get(ctx, blockerWorkloadKey, blockerWorkload)).To(gomega.Succeed())
-				g.Expect(blockerWorkload.Status.Conditions).To(utiltesting.HaveConditionStatusTrueAndReason(v1beta1.WorkloadEvicted, v1beta1.WorkloadDeactivated))
+				g.Expect(blockerWorkload.Status.Conditions).To(utiltesting.HaveConditionStatusTrueAndReason(kueue.WorkloadEvicted, kueue.WorkloadDeactivated))
 			}, util.Timeout, util.Interval).Should(gomega.Succeed())
 
 			ginkgo.By("Expecting at least one of the high-priority jobs to be admitted", func() {
diff --git a/test/integration/singlecluster/kueuectl/create_test.go b/test/integration/singlecluster/kueuectl/create_test.go
index 002fda597..a1f1aa0ef 100644
--- a/test/integration/singlecluster/kueuectl/create_test.go
+++ b/test/integration/singlecluster/kueuectl/create_test.go
@@ -31,7 +31,7 @@ import (
 	"k8s.io/utils/ptr"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/cmd/kueuectl/app"
 	"sigs.k8s.io/kueue/pkg/util/testing"
 	"sigs.k8s.io/kueue/test/util"
@@ -40,7 +40,7 @@ import (
 var _ = ginkgo.Describe("Kueuectl Create", ginkgo.Ordered, ginkgo.ContinueOnFailure, func() {
 	var (
 		ns *corev1.Namespace
-		cq *v1beta1.ClusterQueue
+		cq *kueue.ClusterQueue
 	)
 
 	ginkgo.BeforeEach(func() {
@@ -72,11 +72,11 @@ var _ = ginkgo.Describe("Kueuectl Create", ginkgo.Ordered, ginkgo.ContinueOnFail
 			})
 
 			ginkgo.By("Check that the local queue successfully created", func() {
-				var createdQueue v1beta1.LocalQueue
+				var createdQueue kueue.LocalQueue
 				gomega.Eventually(func(g gomega.Gomega) {
 					g.Expect(k8sClient.Get(ctx, types.NamespacedName{Name: lqName, Namespace: ns.Name}, &createdQueue)).To(gomega.Succeed())
 					g.Expect(createdQueue.Name).Should(gomega.Equal(lqName))
-					g.Expect(createdQueue.Spec.ClusterQueue).Should(gomega.Equal(v1beta1.ClusterQueueReference(cq.Name)))
+					g.Expect(createdQueue.Spec.ClusterQueue).Should(gomega.Equal(kueue.ClusterQueueReference(cq.Name)))
 				}, util.Timeout, util.Interval).Should(gomega.Succeed())
 			})
 		})
@@ -98,11 +98,11 @@ var _ = ginkgo.Describe("Kueuectl Create", ginkgo.Ordered, ginkgo.ContinueOnFail
 			})
 
 			ginkgo.By("Check that the local queue successfully created", func() {
-				var createdQueue v1beta1.LocalQueue
+				var createdQueue kueue.LocalQueue
 				gomega.Eventually(func(g gomega.Gomega) {
 					g.Expect(k8sClient.Get(ctx, types.NamespacedName{Name: lqName, Namespace: ns.Name}, &createdQueue)).To(gomega.Succeed())
 					g.Expect(createdQueue.Name).Should(gomega.Equal(lqName))
-					g.Expect(createdQueue.Spec.ClusterQueue).Should(gomega.Equal(v1beta1.ClusterQueueReference(cqName)))
+					g.Expect(createdQueue.Spec.ClusterQueue).Should(gomega.Equal(kueue.ClusterQueueReference(cqName)))
 				}, util.Timeout, util.Interval).Should(gomega.Succeed())
 			})
 		})
@@ -125,11 +125,11 @@ var _ = ginkgo.Describe("Kueuectl Create", ginkgo.Ordered, ginkgo.ContinueOnFail
 			})
 
 			ginkgo.By("Check that the local queue successfully created", func() {
-				var createdQueue v1beta1.LocalQueue
+				var createdQueue kueue.LocalQueue
 				gomega.Eventually(func(g gomega.Gomega) {
 					g.Expect(k8sClient.Get(ctx, types.NamespacedName{Name: lqName, Namespace: ns.Name}, &createdQueue)).To(gomega.Succeed())
 					g.Expect(createdQueue.Name).Should(gomega.Equal(lqName))
-					g.Expect(createdQueue.Spec.ClusterQueue).Should(gomega.Equal(v1beta1.ClusterQueueReference(cq.Name)))
+					g.Expect(createdQueue.Spec.ClusterQueue).Should(gomega.Equal(kueue.ClusterQueueReference(cq.Name)))
 				}, util.Timeout, util.Interval).Should(gomega.Succeed())
 			})
 		})
@@ -139,7 +139,7 @@ var _ = ginkgo.Describe("Kueuectl Create", ginkgo.Ordered, ginkgo.ContinueOnFail
 		const cqName = "cluster-queue"
 
 		ginkgo.AfterEach(func() {
-			var createdQueue v1beta1.ClusterQueue
+			var createdQueue kueue.ClusterQueue
 			err := k8sClient.Get(ctx, types.NamespacedName{Name: cqName, Namespace: ns.Name}, &createdQueue)
 			gomega.Expect(client.IgnoreNotFound(err)).To(gomega.Succeed())
 			if !apierrors.IsNotFound(err) {
@@ -163,15 +163,15 @@ var _ = ginkgo.Describe("Kueuectl Create", ginkgo.Ordered, ginkgo.ContinueOnFail
 			})
 
 			ginkgo.By("Check that the cluster queue successfully created", func() {
-				var createdQueue v1beta1.ClusterQueue
+				var createdQueue kueue.ClusterQueue
 				gomega.Eventually(func(g gomega.Gomega) {
 					g.Expect(k8sClient.Get(ctx, types.NamespacedName{Name: cqName, Namespace: ns.Name}, &createdQueue)).To(gomega.Succeed())
 					g.Expect(createdQueue.Name).Should(gomega.Equal(cqName))
 					g.Expect(createdQueue.Spec.Cohort).Should(gomega.BeEmpty())
-					g.Expect(createdQueue.Spec.QueueingStrategy).Should(gomega.Equal(v1beta1.BestEffortFIFO))
+					g.Expect(createdQueue.Spec.QueueingStrategy).Should(gomega.Equal(kueue.BestEffortFIFO))
 					g.Expect(*createdQueue.Spec.NamespaceSelector).Should(gomega.Equal(metav1.LabelSelector{}))
-					g.Expect(createdQueue.Spec.Preemption.ReclaimWithinCohort).Should(gomega.Equal(v1beta1.PreemptionPolicyNever))
-					g.Expect(createdQueue.Spec.Preemption.WithinClusterQueue).Should(gomega.Equal(v1beta1.PreemptionPolicyNever))
+					g.Expect(createdQueue.Spec.Preemption.ReclaimWithinCohort).Should(gomega.Equal(kueue.PreemptionPolicyNever))
+					g.Expect(createdQueue.Spec.Preemption.WithinClusterQueue).Should(gomega.Equal(kueue.PreemptionPolicyNever))
 				}, util.Timeout, util.Interval).Should(gomega.Succeed())
 			})
 		})
@@ -199,21 +199,21 @@ var _ = ginkgo.Describe("Kueuectl Create", ginkgo.Ordered, ginkgo.ContinueOnFail
 			})
 
 			ginkgo.By("Check that the cluster queue successfully created", func() {
-				var createdQueue v1beta1.ClusterQueue
+				var createdQueue kueue.ClusterQueue
 				gomega.Eventually(func(g gomega.Gomega) {
 					g.Expect(k8sClient.Get(ctx, types.NamespacedName{Name: cqName, Namespace: ns.Name}, &createdQueue)).To(gomega.Succeed())
 					g.Expect(createdQueue.Name).Should(gomega.Equal(cqName))
-					g.Expect(createdQueue.Spec.Cohort).Should(gomega.Equal(v1beta1.CohortReference("cohort")))
-					g.Expect(createdQueue.Spec.QueueingStrategy).Should(gomega.Equal(v1beta1.StrictFIFO))
+					g.Expect(createdQueue.Spec.Cohort).Should(gomega.Equal(kueue.CohortReference("cohort")))
+					g.Expect(createdQueue.Spec.QueueingStrategy).Should(gomega.Equal(kueue.StrictFIFO))
 					g.Expect(*createdQueue.Spec.NamespaceSelector).Should(gomega.Equal(metav1.LabelSelector{
 						MatchLabels: map[string]string{"fooX": "barX", "fooY": "barY"},
 					}))
-					g.Expect(createdQueue.Spec.Preemption.ReclaimWithinCohort).Should(gomega.Equal(v1beta1.PreemptionPolicyAny))
-					g.Expect(createdQueue.Spec.Preemption.WithinClusterQueue).Should(gomega.Equal(v1beta1.PreemptionPolicyLowerPriority))
-					g.Expect(createdQueue.Spec.ResourceGroups).Should(gomega.Equal([]v1beta1.ResourceGroup{
+					g.Expect(createdQueue.Spec.Preemption.ReclaimWithinCohort).Should(gomega.Equal(kueue.PreemptionPolicyAny))
+					g.Expect(createdQueue.Spec.Preemption.WithinClusterQueue).Should(gomega.Equal(kueue.PreemptionPolicyLowerPriority))
+					g.Expect(createdQueue.Spec.ResourceGroups).Should(gomega.Equal([]kueue.ResourceGroup{
 						{
 							CoveredResources: []corev1.ResourceName{corev1.ResourceCPU, corev1.ResourceMemory},
-							Flavors: []v1beta1.FlavorQuotas{
+							Flavors: []kueue.FlavorQuotas{
 								*testing.MakeFlavorQuotas("alpha").
 									Resource(corev1.ResourceCPU, "0").
 									Resource(corev1.ResourceMemory, "0").
@@ -243,14 +243,14 @@ var _ = ginkgo.Describe("Kueuectl Create", ginkgo.Ordered, ginkgo.ContinueOnFail
 			})
 
 			ginkgo.By("Check that the cluster queue successfully created", func() {
-				var createdQueue v1beta1.ClusterQueue
+				var createdQueue kueue.ClusterQueue
 				gomega.Eventually(func(g gomega.Gomega) {
 					g.Expect(k8sClient.Get(ctx, types.NamespacedName{Name: cqName, Namespace: ns.Name}, &createdQueue)).To(gomega.Succeed())
 					g.Expect(createdQueue.Name).Should(gomega.Equal(cqName))
-					g.Expect(createdQueue.Spec.ResourceGroups).Should(gomega.Equal([]v1beta1.ResourceGroup{
+					g.Expect(createdQueue.Spec.ResourceGroups).Should(gomega.Equal([]kueue.ResourceGroup{
 						{
 							CoveredResources: []corev1.ResourceName{corev1.ResourceCPU, corev1.ResourceMemory},
-							Flavors: []v1beta1.FlavorQuotas{
+							Flavors: []kueue.FlavorQuotas{
 								*testing.MakeFlavorQuotas("alpha").
 									Resource(corev1.ResourceCPU, "0").
 									Resource(corev1.ResourceMemory, "0").
@@ -284,14 +284,14 @@ var _ = ginkgo.Describe("Kueuectl Create", ginkgo.Ordered, ginkgo.ContinueOnFail
 			})
 
 			ginkgo.By("Check that the cluster queue successfully created", func() {
-				var createdQueue v1beta1.ClusterQueue
+				var createdQueue kueue.ClusterQueue
 				gomega.Eventually(func(g gomega.Gomega) {
 					g.Expect(k8sClient.Get(ctx, types.NamespacedName{Name: cqName, Namespace: ns.Name}, &createdQueue)).To(gomega.Succeed())
 					g.Expect(createdQueue.Name).Should(gomega.Equal(cqName))
-					g.Expect(createdQueue.Spec.ResourceGroups).Should(gomega.Equal([]v1beta1.ResourceGroup{
+					g.Expect(createdQueue.Spec.ResourceGroups).Should(gomega.Equal([]kueue.ResourceGroup{
 						{
 							CoveredResources: []corev1.ResourceName{corev1.ResourceCPU, corev1.ResourceMemory},
-							Flavors: []v1beta1.FlavorQuotas{
+							Flavors: []kueue.FlavorQuotas{
 								*testing.MakeFlavorQuotas("alpha").
 									Resource(corev1.ResourceCPU, "0").
 									Resource(corev1.ResourceMemory, "0").
@@ -304,7 +304,7 @@ var _ = ginkgo.Describe("Kueuectl Create", ginkgo.Ordered, ginkgo.ContinueOnFail
 						},
 						{
 							CoveredResources: []corev1.ResourceName{"gpu"},
-							Flavors: []v1beta1.FlavorQuotas{
+							Flavors: []kueue.FlavorQuotas{
 								*testing.MakeFlavorQuotas("beta").
 									Resource("gpu", "0").
 									Obj(),
@@ -340,14 +340,14 @@ var _ = ginkgo.Describe("Kueuectl Create", ginkgo.Ordered, ginkgo.ContinueOnFail
 			})
 
 			ginkgo.By("Check that the cluster queue successfully created", func() {
-				var createdQueue v1beta1.ClusterQueue
+				var createdQueue kueue.ClusterQueue
 				gomega.Eventually(func(g gomega.Gomega) {
 					g.Expect(k8sClient.Get(ctx, types.NamespacedName{Name: cqName, Namespace: ns.Name}, &createdQueue)).To(gomega.Succeed())
 					g.Expect(createdQueue.Name).Should(gomega.Equal(cqName))
-					g.Expect(createdQueue.Spec.ResourceGroups).Should(gomega.Equal([]v1beta1.ResourceGroup{
+					g.Expect(createdQueue.Spec.ResourceGroups).Should(gomega.Equal([]kueue.ResourceGroup{
 						{
 							CoveredResources: []corev1.ResourceName{corev1.ResourceCPU, corev1.ResourceMemory},
-							Flavors: []v1beta1.FlavorQuotas{
+							Flavors: []kueue.FlavorQuotas{
 								*testing.MakeFlavorQuotas("alpha").
 									Resource(corev1.ResourceCPU, "0", "0", "0").
 									Resource(corev1.ResourceMemory, "0", "0", "0").
@@ -387,21 +387,21 @@ var _ = ginkgo.Describe("Kueuectl Create", ginkgo.Ordered, ginkgo.ContinueOnFail
 			})
 
 			ginkgo.By("Check that the cluster queue successfully created", func() {
-				var createdQueue v1beta1.ClusterQueue
+				var createdQueue kueue.ClusterQueue
 				gomega.Eventually(func(g gomega.Gomega) {
 					g.Expect(k8sClient.Get(ctx, types.NamespacedName{Name: cqName, Namespace: ns.Name}, &createdQueue)).To(gomega.Succeed())
 					g.Expect(createdQueue.Name).Should(gomega.Equal(cqName))
-					g.Expect(createdQueue.Spec.Cohort).Should(gomega.Equal(v1beta1.CohortReference("cohort")))
-					g.Expect(createdQueue.Spec.QueueingStrategy).Should(gomega.Equal(v1beta1.StrictFIFO))
+					g.Expect(createdQueue.Spec.Cohort).Should(gomega.Equal(kueue.CohortReference("cohort")))
+					g.Expect(createdQueue.Spec.QueueingStrategy).Should(gomega.Equal(kueue.StrictFIFO))
 					g.Expect(*createdQueue.Spec.NamespaceSelector).Should(gomega.Equal(metav1.LabelSelector{
 						MatchLabels: map[string]string{"fooX": "barX", "fooY": "barY"},
 					}))
-					g.Expect(createdQueue.Spec.Preemption.ReclaimWithinCohort).Should(gomega.Equal(v1beta1.PreemptionPolicyAny))
-					g.Expect(createdQueue.Spec.Preemption.WithinClusterQueue).Should(gomega.Equal(v1beta1.PreemptionPolicyLowerPriority))
-					g.Expect(createdQueue.Spec.ResourceGroups).Should(gomega.Equal([]v1beta1.ResourceGroup{
+					g.Expect(createdQueue.Spec.Preemption.ReclaimWithinCohort).Should(gomega.Equal(kueue.PreemptionPolicyAny))
+					g.Expect(createdQueue.Spec.Preemption.WithinClusterQueue).Should(gomega.Equal(kueue.PreemptionPolicyLowerPriority))
+					g.Expect(createdQueue.Spec.ResourceGroups).Should(gomega.Equal([]kueue.ResourceGroup{
 						{
 							CoveredResources: []corev1.ResourceName{corev1.ResourceCPU, corev1.ResourceMemory},
-							Flavors: []v1beta1.FlavorQuotas{
+							Flavors: []kueue.FlavorQuotas{
 								*testing.MakeFlavorQuotas("alpha").
 									Resource(corev1.ResourceCPU, "2", "1", "0").
 									Resource(corev1.ResourceMemory, "2", "1", "0").
@@ -414,7 +414,7 @@ var _ = ginkgo.Describe("Kueuectl Create", ginkgo.Ordered, ginkgo.ContinueOnFail
 						},
 						{
 							CoveredResources: []corev1.ResourceName{"gpu"},
-							Flavors: []v1beta1.FlavorQuotas{
+							Flavors: []kueue.FlavorQuotas{
 								*testing.MakeFlavorQuotas("beta").
 									Resource("gpu", "2", "1", "0").
 									Obj(),
@@ -430,7 +430,7 @@ var _ = ginkgo.Describe("Kueuectl Create", ginkgo.Ordered, ginkgo.ContinueOnFail
 		const rfName = "resource-flavor"
 
 		ginkgo.AfterEach(func() {
-			var resourceFlavor v1beta1.ResourceFlavor
+			var resourceFlavor kueue.ResourceFlavor
 			err := k8sClient.Get(ctx, types.NamespacedName{Name: rfName}, &resourceFlavor)
 			gomega.Expect(client.IgnoreNotFound(err)).To(gomega.Succeed())
 			if !apierrors.IsNotFound(err) {
@@ -456,7 +456,7 @@ var _ = ginkgo.Describe("Kueuectl Create", ginkgo.Ordered, ginkgo.ContinueOnFail
 			})
 
 			ginkgo.By("Check that the resource flavor successfully created", func() {
-				var resourceFlavor v1beta1.ResourceFlavor
+				var resourceFlavor kueue.ResourceFlavor
 				gomega.Eventually(func(g gomega.Gomega) {
 					g.Expect(k8sClient.Get(ctx, types.NamespacedName{Name: rfName, Namespace: ns.Name}, &resourceFlavor)).To(gomega.Succeed())
 					g.Expect(resourceFlavor.Name).Should(gomega.Equal(rfName))
@@ -489,7 +489,7 @@ var _ = ginkgo.Describe("Kueuectl Create", ginkgo.Ordered, ginkgo.ContinueOnFail
 			})
 
 			ginkgo.By("Check that the resource flavor successfully created", func() {
-				var resourceFlavor v1beta1.ResourceFlavor
+				var resourceFlavor kueue.ResourceFlavor
 				gomega.Eventually(func(g gomega.Gomega) {
 					g.Expect(k8sClient.Get(ctx, types.NamespacedName{Name: rfName, Namespace: ns.Name}, &resourceFlavor)).To(gomega.Succeed())
 					g.Expect(resourceFlavor.Name).Should(gomega.Equal(rfName))
@@ -544,7 +544,7 @@ var _ = ginkgo.Describe("Kueuectl Create", ginkgo.Ordered, ginkgo.ContinueOnFail
 			})
 
 			ginkgo.By("Check that the resource flavor not created", func() {
-				var resourceFlavor v1beta1.ResourceFlavor
+				var resourceFlavor kueue.ResourceFlavor
 				gomega.Eventually(func(g gomega.Gomega) {
 					rfKey := types.NamespacedName{Name: rfName, Namespace: ns.Name}
 					g.Expect(k8sClient.Get(ctx, rfKey, &resourceFlavor)).Should(testing.BeNotFoundError())
diff --git a/test/integration/singlecluster/kueuectl/list_test.go b/test/integration/singlecluster/kueuectl/list_test.go
index f9dd797cc..75f4e40b4 100644
--- a/test/integration/singlecluster/kueuectl/list_test.go
+++ b/test/integration/singlecluster/kueuectl/list_test.go
@@ -28,7 +28,7 @@ import (
 	"k8s.io/cli-runtime/pkg/genericiooptions"
 	testingclock "k8s.io/utils/clock/testing"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/cmd/kueuectl/app"
 	"sigs.k8s.io/kueue/cmd/kueuectl/app/list"
 	"sigs.k8s.io/kueue/pkg/util/testing"
@@ -49,9 +49,9 @@ var _ = ginkgo.Describe("Kueuectl List", ginkgo.Ordered, ginkgo.ContinueOnFailur
 
 	ginkgo.When("List LocalQueue", func() {
 		var (
-			lq1 *v1beta1.LocalQueue
-			lq2 *v1beta1.LocalQueue
-			lq3 *v1beta1.LocalQueue
+			lq1 *kueue.LocalQueue
+			lq2 *kueue.LocalQueue
+			lq3 *kueue.LocalQueue
 		)
 
 		ginkgo.JustBeforeEach(func() {
@@ -114,8 +114,8 @@ very-long-local-queue-name   cq1                            0
 
 	ginkgo.When("List ClusterQueue", func() {
 		var (
-			cq1 *v1beta1.ClusterQueue
-			cq2 *v1beta1.ClusterQueue
+			cq1 *kueue.ClusterQueue
+			cq2 *kueue.ClusterQueue
 		)
 
 		ginkgo.JustBeforeEach(func() {
@@ -177,9 +177,9 @@ very-long-cluster-queue-name            0                   0
 
 	ginkgo.When("List Workloads", func() {
 		var (
-			wl1 *v1beta1.Workload
-			wl2 *v1beta1.Workload
-			wl3 *v1beta1.Workload
+			wl1 *kueue.Workload
+			wl2 *kueue.Workload
+			wl3 *kueue.Workload
 		)
 
 		ginkgo.JustBeforeEach(func() {
@@ -239,8 +239,8 @@ wl2                                             very-long-local-queue-name
 
 	ginkgo.When("List ResourceFlavors", func() {
 		var (
-			rf1 *v1beta1.ResourceFlavor
-			rf2 *v1beta1.ResourceFlavor
+			rf1 *kueue.ResourceFlavor
+			rf2 *kueue.ResourceFlavor
 		)
 
 		ginkgo.JustBeforeEach(func() {
diff --git a/test/integration/singlecluster/kueuectl/resume_test.go b/test/integration/singlecluster/kueuectl/resume_test.go
index cee8fae16..7d3848c83 100644
--- a/test/integration/singlecluster/kueuectl/resume_test.go
+++ b/test/integration/singlecluster/kueuectl/resume_test.go
@@ -28,7 +28,7 @@ import (
 	"k8s.io/utils/ptr"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/cmd/kueuectl/app"
 	"sigs.k8s.io/kueue/pkg/util/testing"
 	"sigs.k8s.io/kueue/pkg/workload"
@@ -54,7 +54,7 @@ var _ = ginkgo.Describe("Kueuectl Resume", ginkgo.Ordered, ginkgo.ContinueOnFail
 			ginkgo.By("Create a Workload")
 			util.MustCreate(ctx, k8sClient, wl)
 
-			createdWorkload := &v1beta1.Workload{}
+			createdWorkload := &kueue.Workload{}
 
 			ginkgo.By("Get the created Workload", func() {
 				gomega.Eventually(func(g gomega.Gomega) {
@@ -84,18 +84,18 @@ var _ = ginkgo.Describe("Kueuectl Resume", ginkgo.Ordered, ginkgo.ContinueOnFail
 
 	ginkgo.When("Resuming a LocalQueue", func() {
 		ginkgo.DescribeTable("Should resume a LocalQueue",
-			func(name string, wantInitialStopPolicy v1beta1.StopPolicy) {
+			func(name string, wantInitialStopPolicy kueue.StopPolicy) {
 				lq := testing.MakeLocalQueue(name, ns.Name).StopPolicy(wantInitialStopPolicy).Obj()
 
 				ginkgo.By("Create a LocalQueue", func() {
 					util.MustCreate(ctx, k8sClient, lq)
 				})
 
-				createdLocalQueue := &v1beta1.LocalQueue{}
+				createdLocalQueue := &kueue.LocalQueue{}
 				ginkgo.By("Get created LocalQueue", func() {
 					gomega.Eventually(func(g gomega.Gomega) {
 						g.Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(lq), createdLocalQueue)).To(gomega.Succeed())
-						g.Expect(ptr.Deref(createdLocalQueue.Spec.StopPolicy, v1beta1.None)).Should(gomega.Equal(wantInitialStopPolicy))
+						g.Expect(ptr.Deref(createdLocalQueue.Spec.StopPolicy, kueue.None)).Should(gomega.Equal(wantInitialStopPolicy))
 					}, util.Timeout, util.Interval).Should(gomega.Succeed())
 				})
 
@@ -112,24 +112,24 @@ var _ = ginkgo.Describe("Kueuectl Resume", ginkgo.Ordered, ginkgo.ContinueOnFail
 				ginkgo.By("Check that the LocalQueue is successfully resumed", func() {
 					gomega.Eventually(func(g gomega.Gomega) {
 						g.Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(createdLocalQueue), createdLocalQueue)).To(gomega.Succeed())
-						g.Expect(ptr.Deref(createdLocalQueue.Spec.StopPolicy, v1beta1.None)).Should(gomega.Equal(v1beta1.None))
+						g.Expect(ptr.Deref(createdLocalQueue.Spec.StopPolicy, kueue.None)).Should(gomega.Equal(kueue.None))
 					}, util.Timeout, util.Interval).Should(gomega.Succeed())
 				})
 			},
 			ginkgo.Entry("HoldAndDrain",
 				"lq-1",
-				v1beta1.HoldAndDrain,
+				kueue.HoldAndDrain,
 			),
 			ginkgo.Entry("Hold",
 				"lq-2",
-				v1beta1.Hold,
+				kueue.Hold,
 			),
 		)
 	})
 
 	ginkgo.When("Resuming a ClusterQueue", func() {
 		ginkgo.DescribeTable("Should resume a ClusterQueue",
-			func(cq *v1beta1.ClusterQueue, wantInitialStopPolicy v1beta1.StopPolicy) {
+			func(cq *kueue.ClusterQueue, wantInitialStopPolicy kueue.StopPolicy) {
 				ginkgo.By("Create a ClusterQueue", func() {
 					util.MustCreate(ctx, k8sClient, cq)
 				})
@@ -138,11 +138,11 @@ var _ = ginkgo.Describe("Kueuectl Resume", ginkgo.Ordered, ginkgo.ContinueOnFail
 					util.ExpectObjectToBeDeleted(ctx, k8sClient, cq, true)
 				})
 
-				createdClusterQueue := &v1beta1.ClusterQueue{}
+				createdClusterQueue := &kueue.ClusterQueue{}
 				ginkgo.By("Get created ClusterQueue", func() {
 					gomega.Eventually(func(g gomega.Gomega) {
 						g.Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(cq), createdClusterQueue)).To(gomega.Succeed())
-						g.Expect(ptr.Deref(createdClusterQueue.Spec.StopPolicy, v1beta1.None)).Should(gomega.Equal(wantInitialStopPolicy))
+						g.Expect(ptr.Deref(createdClusterQueue.Spec.StopPolicy, kueue.None)).Should(gomega.Equal(wantInitialStopPolicy))
 					}, util.Timeout, util.Interval).Should(gomega.Succeed())
 				})
 
@@ -159,17 +159,17 @@ var _ = ginkgo.Describe("Kueuectl Resume", ginkgo.Ordered, ginkgo.ContinueOnFail
 				ginkgo.By("Check that the ClusterQueue is successfully resumed", func() {
 					gomega.Eventually(func(g gomega.Gomega) {
 						g.Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(createdClusterQueue), createdClusterQueue)).To(gomega.Succeed())
-						g.Expect(ptr.Deref(createdClusterQueue.Spec.StopPolicy, v1beta1.None)).Should(gomega.Equal(v1beta1.None))
+						g.Expect(ptr.Deref(createdClusterQueue.Spec.StopPolicy, kueue.None)).Should(gomega.Equal(kueue.None))
 					}, util.Timeout, util.Interval).Should(gomega.Succeed())
 				})
 			},
 			ginkgo.Entry("HoldAndDrain",
-				testing.MakeClusterQueue("cq-1").StopPolicy(v1beta1.HoldAndDrain).Obj(),
-				v1beta1.HoldAndDrain,
+				testing.MakeClusterQueue("cq-1").StopPolicy(kueue.HoldAndDrain).Obj(),
+				kueue.HoldAndDrain,
 			),
 			ginkgo.Entry("Hold",
-				testing.MakeClusterQueue("cq-2").StopPolicy(v1beta1.Hold).Obj(),
-				v1beta1.Hold,
+				testing.MakeClusterQueue("cq-2").StopPolicy(kueue.Hold).Obj(),
+				kueue.Hold,
 			),
 		)
 	})
diff --git a/test/integration/singlecluster/kueuectl/stop_test.go b/test/integration/singlecluster/kueuectl/stop_test.go
index 6fb1779c5..8890871c4 100644
--- a/test/integration/singlecluster/kueuectl/stop_test.go
+++ b/test/integration/singlecluster/kueuectl/stop_test.go
@@ -28,7 +28,7 @@ import (
 	"k8s.io/utils/ptr"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
-	"sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/cmd/kueuectl/app"
 	"sigs.k8s.io/kueue/pkg/util/testing"
 	"sigs.k8s.io/kueue/pkg/workload"
@@ -54,7 +54,7 @@ var _ = ginkgo.Describe("Kueuectl Stop", ginkgo.Ordered, ginkgo.ContinueOnFailur
 			ginkgo.By("Create a Workload")
 			util.MustCreate(ctx, k8sClient, wl)
 
-			createdWorkload := &v1beta1.Workload{}
+			createdWorkload := &kueue.Workload{}
 
 			ginkgo.By("Get the created Workload", func() {
 				gomega.Eventually(func(g gomega.Gomega) {
@@ -84,18 +84,18 @@ var _ = ginkgo.Describe("Kueuectl Stop", ginkgo.Ordered, ginkgo.ContinueOnFailur
 
 	ginkgo.When("Stopping a LocalQueue", func() {
 		ginkgo.DescribeTable("Should stop a LocalQueue",
-			func(name string, stopCmdArgs []string, wantStopPolicy v1beta1.StopPolicy) {
+			func(name string, stopCmdArgs []string, wantStopPolicy kueue.StopPolicy) {
 				lq := testing.MakeLocalQueue(name, ns.Name).Obj()
 
 				ginkgo.By("Create a LocalQueue", func() {
 					util.MustCreate(ctx, k8sClient, lq)
 				})
 
-				createdLocalQueue := &v1beta1.LocalQueue{}
+				createdLocalQueue := &kueue.LocalQueue{}
 				ginkgo.By("Get created LocalQueue", func() {
 					gomega.Eventually(func(g gomega.Gomega) {
 						g.Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(lq), createdLocalQueue)).To(gomega.Succeed())
-						g.Expect(ptr.Deref(createdLocalQueue.Spec.StopPolicy, v1beta1.None)).Should(gomega.Equal(v1beta1.None))
+						g.Expect(ptr.Deref(createdLocalQueue.Spec.StopPolicy, kueue.None)).Should(gomega.Equal(kueue.None))
 					}, util.Timeout, util.Interval).Should(gomega.Succeed())
 				})
 
@@ -112,26 +112,26 @@ var _ = ginkgo.Describe("Kueuectl Stop", ginkgo.Ordered, ginkgo.ContinueOnFailur
 				ginkgo.By("Check that the LocalQueue is successfully stopped", func() {
 					gomega.Eventually(func(g gomega.Gomega) {
 						g.Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(createdLocalQueue), createdLocalQueue)).To(gomega.Succeed())
-						g.Expect(ptr.Deref(createdLocalQueue.Spec.StopPolicy, v1beta1.None)).Should(gomega.Equal(wantStopPolicy))
+						g.Expect(ptr.Deref(createdLocalQueue.Spec.StopPolicy, kueue.None)).Should(gomega.Equal(wantStopPolicy))
 					}, util.Timeout, util.Interval).Should(gomega.Succeed())
 				})
 			},
 			ginkgo.Entry("Stop a LocalQueue and drain workloads",
 				"lq-1",
 				[]string{},
-				v1beta1.HoldAndDrain,
+				kueue.HoldAndDrain,
 			),
 			ginkgo.Entry("Stop a LocalQueue and let the admitted workloads finish",
 				"lq-2",
 				[]string{"--keep-already-running"},
-				v1beta1.Hold,
+				kueue.Hold,
 			),
 		)
 	})
 
 	ginkgo.When("Stopping a ClusterQueue", func() {
 		ginkgo.DescribeTable("Should stop a ClusterQueue",
-			func(cq *v1beta1.ClusterQueue, stopCmdArgs []string, wantStopPolicy v1beta1.StopPolicy) {
+			func(cq *kueue.ClusterQueue, stopCmdArgs []string, wantStopPolicy kueue.StopPolicy) {
 				ginkgo.By("Create a ClusterQueue", func() {
 					util.MustCreate(ctx, k8sClient, cq)
 				})
@@ -140,11 +140,11 @@ var _ = ginkgo.Describe("Kueuectl Stop", ginkgo.Ordered, ginkgo.ContinueOnFailur
 					util.ExpectObjectToBeDeleted(ctx, k8sClient, cq, true)
 				})
 
-				createdClusterQueue := &v1beta1.ClusterQueue{}
+				createdClusterQueue := &kueue.ClusterQueue{}
 				ginkgo.By("Get created ClusterQueue", func() {
 					gomega.Eventually(func(g gomega.Gomega) {
 						g.Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(cq), createdClusterQueue)).To(gomega.Succeed())
-						g.Expect(ptr.Deref(createdClusterQueue.Spec.StopPolicy, v1beta1.None)).Should(gomega.Equal(v1beta1.None))
+						g.Expect(ptr.Deref(createdClusterQueue.Spec.StopPolicy, kueue.None)).Should(gomega.Equal(kueue.None))
 					}, util.Timeout, util.Interval).Should(gomega.Succeed())
 				})
 
@@ -161,19 +161,19 @@ var _ = ginkgo.Describe("Kueuectl Stop", ginkgo.Ordered, ginkgo.ContinueOnFailur
 				ginkgo.By("Check that the ClusterQueue is successfully stopped", func() {
 					gomega.Eventually(func(g gomega.Gomega) {
 						g.Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(createdClusterQueue), createdClusterQueue)).To(gomega.Succeed())
-						g.Expect(ptr.Deref(createdClusterQueue.Spec.StopPolicy, v1beta1.None)).Should(gomega.Equal(wantStopPolicy))
+						g.Expect(ptr.Deref(createdClusterQueue.Spec.StopPolicy, kueue.None)).Should(gomega.Equal(wantStopPolicy))
 					}, util.Timeout, util.Interval).Should(gomega.Succeed())
 				})
 			},
 			ginkgo.Entry("Stop a ClusterQueue and drain workloads",
 				testing.MakeClusterQueue("cq-1").Obj(),
 				[]string{},
-				v1beta1.HoldAndDrain,
+				kueue.HoldAndDrain,
 			),
 			ginkgo.Entry("Stop a ClusterQueue and let the admitted workloads finish",
 				testing.MakeClusterQueue("cq-2").Obj(),
 				[]string{"--keep-already-running"},
-				v1beta1.Hold,
+				kueue.Hold,
 			),
 		)
 	})
diff --git a/test/integration/singlecluster/webhook/jobs/jobset_webhook_test.go b/test/integration/singlecluster/webhook/jobs/jobset_webhook_test.go
index d0614ca42..dd645eddf 100644
--- a/test/integration/singlecluster/webhook/jobs/jobset_webhook_test.go
+++ b/test/integration/singlecluster/webhook/jobs/jobset_webhook_test.go
@@ -21,7 +21,7 @@ import (
 	"github.com/onsi/gomega"
 	corev1 "k8s.io/api/core/v1"
 
-	kueuealpha "sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/pkg/controller/jobs/jobset"
 	"sigs.k8s.io/kueue/pkg/util/testing"
 	testingjob "sigs.k8s.io/kueue/pkg/util/testingjobs/jobset"
@@ -66,8 +66,8 @@ var _ = ginkgo.Describe("JobSet Webhook", ginkgo.Ordered, ginkgo.ContinueOnFailu
 					testingjob.ReplicatedJobRequirements{
 						Name: "leader",
 						PodAnnotations: map[string]string{
-							kueuealpha.PodSetPreferredTopologyAnnotation: "cloud.com/block",
-							kueuealpha.PodSetRequiredTopologyAnnotation:  "cloud.com/block",
+							kueue.PodSetPreferredTopologyAnnotation: "cloud.com/block",
+							kueue.PodSetRequiredTopologyAnnotation:  "cloud.com/block",
 						},
 					},
 				).
@@ -92,9 +92,9 @@ var _ = ginkgo.Describe("JobSet Webhook", ginkgo.Ordered, ginkgo.ContinueOnFailu
 					Parallelism: parallelism,
 					Completions: parallelism,
 					PodAnnotations: map[string]string{
-						kueuealpha.PodSetPreferredTopologyAnnotation:     testing.DefaultBlockTopologyLevel,
-						kueuealpha.PodSetSliceRequiredTopologyAnnotation: testing.DefaultBlockTopologyLevel,
-						kueuealpha.PodSetSliceSizeAnnotation:             invalidSliceSize,
+						kueue.PodSetPreferredTopologyAnnotation:     testing.DefaultBlockTopologyLevel,
+						kueue.PodSetSliceRequiredTopologyAnnotation: testing.DefaultBlockTopologyLevel,
+						kueue.PodSetSliceSizeAnnotation:             invalidSliceSize,
 					},
 				}).
 				RequestAndLimit("replicated-job-1", "example.com/gpu", "1").
diff --git a/test/integration/singlecluster/webhook/jobs/paddlejob_webhook_test.go b/test/integration/singlecluster/webhook/jobs/paddlejob_webhook_test.go
index bde566b3f..945492ef5 100644
--- a/test/integration/singlecluster/webhook/jobs/paddlejob_webhook_test.go
+++ b/test/integration/singlecluster/webhook/jobs/paddlejob_webhook_test.go
@@ -22,7 +22,7 @@ import (
 	"github.com/onsi/gomega"
 	corev1 "k8s.io/api/core/v1"
 
-	kueuealpha "sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/pkg/controller/jobs/kubeflow/jobs/paddlejob"
 	"sigs.k8s.io/kueue/pkg/util/testing"
 	testingjobspaddlejob "sigs.k8s.io/kueue/pkg/util/testingjobs/paddlejob"
@@ -54,8 +54,8 @@ var _ = ginkgo.Describe("PaddleJob Webhook", ginkgo.Ordered, func() {
 						ReplicaType:  kftraining.PaddleJobReplicaTypeMaster,
 						ReplicaCount: 1,
 						Annotations: map[string]string{
-							kueuealpha.PodSetRequiredTopologyAnnotation:  "cloud.com/rack",
-							kueuealpha.PodSetPreferredTopologyAnnotation: "cloud.com/rack",
+							kueue.PodSetRequiredTopologyAnnotation:  "cloud.com/rack",
+							kueue.PodSetPreferredTopologyAnnotation: "cloud.com/rack",
 						},
 					},
 				).
diff --git a/test/integration/singlecluster/webhook/jobs/pytorchjob_webhook_test.go b/test/integration/singlecluster/webhook/jobs/pytorchjob_webhook_test.go
index 93378ab1c..b49334ae6 100644
--- a/test/integration/singlecluster/webhook/jobs/pytorchjob_webhook_test.go
+++ b/test/integration/singlecluster/webhook/jobs/pytorchjob_webhook_test.go
@@ -22,7 +22,7 @@ import (
 	"github.com/onsi/gomega"
 	corev1 "k8s.io/api/core/v1"
 
-	kueuealpha "sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/pkg/controller/jobs/kubeflow/jobs/pytorchjob"
 	"sigs.k8s.io/kueue/pkg/util/testing"
 	testingjobspytorchjob "sigs.k8s.io/kueue/pkg/util/testingjobs/pytorchjob"
@@ -54,8 +54,8 @@ var _ = ginkgo.Describe("PyTorchJob Webhook", ginkgo.Ordered, func() {
 						ReplicaType:  kftraining.PyTorchJobReplicaTypeMaster,
 						ReplicaCount: 1,
 						Annotations: map[string]string{
-							kueuealpha.PodSetRequiredTopologyAnnotation:  "cloud.com/rack",
-							kueuealpha.PodSetPreferredTopologyAnnotation: "cloud.com/rack",
+							kueue.PodSetRequiredTopologyAnnotation:  "cloud.com/rack",
+							kueue.PodSetPreferredTopologyAnnotation: "cloud.com/rack",
 						},
 					},
 				).
diff --git a/test/integration/singlecluster/webhook/jobs/tfjob_webhook_test.go b/test/integration/singlecluster/webhook/jobs/tfjob_webhook_test.go
index b67c0b672..9cbb211ca 100644
--- a/test/integration/singlecluster/webhook/jobs/tfjob_webhook_test.go
+++ b/test/integration/singlecluster/webhook/jobs/tfjob_webhook_test.go
@@ -22,7 +22,7 @@ import (
 	"github.com/onsi/gomega"
 	corev1 "k8s.io/api/core/v1"
 
-	kueuealpha "sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/pkg/controller/jobs/kubeflow/jobs/tfjob"
 	"sigs.k8s.io/kueue/pkg/util/testing"
 	testingjobstfjob "sigs.k8s.io/kueue/pkg/util/testingjobs/tfjob"
@@ -54,8 +54,8 @@ var _ = ginkgo.Describe("TFJob Webhook", ginkgo.Ordered, func() {
 						ReplicaType:  kftraining.TFJobReplicaTypeChief,
 						ReplicaCount: 1,
 						Annotations: map[string]string{
-							kueuealpha.PodSetRequiredTopologyAnnotation:  "cloud.com/rack",
-							kueuealpha.PodSetPreferredTopologyAnnotation: "cloud.com/rack",
+							kueue.PodSetRequiredTopologyAnnotation:  "cloud.com/rack",
+							kueue.PodSetPreferredTopologyAnnotation: "cloud.com/rack",
 						},
 					},
 				).
diff --git a/test/integration/singlecluster/webhook/jobs/xgboostjob_webhook_test.go b/test/integration/singlecluster/webhook/jobs/xgboostjob_webhook_test.go
index e672a3f19..d6fa2145f 100644
--- a/test/integration/singlecluster/webhook/jobs/xgboostjob_webhook_test.go
+++ b/test/integration/singlecluster/webhook/jobs/xgboostjob_webhook_test.go
@@ -22,7 +22,7 @@ import (
 	"github.com/onsi/gomega"
 	corev1 "k8s.io/api/core/v1"
 
-	kueuealpha "sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/pkg/controller/jobs/kubeflow/jobs/xgboostjob"
 	"sigs.k8s.io/kueue/pkg/util/testing"
 	testingjobsxgboostjob "sigs.k8s.io/kueue/pkg/util/testingjobs/xgboostjob"
@@ -54,8 +54,8 @@ var _ = ginkgo.Describe("XGBoostJob Webhook", ginkgo.Ordered, func() {
 						ReplicaType:  kftraining.XGBoostJobReplicaTypeMaster,
 						ReplicaCount: 1,
 						Annotations: map[string]string{
-							kueuealpha.PodSetRequiredTopologyAnnotation:  "cloud.com/rack",
-							kueuealpha.PodSetPreferredTopologyAnnotation: "cloud.com/rack",
+							kueue.PodSetRequiredTopologyAnnotation:  "cloud.com/rack",
+							kueue.PodSetPreferredTopologyAnnotation: "cloud.com/rack",
 						},
 					},
 				).