diff --git a/k8s/workspace/init-workspace.sh b/k8s/workspace/init-workspace.sh
index e85b0c3..f8ec98a 100644
--- a/k8s/workspace/init-workspace.sh
+++ b/k8s/workspace/init-workspace.sh
@@ -3,56 +3,27 @@
 function ewriteln() {
 	echo ${1} | tee -a $MY_PROJFOLDER/env.sh
 }
-function qkeystone() {
-	keystone_pod=$(kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml get pod -n openstack -o=custom-columns=NAME:.metadata.name | grep keystone-client)
-	# echo "# Running 'kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml -n openstack exec {} -c keystone-client --stdin -- "${1}"'"
-	kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml -n openstack exec ${keystone_pod} -c keystone-client --stdin -- '${1}'
-}
-function get_conformance_image_tag() {
-    kubeconfig_path=$1
-    k8s_server_version=$(kubectl --kubeconfig="$kubeconfig_path" version -o json 2>/dev/null | jq -r '.serverVersion.gitVersion')
-    k8s_short_version=${k8s_server_version:1:4}
-    image_tag=""
-    case $k8s_short_version in
-        "1.18")
-            image_tag="1.18.9-16"
-            ;;
-        "1.19")
-            image_tag="1.19.2-1"
-            ;;
-        "1.20")
-            image_tag="1.20.6-4"
-            ;;
-        "1.21")
-            image_tag="1.21.9-4"
-            ;;
-        "1.24")
-            image_tag="1.24.4-2"
-            ;;
-        "1.27")
-            image_tag="1.27.16-4"
-            ;;
-    esac
-    echo "$image_tag"
-}
 
+exec 2> >(while read line; do echo -e "\033[0;31m$line\033[0m" >&2; done)
 export MY_PROJFOLDER=/artifacts
 echo "# Using folder '$MY_PROJFOLDER'"
 cd $MY_PROJFOLDER
 [ ! -d envs ] && mkdir envs
+[ ! -d envs/checkers ] && mkdir envs/checkers
+[ ! -d envs/kubeconfigs ] && mkdir envs/kubeconfigs
 [ ! -d yamls ] && mkdir yamls
 [ ! -d reports ] && mkdir reports
 [ ! -d tmp ] && mkdir tmp
 
-# move mcc konfig to default place
-if [ -f $MY_PROJFOLDER/mcc-kubeconfig.yaml ]; then
-    mv $MY_PROJFOLDER/mcc-kubeconfig.yaml $MY_PROJFOLDER/envs/mcc-kubeconfig.yaml
+# move mgmt (k0rdent mothership) k8s konfig to default place
+if [ -f $MY_PROJFOLDER/mgmt-kubeconfig.yaml ]; then
+    mv $MY_PROJFOLDER/mgmt-kubeconfig.yaml $MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml
 fi
 if [ -f $MY_PROJFOLDER/node.key ]; then
     mv $MY_PROJFOLDER/node.key $MY_PROJFOLDER/envs/node.key
 fi
-if [ ! -f $MY_PROJFOLDER/envs/mcc-kubeconfig.yaml ]; then
-	echo "ERROR: MCC kubeconfig not found either at '$MY_PROJFOLDER/mcc-kubeconfig.yaml' or '$MY_PROJFOLDER/envs/mcc-kubeconfig.yaml'"
+if [ ! -f $MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml ]; then
+	echo "ERROR: k0rdent mgmt cluster (mothership) kubeconfig was not found either at '$MY_PROJFOLDER/mgmt-kubeconfig.yaml' or '$MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml'"
 	exit 1
 fi
 echo " "
@@ -60,7 +31,7 @@
 ### prepare needed variables
 echo "# Updating '$MY_PROJFOLDER/env.sh'"
 
-export KUBECONFIG=$MY_PROJFOLDER/envs/mcc-kubeconfig.yaml
+export KUBECONFIG=$MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml
 if [ ! -f $MY_PROJFOLDER/env.sh ]; then
 	touch $MY_PROJFOLDER/env.sh
 else
@@ -71,57 +42,46 @@
 ### Edit the following lines to set the client name, floating network name, IAM writer password
 ewriteln "export MY_CLIENTNAME='ClientName'"
 ewriteln "export MY_CLIENTSHORTNAME='clname'"
-ewriteln "export MY_PROJNAME='MOS_DEPLOY'"
-CUSTOM_PUBLIC_NET_NAME=""
-ewriteln "export WRITER_PASSWORD=''" # IAM (Keycloak) writer password
+ewriteln "export MY_PROJNAME='K0RDENT_DEPLOY'"
 
 ### Setting the project directory
 ewriteln "export MY_PROJFOLDER=/artifacts"
 
-# NS & CLUSTER
-printf "\n\n# Getting namespace and cluster"
-nn=( $(kubectl get cluster -A --no-headers -o=custom-columns=NAME:.metadata.name,NAMESPACE:.metadata.namespace | grep -v default) )
-echo "# Extracted data: '${nn[@]}'"
-vNS="${nn[1]}"
-vCLUSTER="${nn[0]}"
-ewriteln "export MOS_NS=${vNS}"
-ewriteln "export MOS_CLUSTER=${vCLUSTER}"
-echo "# Extracted NS: '${vNS}'"
-echo "# Extracted CLUSTER: '${vCLUSTER}'"
+printf "\n\n# Getting ready ClusterDeployments"
+printf "\n# For each ready cld, getting namespace and cluster"
+kubectl get cld -A --no-headers | awk '$3 == "True" {print $1, $2}' | while read -r namespace name; do
+    echo "   -> Processing $name in namespace $namespace..."
+    kubeconfig_secret="${name}-kubeconfig"
+    kubeconfig_file="$MY_PROJFOLDER/envs/kubeconfigs/${name}-kubeconfig.yaml"
 
-printf "\n\n# Writing additional options"
+    echo "   -> Fetching kubeconfig to $kubeconfig_file"
+    kubectl -n "$namespace" get secret "$kubeconfig_secret" \
+      -o jsonpath='{.data.value}' | base64 -d > "$kubeconfig_file"
+
+    rc_file="$MY_PROJFOLDER/envs/${name}rc"
+    echo "   -> Generating RC file at $rc_file"
+    cat <<EOF > "$rc_file"
+#!/bin/bash
+export KUBECONFIG=$MY_PROJFOLDER/envs/kubeconfigs/${name}-kubeconfig.yaml
+export CHILD_CLUSTER_NAME=${name}
+export CHILD_CLUSTER_NS=${namespace}
+EOF
+
+    chmod +x "$rc_file"
+done
+
+printf "\n\n# Writing additional options\n"
 ewriteln "export SI_BINARIES_DIR=$(which helm | rev | cut -d'/' -f2- | rev)"
 ewriteln "export HELM_BINARY_PATH=$(which helm)"
-ewriteln "export K8S_CONFORMANCE_CONCURRENCY=10"
 
-printf "\n\n# Writing additional options for K8S conformance tests for MCC cluster...\n"
-mcc_kubeconfig_path="$MY_PROJFOLDER/envs/mcc-kubeconfig.yaml"
-mcc_conformance_image_tag=$(get_conformance_image_tag "$mcc_kubeconfig_path")
-if [ -z "$mcc_conformance_image_tag" ]; then
-    echo "Could not identify K8S_CONFORMANCE_IMAGE_VERSION for MCC."
-fi
-mcc_conformance_image_url="mirantis.azurecr.io/lcm/kubernetes/k8s-conformance:v${mcc_conformance_image_tag}"
-ewriteln "export MCC_K8S_CONFORMANCE_IMAGE_VERSION='${mcc_conformance_image_tag}'"
-ewriteln "export MCC_K8S_CONFORMANCE_IMAGE_URL='${mcc_conformance_image_url}'"
-
-# getting IAM Keycloak URL
-ewriteln "export KEYCLOAK_URL=$(kubectl get cluster kaas-mgmt -o jsonpath='{.status.providerStatus.helm.releases.iam.keycloak.url}')"
-
-# extract MOS kubeconfig
-echo " "
-printf "\n\nExtracting mos-kubeconfig.yaml"
-if [[ ! -z ${vCLUSTER+x} ]]; then
-	kubectl --kubeconfig $MY_PROJFOLDER/envs/mcc-kubeconfig.yaml -n ${vNS} get secrets ${vCLUSTER}-kubeconfig -o jsonpath='{.data.admin\.conf}'  | base64 -d | sed 's/:5443/:443/g' | tee $MY_PROJFOLDER/envs/mos-kubeconfig.yaml
-else
-	echo "MOS_CLUSTER variable empty/invalid: '${vCLUSTER}'"
-fi
 
 # generate additional files
-printf "\n\nPreparing additional files"
+printf "\n\n# Preparing additional files\n"
 # copy files
 cp -v /opt/res-files/k8s/workspace/* $MY_PROJFOLDER/envs/
 [ ! -d $MY_PROJFOLDER/scripts ] && mkdir $MY_PROJFOLDER/scripts
 mv -v $MY_PROJFOLDER/envs/*.sh $MY_PROJFOLDER/scripts/
+mv -v $MY_PROJFOLDER/envs/*.env $MY_PROJFOLDER/envs/checkers
 
 cp -v /opt/res-files/k8s/yamls/qa-rally.yaml $MY_PROJFOLDER/yamls
 cp -v /opt/res-files/k8s/yamls/qa-res.yaml $MY_PROJFOLDER/yamls
@@ -131,81 +91,51 @@
 # remove duplicate init
 rm -v $MY_PROJFOLDER/scripts/init-workspace.sh
 # update IP Addresses
-mccip=$(cat $MY_PROJFOLDER/envs/mcc-kubeconfig.yaml | grep server | cut -d':' -f3 | cut -d'/' -f3)
-echo "-> MCC Server IP is: ${mccip}"
-sed -i "s/ip_address/$mccip/g" $MY_PROJFOLDER/envs/mcc-checker.env
+mgmt_ip=$(cat $MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml | grep server | cut -d':' -f3 | cut -d'/' -f3)
+echo "   -> MGMT (Mothership) Server IP is: ${mgmt_ip}"
+sed -i "s/ip_address/$mgmt_ip/g" $MY_PROJFOLDER/envs/checkers/mgmt-checker.env
 
-if [ -f $MY_PROJFOLDER/envs/mos-kubeconfig.yaml ]; then
-    mosip=$(cat $MY_PROJFOLDER/envs/mos-kubeconfig.yaml | grep server | cut -d':' -f3 | cut -d'/' -f3)
-    echo "-> MOS Server IP is: ${mosip}"
-    sed -i "s/ip_address/$mosip/g" $MY_PROJFOLDER/envs/mos-checker.env
 
-    vSC="$(kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml get sc | grep default | cut -d' ' -f1)"
-    echo "-> Storage class is ${vSC}"
-    echo "# Updating resources yaml "
-    sed -i "s/storage_class/${vSC}/g" $MY_PROJFOLDER/yamls/qa-res.yaml
-    echo " "
-    ewriteln "export MOS_SC=${vSC}"
+printf "\n\n# Preparing checker.env files for each child cluster, getting default SC...\n"
+ENV_DIR="$MY_PROJFOLDER/envs"
+CHECKERS_DIR="$MY_PROJFOLDER/envs/checkers"
+for kubeconfig_path in "$ENV_DIR"/kubeconfigs/*-kubeconfig.yaml; do
+    [[ -e "$kubeconfig_path" ]] || continue
+    name=$(basename "$kubeconfig_path" -kubeconfig.yaml)
 
-    ewriteln "export OSH_DEPLOYMENT_NAME=$(kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml -n openstack get openstackdeployment --no-headers | cut -d' ' -f1)"
-    ewriteln "export SI_BINARIES_DIR=$(which helm | rev | cut -d'/' -f2- | rev)"
-    ewriteln "export HELM_BINARY_PATH=$(which helm)"
+    echo "# Processing cluster - getting K8S IP: $name"
+    child_ip=$(grep server "$kubeconfig_path" | cut -d':' -f3 | cut -d'/' -f3)
+    echo "   -> Cluster ${name} Server IP is: ${child_ip}"
 
-    printf "\n\n# Writing additional options for K8S conformance tests for MOS cluster...\n"
-    mos_kubeconfig_path="$MY_PROJFOLDER/envs/mos-kubeconfig.yaml"
-    mos_conformance_image_tag=$(get_conformance_image_tag "$mos_kubeconfig_path")
-    if [ -z "$mos_conformance_image_tag" ]; then
-        echo "Could not identify K8S_CONFORMANCE_IMAGE_VERSION for MOS."
-    fi
-    mos_conformance_image_url="mirantis.azurecr.io/lcm/kubernetes/k8s-conformance:v${mos_conformance_image_tag}"
-    ewriteln "export MOS_K8S_CONFORMANCE_IMAGE_VERSION='${mos_conformance_image_tag}'"
-    ewriteln "export MOS_K8S_CONFORMANCE_IMAGE_URL='${mos_conformance_image_url}'"
+    checker_env="$CHECKERS_DIR/${name}-checker.env"
+    cp $CHECKERS_DIR/child-checker.env ${checker_env}
+    echo "   -> Generating checker.env for $name"
+    sed -i "s/ip_address/${child_ip}/g" "$checker_env"
 
-    echo " "
-    keystone_pod=$(kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml get pod -n openstack -o=custom-columns=NAME:.metadata.name | grep keystone-client)
-    if [ -n "${CUSTOM_PUBLIC_NET_NAME:-}" ]; then
-      # if CUSTOM_PUBLIC_NET_NAME is set to some specific net, check it is present on the cloud
-      echo "# Checking that the external network ${CUSTOM_PUBLIC_NET_NAME} is present on the cloud"
-      cmd="openstack network show ${CUSTOM_PUBLIC_NET_NAME} -c id -f value 2>/dev/null"
-      echo "# Running 'kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml -n openstack exec ${keystone_pod} -c keystone-client --stdin -- sh -c '${cmd}'"
-      network_exists=$(kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml -n openstack exec "${keystone_pod}" -c keystone-client --stdin -- sh -c "${cmd}")
-      if [ -n "$network_exists" ]; then
-        echo "# Setting TEMPEST_CUSTOM_PUBLIC_NET to ${CUSTOM_PUBLIC_NET_NAME}"
-        ewriteln "export TEMPEST_CUSTOM_PUBLIC_NET=${CUSTOM_PUBLIC_NET_NAME}"
-      else
-        echo "The custom external (floating) network ${CUSTOM_PUBLIC_NET_NAME} is not found on the cloud. Set CUSTOM_PUBLIC_NET_NAME=\"\" to automatically pick some public network."
-        exit 1
-      fi
+    default_sc=$(kubectl --kubeconfig "$kubeconfig_path" get sc 2>/dev/null | grep 'default' || true)
+
+    if [[ -n "$default_sc" ]]; then
+        vSC=$(echo "$default_sc" | awk '{print $1}')
+        echo "   -> Default storage class: $vSC"
     else
-      # else if it is not set by the QA engineer, let's extract the first external network and use it
-      echo "# Extracting network: taking the first found external network"
-      cmd="openstack network list --external -c Name -f value | head -n1"
-      echo "# Running 'kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml -n openstack exec ${keystone_pod} -c keystone-client --stdin -- sh -c '${cmd}'"
-      vPUBNET=$(kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml -n openstack exec ${keystone_pod} -c keystone-client --stdin -- sh -c "${cmd}")
-      echo "-> 'openstack network list --external -c Name -f value | head -n1': '${vPUBNET}'"
-      ewriteln "export TEMPEST_CUSTOM_PUBLIC_NET=${vPUBNET}"
+        vSC=""
+        echo "   -> No default storage class found."
     fi
 
-    echo "# Extracting volume types"
-    cmd_all="openstack volume type list -f value -c Name"
-    vVOLTYPES=( $(kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml -n openstack exec ${keystone_pod} -c keystone-client --stdin -- ${cmd_all}) )
-    echo "# Volume types available: ${vVOLTYPES[@]}"
-    cmd_default="openstack volume type list -f value -c Name --default"
-    vVOLTYPE=$(kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml -n openstack exec ${keystone_pod} -c keystone-client --stdin -- ${cmd_default})
-    echo "# Default volume type used: ${vVOLTYPE}"
-    ewriteln "export TEMPEST_CUSTOM_VOLUME_TYPE=${vVOLTYPE}"
-    # hardcoded values
-    ewriteln "# export TEMPEST_CUSTOM_FLAVOR=cvp.tiny"
-    ewriteln "# export TEMPEST_CUSTOM_IMAGE=cvp.cirros.61"
-    ewriteln "# export TEMPEST_CUSTOM_IMAGE_ALT=cvp.cirros.62"
-    #prepare tempest custom yaml
-    cp /opt/res-files/k8s/yamls/tempest_custom.yaml.clean $MY_PROJFOLDER/yamls/tempest_custom.yaml
-    ewriteln 'export TEMPEST_CUSTOM_PARAMETERS=$(cat $MY_PROJFOLDER/yamls/tempest_custom.yaml)'
-fi
+    rc_file="$ENV_DIR/${name}rc"
+
+    if [[ -f "$rc_file" ]]; then
+        echo "   -> Updating RC file: $rc_file"
+        echo "export CHILD_SC=${vSC}" >> "$rc_file"
+    else
+        echo "# RC file not found for $name — skipping."
+    fi
+
+done
 
 # Aliases
 ewriteln 'alias k=kubectl'
 
 # end
 echo " "
-echo "# Done!"
+echo "# ✅ Done!"
