diff --git a/test/auto-test/FTC850.sh b/test/auto-test/FTC850.sh
index f9f5be3..52456ca 100755
--- a/test/auto-test/FTC850.sh
+++ b/test/auto-test/FTC850.sh
@@ -20,10 +20,10 @@
 TC_ONELINE_DESCR="Create/delete policies in parallel over a number of rics using a number of child process"
 
 #App names to include in the test when running docker, space separated list
-DOCKER_INCLUDED_IMAGES="CBS CONSUL CP CR MR PA RICSIM SDNC NGW KUBEPROXY"
+DOCKER_INCLUDED_IMAGES="CBS CONSUL CP CR MR A1PMS RICSIM SDNC NGW KUBEPROXY"
 
 #App names to include in the test when running kubernetes, space separated list
-KUBE_INCLUDED_IMAGES="CP CR MR PA RICSIM SDNC KUBEPROXY NGW"
+KUBE_INCLUDED_IMAGES="CP CR MR A1PMS RICSIM SDNC KUBEPROXY NGW"
 #Prestarted app (not started by script) to include in the test when running kubernetes, space separated list
 KUBE_PRESTARTED_IMAGES=""
 
@@ -49,7 +49,7 @@
 # Tested variants of REST/DMAAP/SDNC config
 TESTED_VARIANTS="REST   REST+SDNC"
 
-#Test agent and simulator protocol versions (others are http only)
+#Test a1pms and simulator protocol versions (others are http only)
 TESTED_PROTOCOLS="HTTP HTTPS"
 
 NUM_RICS=20
@@ -57,7 +57,7 @@
 
 generate_policy_uuid
 
-if [ "$PMS_VERSION" == "V2" ]; then
+if [ "$A1PMS_VERSION" == "V2" ]; then
     notificationurl=$CR_SERVICE_APP_PATH_0"/test"
 else
     notificationurl=""
@@ -68,7 +68,7 @@
 
         echo "#####################################################################"
         echo "#####################################################################"
-        echo "### Testing agent: "$interface" and "$__httpx
+        echo "### Testing a1pms: "$interface" and "$__httpx
         echo "#####################################################################"
         echo "#####################################################################"
 
@@ -79,7 +79,7 @@
             if [[ $interface = *"SDNC"* ]]; then
                 use_sdnc_https
             fi
-            use_agent_rest_https
+            use_a1pms_rest_https
         else
             use_cr_http
             use_simulator_http
@@ -87,7 +87,7 @@
             if [[ $interface = *"SDNC"* ]]; then
                 use_sdnc_http
             fi
-            use_agent_rest_http
+            use_a1pms_rest_http
         fi
 
         # Clean container and start all needed containers #
@@ -103,9 +103,9 @@
             start_gateway $SIM_GROUP/$NRT_GATEWAY_COMPOSE_DIR/$NRT_GATEWAY_CONFIG_FILE
         fi
 
-        start_policy_agent NORPOXY $SIM_GROUP/$POLICY_AGENT_COMPOSE_DIR/$POLICY_AGENT_CONFIG_FILE
+        start_a1pms NORPOXY $SIM_GROUP/$A1PMS_COMPOSE_DIR/$A1PMS_CONFIG_FILE
 
-        set_agent_debug
+        set_a1pms_debug
 
         if [[ $interface = *"SDNC"* ]]; then
             start_sdnc
@@ -115,21 +115,21 @@
         fi
 
         if [ $RUNMODE == "KUBE" ]; then
-            agent_load_config                       ".consul_config.json"
+            a1pms_load_config                       ".consul_config.json"
         else
-            if [[ "$PMS_FEATURE_LEVEL" == *"NOCONSUL"* ]]; then
-                api_put_configuration 200 ".consul_config.json"
+            if [[ "$A1PMS_FEATURE_LEVEL" == *"NOCONSUL"* ]]; then
+                a1pms_api_put_configuration 200 ".consul_config.json"
             else
                 start_consul_cbs
                 consul_config_app                   ".consul_config.json"
             fi
         fi
 
-        start_mr # Not used, but removes error messages from the agent log
+        start_mr # Not used, but removes error messages from the a1pms log
 
         start_cr 1
 
-        api_get_status 200
+        a1pms_api_get_status 200
 
         for ((i=1; i<=$NUM_RICS; i++))
         do
@@ -142,21 +142,21 @@
             sim_put_policy_type 201 ricsim_g1_$i 1 testdata/OSC/sim_1.json
         done
 
-        if [ "$PMS_VERSION" == "V2" ]; then
-            api_equal json:policy-types 1 300  #Wait for the agent to refresh types from the simulator
+        if [ "$A1PMS_VERSION" == "V2" ]; then
+            a1pms_equal json:policy-types 1 300  #Wait for the a1pms to refresh types from the simulator
         else
-            api_equal json:policy_types 1 300  #Wait for the agent to refresh types from the simulator
+            a1pms_equal json:policy_types 1 300  #Wait for the a1pms to refresh types from the simulator
         fi
 
-        api_put_service 201 "serv1" 600 "$CR_SERVICE_APP_PATH_0/1"
+        a1pms_api_put_service 201 "serv1" 600 "$CR_SERVICE_APP_PATH_0/1"
 
-        echo "Check the number of types in the agent for each ric is 1"
+        echo "Check the number of types in the a1pms for each ric is 1"
         for ((i=1; i<=$NUM_RICS; i++))
         do
-            if [ "$PMS_VERSION" == "V2" ]; then
-                api_equal json:policy-types?ric_id=ricsim_g1_$i 1 120
+            if [ "$A1PMS_VERSION" == "V2" ]; then
+                a1pms_equal json:policy-types?ric_id=ricsim_g1_$i 1 120
             else
-                api_equal json:policy_types?ric=ricsim_g1_$i 1 120
+                a1pms_equal json:policy_types?ric=ricsim_g1_$i 1 120
             fi
         done
 
@@ -164,12 +164,12 @@
 
         start_timer "Create $((NUM_POLICIES_PER_RIC*$NUM_RICS)) polices over $interface using "$__httpx
 
-        api_put_policy_parallel 201 "serv1" ricsim_g1_ $NUM_RICS 1 $START_ID NOTRANSIENT $notificationurl testdata/OSC/pi1_template.json $NUM_POLICIES_PER_RIC 7
+        a1pms_api_put_policy_parallel 201 "serv1" ricsim_g1_ $NUM_RICS 1 $START_ID NOTRANSIENT $notificationurl testdata/OSC/pi1_template.json $NUM_POLICIES_PER_RIC 7
 
         print_timer "Create $((NUM_POLICIES_PER_RIC*$NUM_RICS)) polices over $interface using "$__httpx
 
         INSTANCES=$(($NUM_RICS*$NUM_POLICIES_PER_RIC))
-        api_equal json:policies $INSTANCES
+        a1pms_equal json:policies $INSTANCES
 
         for ((i=1; i<=$NUM_RICS; i++))
         do
@@ -178,11 +178,11 @@
 
         start_timer "Delete $((NUM_POLICIES_PER_RIC*$NUM_RICS)) polices over $interface using "$__httpx
 
-        api_delete_policy_parallel 204 $NUM_RICS $START_ID $NUM_POLICIES_PER_RIC 7
+        a1pms_api_delete_policy_parallel 204 $NUM_RICS $START_ID $NUM_POLICIES_PER_RIC 7
 
         print_timer "Delete $((NUM_POLICIES_PER_RIC*$NUM_RICS)) polices over $interface using "$__httpx
 
-        api_equal json:policies 0
+        a1pms_equal json:policies 0
 
         for ((i=1; i<=$NUM_RICS; i++))
         do
@@ -194,11 +194,11 @@
             if [ $interface == "REST+SDNC" ]; then
                 sim_contains_str ricsim_g1_$i remote_hosts $SDNC_APP_NAME
             else
-                sim_contains_str ricsim_g1_$i remote_hosts $POLICY_AGENT_APP_NAME
+                sim_contains_str ricsim_g1_$i remote_hosts $A1PMS_APP_NAME
             fi
         done
 
-        check_policy_agent_logs
+        check_a1pms_logs
         if [[ $interface = *"SDNC"* ]]; then
             check_sdnc_logs
         fi
