diff --git a/scripts/prepare-refapp.sh b/scripts/prepare-refapp.sh
new file mode 100644
index 0000000..e7ff161
--- /dev/null
+++ b/scripts/prepare-refapp.sh
@@ -0,0 +1,41 @@
+#!/bin/bash
+
+FLAVOR='cvp.high'
+IMAGE='cvp.ubuntu.2004'
+EXT_NET='public'
+DNS_SERVERS='[]' # example of the custom value: DNS_SERVERS='["192.168.129.5", "192.168.129.254"]'
+APP_DOCKER_IMAGE='mirantis.azurecr.io/openstack/openstack-refapp:0.1.2' # you can replace with some local copy for offline cloud
+
+REFAPP_PATH=/opt/density/openstack-refapp/
+
+# Check the private CVP key, convert to the public one
+cvp_private_key=/opt/cmp-check/cvp_testkey
+if [ -e ${cvp_private_key} ]; then
+    ssh-keygen -y -f ${cvp_private_key} > ${REFAPP_PATH}/cvp_testkey.pub
+else
+    echo "The key file at ${cvp_private_key} does not exist. Please run \"cd /opt/cmp-check && bash /opt/cmp-check/prepare.sh -w $(pwd) && cd ${REFAPP_PATH}\" to create a key and other test resources."
+    exit 1
+fi
+
+TOP_FILE=${REFAPP_PATH}/heat-templates/top.yaml
+
+# Replace the default public key with the CVP one
+cvp_key=$(cat ${REFAPP_PATH}/cvp_testkey.pub)
+escaped_cvp_key=$(echo "$cvp_key" | sed -e 's/[\/&]/\\&/g')
+sed -i "/^ *cluster_public_key:/,/default:/ s/default:.*/default: '$escaped_cvp_key'/" $TOP_FILE
+
+# Replace the flavor
+sed -i "/^ *database_flavor:/,/default:/ s/default:.*/default: '$FLAVOR'/" $TOP_FILE
+
+# Replace the image
+sed -i "/^ *database_image:/,/default:/ s/default:.*/default: '$IMAGE'/" $TOP_FILE
+
+# Replace the external net
+sed -i "/^ *public_network_id:/,/default:/ s/default:.*/default: '$EXT_NET'/" $TOP_FILE
+
+# Replace the DNS servers list
+sed -i "/^ *dns_nameservers:/,/default:/ s/default:.*/default: $DNS_SERVERS/" $TOP_FILE
+
+# Replace the docker image for RefApp application if the cloud has no Internet access
+ESC_APP_DOCKER_IMAGE=$(sed 's/[\/&]/\\&/g' <<< "$APP_DOCKER_IMAGE")
+sed -i "/^\s*app_docker_image:/,/default:/ s/default:.*/default: '$ESC_APP_DOCKER_IMAGE'/" $TOP_FILE
diff --git a/scripts/run-refapp-density.sh b/scripts/run-refapp-density.sh
new file mode 100644
index 0000000..731657d
--- /dev/null
+++ b/scripts/run-refapp-density.sh
@@ -0,0 +1,93 @@
+#!/bin/bash
+
+
+# Set variables
+HEAT_STACK_PREFIX=refapp
+ITERATIONS_START=1
+ITERATIONS_END=10
+LOG_FILE="./run-refapp-density-${ITERATIONS_START}-${ITERATIONS_END}.log"
+DATA_FILE="./run-refapp-density-${ITERATIONS_START}-${ITERATIONS_END}.csv"
+
+# source CVP project credentials
+source /opt/cmp-check/cvprc
+
+start_test() {
+  # Start test
+  #export OS_CLOUD=openstack
+  TEST_START_DATE=$(date +%s)
+  echo "Test started at $(date)" >> ${LOG_FILE}
+  echo "DATE;ITERATION_NUM;STACK_CREATION_DATE_DELTA;APP_REQUEST_TIME_ROOT;APP_REQUEST_TIME_POST_RECORD;APP_REQUEST_TIME_GET_RECORDS;APP_REQUEST_TIME_GET_RECORD" >> ${DATA_FILE}
+  for ITERATION_NUM in `seq ${ITERATIONS_START} ${ITERATIONS_END}`
+  do
+    STACK_CREATION_START_DATE=$(date +%s)
+    openstack stack create -t heat-templates/top.yaml ${HEAT_STACK_PREFIX}-${ITERATION_NUM} --wait | tee -a ${LOG_FILE}
+    STACK_STATUS=$(openstack stack show ${HEAT_STACK_PREFIX}-${ITERATION_NUM} -f value -c stack_status)
+    echo "$(date) ${HEAT_STACK_PREFIX}-${ITERATION_NUM} stack status is ${STACK_STATUS}" >> ${LOG_FILE}
+    STACK_CREATION_END_DATE=$(date +%s)
+    STACK_CREATION_DATE_DELTA=$((${STACK_CREATION_END_DATE} - ${STACK_CREATION_START_DATE}))
+    if [ ${STACK_STATUS} == "CREATE_COMPLETE" ]
+    then
+      APP_URL=$(openstack stack show ${HEAT_STACK_PREFIX}-${ITERATION_NUM} -f value -c outputs | jq -cr '.[] | select(.output_key | contains("app_url")) | .output_value')
+      # TODO implement awaiting for successful first curl
+      sleep 30
+      # Make sure that the app is already available
+      curl -m 60 -s -o /dev/null ${APP_URL}
+      EXIT_CODE=$(echo $?)
+      if [ ${EXIT_CODE} != 0 ]
+      then
+        echo "curl command can't reach ${APP_URL} from ${HEAT_STACK_PREFIX}-${ITERATION_NUM} stack. Exit code ${EXIT_CODE}" >> ${LOG_FILE}
+      fi
+
+      UNIQ_LB_MEMBERS_COUNT=0
+      RETRY_NUMBER=0
+      while (( ${UNIQ_LB_MEMBERS_COUNT} != 3 && ${RETRY_NUMBER} <= 600 ))
+      do
+        UNIQ_LB_MEMBERS_COUNT=$(for LB_MEMBER in {1..3}; do curl -m 10 -s ${APP_URL} | jq -r .host; done | sort | uniq | wc -l)
+        RETRY_NUMBER=$((${RETRY_NUMBER} + 1))
+        sleep 1
+      done
+      if [ ${UNIQ_LB_MEMBERS_COUNT} != 3 ]
+      then
+        echo "$(date) There are only ${UNIQ_LB_MEMBERS_COUNT} LB members instead of 3 for ${APP_URL} LB endpoint from ${HEAT_STACK_PREFIX}-${ITERATION_NUM} stack." >> ${LOG_FILE}
+      fi
+
+      APP_REQUEST_TIME_ROOT=$(curl -m 10 -s -w %{time_total} -o /dev/null ${APP_URL})
+      EXIT_CODE=$(echo $?)
+      if [ ${EXIT_CODE} != 0 ]
+      then
+        echo "curl command can't reach ${APP_URL} from ${HEAT_STACK_PREFIX}-${ITERATION_NUM} stack. Exit code ${EXIT_CODE}" >> ${LOG_FILE}
+      fi
+      APP_REQUEST_TIME_POST_RECORD=$(curl -m 10 -s -w %{time_total} -X POST -H "Content-Type: application/json" --data '{"record": {"data": "spam"}}' -o /dev/null ${APP_URL}/records)
+      EXIT_CODE=$(echo $?)
+      if [ ${EXIT_CODE} != 0 ]
+      then
+        echo "curl command can't reach ${APP_URL}/records with POST requst from ${HEAT_STACK_PREFIX}-${ITERATION_NUM} stack. Exit code ${EXIT_CODE}" >> ${LOG_FILE}
+      fi
+      APP_REQUEST_TIME_GET_RECORDS=$(curl -m 10 -s -w %{time_total} -o /dev/null ${APP_URL}/records)
+      EXIT_CODE=$(echo $?)
+      if [ ${EXIT_CODE} != 0 ]
+      then
+        echo "curl command can't reach ${APP_URL}/records from ${HEAT_STACK_PREFIX}-${ITERATION_NUM} stack. Exit code ${EXIT_CODE}" >> ${LOG_FILE}
+      fi
+      APP_REQUEST_TIME_GET_RECORD=$(curl -m 10 -s -w %{time_total} -o /dev/null ${APP_URL}/record/1)
+      EXIT_CODE=$(echo $?)
+      if [ ${EXIT_CODE} != 0 ]
+      then
+        echo "curl command can't reach ${APP_URL}/records/1 from ${HEAT_STACK_PREFIX}-${ITERATION_NUM} stack. Exit code ${EXIT_CODE}" >> ${LOG_FILE}
+      fi
+      # Write the results to CSV
+      echo "$(date);ITERATION-${ITERATION_NUM};${STACK_CREATION_DATE_DELTA};${APP_REQUEST_TIME_ROOT};${APP_REQUEST_TIME_POST_RECORD};${APP_REQUEST_TIME_GET_RECORDS};${APP_REQUEST_TIME_GET_RECORD}" >> ${DATA_FILE}
+    else
+      echo "$(date);ITERATION-${ITERATION_NUM};${STACK_STATUS}" >> ${DATA_FILE}
+    fi
+  done
+  TEST_END_DATE=$(date +%s)
+  TEST_DURATION=$((TEST_END_DATE - TEST_START_DATE))
+  echo "$(date) Full test duration is ${TEST_DURATION} seconds" >> ${LOG_FILE}
+}
+
+main() {
+  start_test
+}
+
+main
\ No newline at end of file
