diff --git a/vertical-pod-autoscaler/e2e/v1/actuation.go b/vertical-pod-autoscaler/e2e/v1/actuation.go
index 3a41cf7af78f55e3d3011c5bcb70227b99d3bee0..be4be3502c9a01f85a8521ddcebe3d8bc79bbf70 100644
--- a/vertical-pod-autoscaler/e2e/v1/actuation.go
+++ b/vertical-pod-autoscaler/e2e/v1/actuation.go
@@ -51,7 +51,7 @@ import (
 	"github.com/onsi/gomega"
 )
 
-var _ = ActuationSuiteE2eDescribe("Actuation [InPlaceOrRecreate]", func() {
+var _ = ActuationSuiteE2eDescribe("Actuation", ginkgo.Label("FG:InPlaceOrRecreate"), func() {
 	f := framework.NewDefaultFramework("vertical-pod-autoscaling")
 	f.NamespacePodSecurityEnforceLevel = podsecurity.LevelBaseline
 
diff --git a/vertical-pod-autoscaler/e2e/v1/admission_controller.go b/vertical-pod-autoscaler/e2e/v1/admission_controller.go
index ba4e451143b2b12e56387d73bf2c44b2b2841f84..502a07b81868eff79d6f7a380358984141b58aa3 100644
--- a/vertical-pod-autoscaler/e2e/v1/admission_controller.go
+++ b/vertical-pod-autoscaler/e2e/v1/admission_controller.go
@@ -42,6 +42,49 @@ const (
 	webhookName       = "vpa.k8s.io"
 )
 
+var _ = AdmissionControllerE2eDescribe("Admission-controller", ginkgo.Label("FG:InPlaceOrRecreate"), func() {
+	f := framework.NewDefaultFramework("vertical-pod-autoscaling")
+	f.NamespacePodSecurityEnforceLevel = podsecurity.LevelBaseline
+
+	ginkgo.BeforeEach(func() {
+		checkInPlaceOrRecreateTestsEnabled(f, true, false)
+		waitForVpaWebhookRegistration(f)
+	})
+
+	ginkgo.It("starts pods with new recommended request with InPlaceOrRecreate mode", func() {
+		d := NewHamsterDeploymentWithResources(f, ParseQuantityOrDie("100m") /*cpu*/, ParseQuantityOrDie("100Mi") /*memory*/)
+
+		ginkgo.By("Setting up a VPA CRD")
+		containerName := GetHamsterContainerNameByIndex(0)
+		vpaCRD := test.VerticalPodAutoscaler().
+			WithName("hamster-vpa").
+			WithNamespace(f.Namespace.Name).
+			WithTargetRef(hamsterTargetRef).
+			WithContainer(containerName).
+			WithUpdateMode(vpa_types.UpdateModeInPlaceOrRecreate).
+			AppendRecommendation(
+				test.Recommendation().
+					WithContainer(containerName).
+					WithTarget("250m", "200Mi").
+					WithLowerBound("250m", "200Mi").
+					WithUpperBound("250m", "200Mi").
+					GetContainerResources()).
+			Get()
+
+		InstallVPA(f, vpaCRD)
+
+		ginkgo.By("Setting up a hamster deployment")
+		podList := startDeploymentPods(f, d)
+
+		// Originally Pods had 100m CPU, 100Mi of memory, but admission controller
+		// should change it to recommended 250m CPU and 200Mi of memory.
+		for _, pod := range podList.Items {
+			gomega.Expect(pod.Spec.Containers[0].Resources.Requests[apiv1.ResourceCPU]).To(gomega.Equal(ParseQuantityOrDie("250m")))
+			gomega.Expect(pod.Spec.Containers[0].Resources.Requests[apiv1.ResourceMemory]).To(gomega.Equal(ParseQuantityOrDie("200Mi")))
+		}
+	})
+})
+
 var _ = AdmissionControllerE2eDescribe("Admission-controller", func() {
 	f := framework.NewDefaultFramework("vertical-pod-autoscaling")
 	f.NamespacePodSecurityEnforceLevel = podsecurity.LevelBaseline
@@ -916,41 +959,6 @@ var _ = AdmissionControllerE2eDescribe("Admission-controller", func() {
 		gomega.Expect(err).To(gomega.HaveOccurred(), "Invalid VPA object accepted")
 		gomega.Expect(err.Error()).To(gomega.MatchRegexp(`.*admission webhook .*vpa.* denied the request: .*`), "Admission controller did not inspect the object")
 	})
-
-	ginkgo.It("starts pods with new recommended request with InPlaceOrRecreate mode", func() {
-		checkInPlaceOrRecreateTestsEnabled(f, true, false)
-
-		d := NewHamsterDeploymentWithResources(f, ParseQuantityOrDie("100m") /*cpu*/, ParseQuantityOrDie("100Mi") /*memory*/)
-
-		ginkgo.By("Setting up a VPA CRD")
-		containerName := GetHamsterContainerNameByIndex(0)
-		vpaCRD := test.VerticalPodAutoscaler().
-			WithName("hamster-vpa").
-			WithNamespace(f.Namespace.Name).
-			WithTargetRef(hamsterTargetRef).
-			WithContainer(containerName).
-			WithUpdateMode(vpa_types.UpdateModeInPlaceOrRecreate).
-			AppendRecommendation(
-				test.Recommendation().
-					WithContainer(containerName).
-					WithTarget("250m", "200Mi").
-					WithLowerBound("250m", "200Mi").
-					WithUpperBound("250m", "200Mi").
-					GetContainerResources()).
-			Get()
-
-		InstallVPA(f, vpaCRD)
-
-		ginkgo.By("Setting up a hamster deployment")
-		podList := startDeploymentPods(f, d)
-
-		// Originally Pods had 100m CPU, 100Mi of memory, but admission controller
-		// should change it to recommended 250m CPU and 200Mi of memory.
-		for _, pod := range podList.Items {
-			gomega.Expect(pod.Spec.Containers[0].Resources.Requests[apiv1.ResourceCPU]).To(gomega.Equal(ParseQuantityOrDie("250m")))
-			gomega.Expect(pod.Spec.Containers[0].Resources.Requests[apiv1.ResourceMemory]).To(gomega.Equal(ParseQuantityOrDie("200Mi")))
-		}
-	})
 })
 
 func startDeploymentPods(f *framework.Framework, deployment *appsv1.Deployment) *apiv1.PodList {
diff --git a/vertical-pod-autoscaler/e2e/v1/common.go b/vertical-pod-autoscaler/e2e/v1/common.go
index 7031c663b9f47393b47e475f9c29408377a2c8ff..80fb4db2046a62a29e08869817d6dbfa3d20205a 100644
--- a/vertical-pod-autoscaler/e2e/v1/common.go
+++ b/vertical-pod-autoscaler/e2e/v1/common.go
@@ -75,38 +75,35 @@ var hamsterTargetRef = &autoscaling.CrossVersionObjectReference{
 var hamsterLabels = map[string]string{"app": "hamster"}
 
 // SIGDescribe adds sig-autoscaling tag to test description.
-func SIGDescribe(text string, body func()) bool {
-	return ginkgo.Describe(fmt.Sprintf("[sig-autoscaling] %v", text), body)
-}
-
-// E2eDescribe describes a VPA e2e test.
-func E2eDescribe(scenario, name string, body func()) bool {
-	return SIGDescribe(fmt.Sprintf("[VPA] [%s] [v1] %s", scenario, name), body)
+// Takes args that are passed to ginkgo.Describe.
+func SIGDescribe(scenario, name string, args ...interface{}) bool {
+	full := fmt.Sprintf("[sig-autoscaling] [VPA] [%s] [v1] %s", scenario, name)
+	return ginkgo.Describe(full, args...)
 }
 
 // RecommenderE2eDescribe describes a VPA recommender e2e test.
-func RecommenderE2eDescribe(name string, body func()) bool {
-	return E2eDescribe(recommenderComponent, name, body)
+func RecommenderE2eDescribe(name string, args ...interface{}) bool {
+	return SIGDescribe(recommenderComponent, name, args...)
 }
 
 // UpdaterE2eDescribe describes a VPA updater e2e test.
-func UpdaterE2eDescribe(name string, body func()) bool {
-	return E2eDescribe(updateComponent, name, body)
+func UpdaterE2eDescribe(name string, args ...interface{}) bool {
+	return SIGDescribe(updateComponent, name, args...)
 }
 
 // AdmissionControllerE2eDescribe describes a VPA admission controller e2e test.
-func AdmissionControllerE2eDescribe(name string, body func()) bool {
-	return E2eDescribe(admissionControllerComponent, name, body)
+func AdmissionControllerE2eDescribe(name string, args ...interface{}) bool {
+	return SIGDescribe(admissionControllerComponent, name, args...)
 }
 
 // FullVpaE2eDescribe describes a VPA full stack e2e test.
-func FullVpaE2eDescribe(name string, body func()) bool {
-	return E2eDescribe(fullVpaSuite, name, body)
+func FullVpaE2eDescribe(name string, args ...interface{}) bool {
+	return SIGDescribe(fullVpaSuite, name, args...)
 }
 
 // ActuationSuiteE2eDescribe describes a VPA actuation e2e test.
-func ActuationSuiteE2eDescribe(name string, body func()) bool {
-	return E2eDescribe(actuationSuite, name, body)
+func ActuationSuiteE2eDescribe(name string, args ...interface{}) bool {
+	return SIGDescribe(actuationSuite, name, args...)
 }
 
 // GetHamsterContainerNameByIndex returns name of i-th hamster container.
diff --git a/vertical-pod-autoscaler/e2e/v1/full_vpa.go b/vertical-pod-autoscaler/e2e/v1/full_vpa.go
index 6c22563afa97f22fb22c4a55be599acf2839cc0e..ec1467f58a53c174a5bb0d9923658e8be0fcb2e6 100644
--- a/vertical-pod-autoscaler/e2e/v1/full_vpa.go
+++ b/vertical-pod-autoscaler/e2e/v1/full_vpa.go
@@ -61,12 +61,10 @@ var _ = FullVpaE2eDescribe("Pods under VPA", func() {
 	f := framework.NewDefaultFramework("vertical-pod-autoscaling")
 	f.NamespacePodSecurityEnforceLevel = podsecurity.LevelBaseline
 
-	ginkgo.Describe("with InPlaceOrRecreate update mode [InPlaceOrRecreate]", ginkgo.Ordered, func() {
-		ginkgo.BeforeAll(func() {
+	ginkgo.Describe("with InPlaceOrRecreate update mode", ginkgo.Label("FG:InPlaceOrRecreate"), func() {
+		ginkgo.BeforeEach(func() {
 			checkInPlaceOrRecreateTestsEnabled(f, true, false)
-		})
 
-		ginkgo.BeforeEach(func() {
 			ns := f.Namespace.Name
 			ginkgo.By("Setting up a hamster deployment")
 			rc = NewDynamicResourceConsumer("hamster", ns, KindDeployment,
diff --git a/vertical-pod-autoscaler/e2e/v1/updater.go b/vertical-pod-autoscaler/e2e/v1/updater.go
index ab78394c46ff8033fcb234749b99652e5fc332c0..a72cdf6b1eba179a4225ad84452f062489b87ea3 100644
--- a/vertical-pod-autoscaler/e2e/v1/updater.go
+++ b/vertical-pod-autoscaler/e2e/v1/updater.go
@@ -140,7 +140,7 @@ var _ = UpdaterE2eDescribe("Updater", func() {
 	})
 })
 
-var _ = UpdaterE2eDescribe("Updater [InPlaceOrRecreate]", func() {
+var _ = UpdaterE2eDescribe("Updater", ginkgo.Label("FG:InPlaceOrRecreate"), func() {
 	f := framework.NewDefaultFramework("vertical-pod-autoscaling")
 	f.NamespacePodSecurityEnforceLevel = podsecurity.LevelBaseline