diff --git a/src/com/mirantis/mcp/MCPArtifactory.groovy b/src/com/mirantis/mcp/MCPArtifactory.groovy
index da6d508..14bd19f 100644
--- a/src/com/mirantis/mcp/MCPArtifactory.groovy
+++ b/src/com/mirantis/mcp/MCPArtifactory.groovy
@@ -607,3 +607,15 @@
     }
     return artifactsDescription
 }
+
+/**
+ * Get artifactory server object
+ *
+ * @param serverName     Artifactory server name
+ */
+def getArtifactoryServer(serverName = ''){
+    if (!serverName) {
+        error ("Artifactory serverName must be specified")
+    }
+    return Artifactory.server(serverName)
+}
diff --git a/src/com/mirantis/mk/Git.groovy b/src/com/mirantis/mk/Git.groovy
index 4c06288..17b0cf3 100644
--- a/src/com/mirantis/mk/Git.groovy
+++ b/src/com/mirantis/mk/Git.groovy
@@ -539,6 +539,7 @@
     def amend = params.get('amend', false)
     def jsonChange = params.get('gerritPatch', [:])
     def changeId = params.get('changeId', '')
+    def remote = params.get('remote', 'origin')
     def commit
 
     if (!jsonChange) {
@@ -572,7 +573,7 @@
     dir(repo){
         commit = getGitCommit()
     }
-    pushForReview(repo, creds, commit, branch, topic)
+    pushForReview(repo, creds, commit, branch, topic, remote)
 }
 
 /**
diff --git a/src/com/mirantis/mk/KaasUtils.groovy b/src/com/mirantis/mk/KaasUtils.groovy
index ee72758..311b420 100644
--- a/src/com/mirantis/mk/KaasUtils.groovy
+++ b/src/com/mirantis/mk/KaasUtils.groovy
@@ -69,10 +69,13 @@
     def runUie2e = env.RUN_UI_E2E ? env.RUN_UI_E2E.toBoolean() : false
     def runUie2eNew = env.RUN_UI_E2E_NEW ? env.RUN_UI_E2E_NEW.toBoolean() : false
     def runMgmtConformance = env.RUN_MGMT_CFM ? env.RUN_MGMT_CFM.toBoolean() : false
+    def runMgmtConformanceNetworkPolicy = env.RUN_MGMT_CFM_NETWORK_POLICY ? env.RUN_MGMT_CFM_NETWORK_POLICY.toBoolean() : false
     def runLMATest = env.RUN_LMA_TEST ? env.RUN_LMA_TEST.toBoolean() : false
     def runMgmtUserControllerTest = env.RUN_MGMT_USER_CONTROLLER_TEST ? env.RUN_MGMT_USER_CONTROLLER_TEST.toBoolean() : false
     def runProxyChildTest = env.RUN_PROXY_CHILD_TEST ? env.RUN_PROXY_CHILD_TEST.toBoolean() : false
     def runChildConformance = env.RUN_CHILD_CFM ? env.RUN_CHILD_CFM.toBoolean() : false
+    def runChildConformanceNetworkPolicy = env.RUN_CHILD_CFM_NETWORK_POLICY ? env.RUN_CHILD_CFM_NETWORK_POLICY.toBoolean() : false
+    def runChildHPA = env.RUN_CHILD_HPA ? env.RUN_CHILD_HPA.toBoolean() : false
     def fetchServiceBinaries = env.FETCH_BINARIES_FROM_UPSTREAM ? env.FETCH_BINARIES_FROM_UPSTREAM.toBoolean() : false
     def equinixMetalV2ChildDiffMetro = env.EQUINIXMETALV2_CHILD_DIFF_METRO ? env.EQUINIXMETALV2_CHILD_DIFF_METRO.toBoolean() : false
     def runMaintenanceTest = env.RUN_MAINTENANCE_TEST ? env.RUN_MAINTENANCE_TEST.toBoolean() : false
@@ -85,6 +88,7 @@
     def runChildMachineDeletionPolicyTest = env.RUN_CHILD_MACHINE_DELETION_POLICY_TEST ? env.RUN_CHILD_MACHINE_DELETION_POLICY_TEST.toBoolean() : false
     def runChildCustomCertTest = env.RUN_CHILD_CUSTOM_CERT_TEST ? env.RUN_CHILD_CUSTOM_CERT_TEST.toBoolean() : false
     def runByoChildCustomCertTest = env.RUN_BYO_CHILD_CUSTOM_CERT_TEST ? env.RUN_BYO_CHILD_CUSTOM_CERT_TEST.toBoolean() : false
+    def runMgmtCustomCacheCertTest = env.RUN_MGMT_CUSTOM_CACHE_CERT_TEST ? env.RUN_MGMT_CUSTOM_CACHE_CERT_TEST.toBoolean() : false
     // multiregion configuration from env variable: comma-separated string in form $mgmt_provider,$regional_provider
     def multiregionalMappings = env.MULTIREGION_SETUP ? multiregionWorkflowParser(env.MULTIREGION_SETUP) : [
         enabled: false,
@@ -118,6 +122,7 @@
     def enableFips = env.ENABLE_FIPS ? env.ENABLE_FIPS.toBoolean() : false
     def aioCluster = env.AIO_CLUSTER ? env.AIO_CLUSTER.toBoolean() : false
     def useVsphereVvmtObjects = env.VSPHERE_USE_VVMT_OBJECTS ? env.VSPHERE_USE_VVMT_OBJECTS.toBoolean() : false
+    def enableBv2Smoke = true
 
     def commitMsg = env.GERRIT_CHANGE_COMMIT_MESSAGE ? new String(env.GERRIT_CHANGE_COMMIT_MESSAGE.decodeBase64()) : ''
     if (commitMsg ==~ /(?s).*\[mgmt-proxy\].*/ || env.GERRIT_EVENT_COMMENT_TEXT ==~ /(?s).*mgmt-proxy.*/) {
@@ -127,7 +132,8 @@
     if (commitMsg ==~ /(?s).*\[seed-macos\].*/ || env.GERRIT_EVENT_COMMENT_TEXT ==~ /(?s).*seed-macos.*/) {
         seedMacOs = true
     }
-    if (commitMsg ==~ /(?s).*\[child-deploy\].*/ || env.GERRIT_EVENT_COMMENT_TEXT ==~ /(?s).*child-deploy.*/ || upgradeChild || runChildConformance || runProxyChildTest) {
+    if (commitMsg ==~ /(?s).*\[child-deploy\].*/ || env.GERRIT_EVENT_COMMENT_TEXT ==~ /(?s).*child-deploy.*/ ||
+            upgradeChild || runChildConformance || runProxyChildTest || runChildHPA || runChildConformanceNetworkPolicy) {
         deployChild = true
     }
     if (commitMsg ==~ /(?s).*\[child-upgrade\].*/ || env.GERRIT_EVENT_COMMENT_TEXT ==~ /(?s).*child-upgrade.*/) {
@@ -207,6 +213,9 @@
     if (commitMsg ==~ /(?s).*\[mgmt-cfm\].*/ || env.GERRIT_EVENT_COMMENT_TEXT ==~ /(?s).*mgmt-cfm.*/) {
         runMgmtConformance = true
     }
+    if (commitMsg ==~ /(?s).*\[mgmt-cfm-netpolicy\].*/ || env.GERRIT_EVENT_COMMENT_TEXT ==~ /(?s).*mgmt-cfm-netpolicy.*/) {
+        runMgmtConformanceNetworkPolicy = true
+    }
     if (commitMsg ==~ /(?s).*\[test-user-controller\].*/ || env.GERRIT_EVENT_COMMENT_TEXT ==~ /(?s).*test-user-controller.*/) {
         runMgmtUserControllerTest = true
     }
@@ -219,6 +228,14 @@
         runChildConformance = true
         deployChild = true
     }
+    if (commitMsg ==~ /(?s).*\[child-cfm-netpolicy\].*/ || env.GERRIT_EVENT_COMMENT_TEXT ==~ /(?s).*child-cfm-netpolicy.*/) {
+        runChildConformanceNetworkPolicy = true
+        deployChild = true
+    }
+    if (commitMsg ==~ /(?s).*\[child-hpa\].*/ || env.GERRIT_EVENT_COMMENT_TEXT ==~ /(?s).*child-hpa.*/) {
+        runChildHPA = true
+        deployChild = true
+    }
     if (commitMsg ==~ /(?s).*\[lma-test\].*/ || env.GERRIT_EVENT_COMMENT_TEXT ==~ /(?s).*lma-test.*/) {
         runLMATest = true
         enableLMALogging = true
@@ -297,6 +314,13 @@
     if (commitMsg ==~ /(?s).*\[azure-demo\].*/ || env.GERRIT_EVENT_COMMENT_TEXT ==~ /(?s).*azure-demo\.*/) {
         azureOnDemandDemo = true
     }
+    if (commitMsg ==~ /(?s).*\[disable-all-demo\].*/ || env.GERRIT_EVENT_COMMENT_TEXT ==~ /(?s).*disable-all-demo\.*/) {
+        enableVsphereDemo = false
+        enableOSDemo = false
+        enableBMDemo = false
+        common.errorMsg('vSphere, BM, Openstack demo deployments will be aborted, VF -1 will be set')
+    }
+
     if (commitMsg ==~ /(?s).*\[disable-os-demo\].*/ || env.GERRIT_EVENT_COMMENT_TEXT ==~ /(?s).*disable-os-demo\.*/) {
         enableOSDemo = false
         common.errorMsg('Openstack demo deployment will be aborted, VF -1 will be set')
@@ -315,6 +339,10 @@
         enableVsphereUbuntu = true
         common.warningMsg('Ubuntu will be used to deploy vsphere machines')
     }
+    if (commitMsg ==~ /(?s).*\[disable-bv2-smoke\].*/ || env.GERRIT_EVENT_COMMENT_TEXT ==~ /(?s).*disable-bv2-smoke\.*/) {
+        enableBv2Smoke = false
+        common.errorMsg('Bootstrap v2 smoke checks will be aborted, WF -1 will be set')
+    }
 
     if (commitMsg ==~ /(?s).*\[disable-artifacts-build\].*/ || env.GERRIT_EVENT_COMMENT_TEXT ==~ /(?s).*disable-artifacts-build\.*/) {
         enableArtifactsBuild = false
@@ -332,6 +360,12 @@
         common.warningMsg('Child cluster deployment will be enabled since custom cert child test suite will be executed')
     }
 
+    if (commitMsg ==~ /(?s).*\[mgmt-custom-cache-cert-test\].*/ || env.GERRIT_EVENT_COMMENT_TEXT ==~ /(?s).*mgmt-custom-cache-cert-test\.*/) {
+        runMgmtCustomCacheCertTest = true
+        deployChild = true
+        common.warningMsg('Child cluster deployment will be enabled as the test replaces the mgmt and cluster childcertificates')
+    }
+
     if (commitMsg ==~ /(?s).*\[byo-child-custom-cert-test\].*/ || env.GERRIT_EVENT_COMMENT_TEXT ==~ /(?s).*byo-child-custom-cert-test\.*/) {
         runByoChildCustomCertTest = true
         attachBYO = true
@@ -452,6 +486,8 @@
         MOS child deploy scheduled: ${mosDeployChild}
         MOS child upgrade scheduled: ${mosUpgradeChild}
         Child conformance testing scheduled: ${runChildConformance}
+        Child conformance network policy testing scheduled: ${runChildConformanceNetworkPolicy}
+        Child HPA testing scheduled: ${runChildHPA}
         Single BYO cluster attachment scheduled: ${attachBYO}
         Single Attached BYO cluster upgrade test scheduled: ${upgradeBYO}
         BYO test matrix whole suite scheduled: ${runBYOMatrix}
@@ -461,6 +497,7 @@
         Mgmt LMA logging enabled: ${enableLMALogging}
         Deploy Os on child with mos release ${deployOsOnMos}
         Mgmt conformance testing scheduled: ${runMgmtConformance}
+        Mgmt conformance network policy testing scheduled: ${runMgmtConformanceNetworkPolicy}
         LMA testing scheduled: ${runLMATest}
         Mgmt user controller testing scheduled: ${runMgmtUserControllerTest}
         Mgmt UI e2e testing scheduled: ${runUie2e}
@@ -475,6 +512,7 @@
         Child machine deletion policy test: ${runChildMachineDeletionPolicyTest}
         Custom cert test for child clusters: ${runChildCustomCertTest}
         Custom cert test for Byo child clusters: ${runByoChildCustomCertTest}
+        Custom cache cert test for mgmt and child clusters: ${runMgmtCustomCacheCertTest}
         AWS provider deployment scheduled: ${awsOnDemandDemo}
         Equinix provider deployment scheduled: ${equinixOnDemandDemo}
         EquinixmetalV2 provider deployment scheduled: ${equinixMetalV2OnDemandDemo}
@@ -497,6 +535,7 @@
         Pause for debug enabled: ${pauseForDebug}
         AIO cluster: ${aioCluster}
         Use Vsphere VVMT Objects: ${useVsphereVvmtObjects}
+        Bootsrap v2 smoke checks enabled: ${enableBv2Smoke}
         Triggers: https://gerrit.mcp.mirantis.com/plugins/gitiles/kaas/core/+/refs/heads/master/hack/ci-gerrit-keywords.md""")
     return [
         osCloudLocation                          : openstackIMC,
@@ -510,6 +549,8 @@
         mosDeployChildEnabled                    : mosDeployChild,
         mosUpgradeChildEnabled                   : mosUpgradeChild,
         runChildConformanceEnabled               : runChildConformance,
+        runChildConformanceNetworkPolicyEnabled  : runChildConformanceNetworkPolicy,
+        runChildHPAEnabled                       : runChildHPA,
         attachBYOEnabled                         : attachBYO,
         upgradeBYOEnabled                        : upgradeBYO,
         runBYOMatrixEnabled                      : runBYOMatrix,
@@ -521,6 +562,7 @@
         runUie2eEnabled                          : runUie2e,
         runUie2eNewEnabled                       : runUie2eNew,
         runMgmtConformanceEnabled                : runMgmtConformance,
+        runMgmtConformanceNetworkPolicyEnabled   : runMgmtConformanceNetworkPolicy,
         runMaintenanceTestEnabled                : runMaintenanceTest,
         runContainerregistryTestEnabled          : runContainerregistryTest,
         runGracefulRebootTestEnabled             : runGracefulRebootTest,
@@ -529,6 +571,7 @@
         runRgnlDeleteMasterTestEnabled           : runRgnlDeleteMasterTest,
         runChildDeleteMasterTestEnabled          : runChildDeleteMasterTest,
         runChildCustomCertTestEnabled            : runChildCustomCertTest,
+        runMgmtCustomCacheCertTestEnabled        : runMgmtCustomCacheCertTest,
         runByoChildCustomCertTestEnabled         : runByoChildCustomCertTest,
         runChildMachineDeletionPolicyTestEnabled : runChildMachineDeletionPolicyTest,
         runLMATestEnabled                        : runLMATest,
@@ -555,7 +598,8 @@
         equinixMetalV2Metro                      : equinixMetalV2Metro,
         enableFips                               : enableFips,
         aioCluster                               : aioCluster,
-        useVsphereVvmtObjects                    : useVsphereVvmtObjects]
+        useVsphereVvmtObjects                    : useVsphereVvmtObjects,
+        bv2SmokeEnabled                          : enableBv2Smoke]
 }
 
 /**
@@ -830,6 +874,7 @@
         booleanParam(name: 'DEPLOY_OS_ON_MOS', value: triggers.deployOsOnMosEnabled),
         booleanParam(name: 'RUN_UI_E2E', value: triggers.runUie2eEnabled),
         booleanParam(name: 'RUN_MGMT_CFM', value: triggers.runMgmtConformanceEnabled),
+        booleanParam(name: 'RUN_MGMT_CFM_NETWORK_POLICY', value: triggers.runMgmtConformanceNetworkPolicyEnabled),
         booleanParam(name: 'RUN_MAINTENANCE_TEST', value: triggers.runMaintenanceTestEnabled),
         booleanParam(name: 'RUN_CONTAINER_REGISTRY_TEST', value: triggers.runContainerregistryTestEnabled),
         booleanParam(name: 'RUN_GRACEFUL_REBOOT_TEST', value: triggers.runGracefulRebootTestEnabled),
@@ -837,6 +882,7 @@
         booleanParam(name: 'RUN_RGNL_DELETE_MASTER_TEST', value: triggers.runRgnlDeleteMasterTestEnabled),
         booleanParam(name: 'RUN_CHILD_DELETE_MASTER_TEST', value: triggers.runChildDeleteMasterTestEnabled),
         booleanParam(name: 'RUN_CHILD_CUSTOM_CERT_TEST', value: triggers.runChildCustomCertTestEnabled),
+        booleanParam(name: 'RUN_MGMT_CUSTOM_CACHE_CERT_TEST', value: triggers.runMgmtCustomCacheCertTestEnabled),
         booleanParam(name: 'RUN_BYO_CHILD_CUSTOM_CERT_TEST', value: triggers.runByoChildCustomCertTestEnabled),
         booleanParam(name: 'RUN_CHILD_MACHINE_DELETION_POLICY_TEST', value: triggers.runChildMachineDeletionPolicyTestEnabled),
         booleanParam(name: 'RUN_LMA_TEST', value: triggers.runLMATestEnabled),
@@ -849,6 +895,8 @@
         booleanParam(name: 'UPGRADE_BYO', value: triggers.upgradeBYOEnabled),
         booleanParam(name: 'RUN_BYO_MATRIX', value: triggers.runBYOMatrixEnabled),
         booleanParam(name: 'RUN_CHILD_CFM', value: triggers.runChildConformanceEnabled),
+        booleanParam(name: 'RUN_CHILD_CFM_NETPOLICY', value: triggers.runChildConformanceNetworkPolicyEnabled),
+        booleanParam(name: 'RUN_CHILD_HPA', value: triggers.runChildHPAEnabled),
         booleanParam(name: 'ALLOW_AWS_ON_DEMAND', value: triggers.awsOnDemandDemoEnabled),
         booleanParam(name: 'ALLOW_EQUINIX_ON_DEMAND', value: triggers.equinixOnDemandDemoEnabled),
         booleanParam(name: 'ALLOW_EQUINIXMETALV2_ON_DEMAND', value: triggers.equinixMetalV2OnDemandDemoEnabled),
@@ -1371,3 +1419,84 @@
     // return the least loaded node
     return common.SortMapByValueAsc(nodesMap).collect { it.key }[0]
 }
+
+
+/**
+ * Get latest tag for test/frontend & equinix-private-infra images
+ * @param version   (str)    default tag value from main workflow
+ * @param isChanged (bool)   is dependent directory files were changed
+ * @param imageName (string) image name for information message
+ * @return:         (string) tag name
+ */
+def getImageTag(version, isChanged, imageName) {
+    def common = new com.mirantis.mk.Common()
+    def latestTag = '' 
+    if (!(env.GERRIT_EVENT_TYPE in ['change-merged', 'ref-updated']) && isChanged) {
+        latestTag = version
+    } else {
+        if (env.GERRIT_EVENT_TYPE == 'ref-updated') {
+            latestTag = env.GERRIT_REFNAME.replace('refs/tags/v', '').trim()
+        } else {
+            latestTag = env.GERRIT_BRANCH ? env.GERRIT_BRANCH : env.GERRIT_REFSPEC ? env.GERRIT_REFSPEC : 'master'
+            if (latestTag != 'master') {
+                latestTag = latestTag.replaceAll('/', '_')
+            }
+        }
+    }
+    common.infoMsg("${imageName} image will use tag '${latestTag}'")
+    return latestTag
+}
+
+
+/**
+ * Translates set of environment vars into actual replicator command line
+ * @return: (string cmdParams, string jobDescription)
+ *      cmdParams      - generated command line
+ *      jobDescription - job description
+ */
+def genReplicatorCommandLine() {
+    def mainModes = ['REPLICATE', 'CLEANUP', 'CHECK_REPOS', 'BIN_CLEANUP']
+    def parameterWithoutArgument = mainModes
+    def parametersList = parameterWithoutArgument + [
+        'ARTIFACT_FILTER',
+        'ARTIFACT_TYPE',
+        'BIN_CLEAN_KEEP_DAYS',
+        'BIN_CLEAN_PREFIX',
+        'DOCKER_TAG',
+        // DST_ will be changed to TARGET_
+        'DST_REPO',
+        'DST_REPO_TYPE',
+        'DST_USER',
+        'OLDER_THAN_DAYS',
+        'SLACK_BUILD_URL',
+        'SLACK_CHANNEL',
+        'SLACK_USER',
+        'SRC_REPO',
+        'SRC_REPO_TYPE',
+        'SRC_USER',
+        'SYNC_PATTERN',
+        'THREAD_COUNT'
+    ]
+    def mainModesDescriptions = [
+        'REPLICATE': 'Replicating binaries/Docker images',
+        'CLEANUP': 'Cleaning Docker images',
+        'BIN_CLEANUP': 'Cleaning binaries',
+        'CHECK_REPOS': 'Checking binaries'
+    ]
+
+    def cmdParams = ''
+    def jobDescription = ''
+    for (e in parametersList) {
+        if (env[e] == null || env[e] == '') {
+            continue
+        }
+        if (e in mainModes) {
+            jobDescription = mainModesDescriptions[e]
+        }
+        cmdParams += "-${e.replaceAll('_', '-').toLowerCase()} "
+        if (!(e in parameterWithoutArgument)) {
+            cmdParams += "'${env[e]}' "
+        }
+    }
+    return [cmdParams, jobDescription]
+}
