diff --git a/tcp_tests/managers/runtestmanager.py b/tcp_tests/managers/runtestmanager.py
index bc39643..a354d01 100644
--- a/tcp_tests/managers/runtestmanager.py
+++ b/tcp_tests/managers/runtestmanager.py
@@ -39,8 +39,7 @@
     def __init__(self, config, underlay, salt_api, cluster_name,
                  domain_name, tempest_threads,
                  tempest_pattern=settings.TEMPEST_PATTERN,
-                 run_cmd=None, target='gtw01*', control_host='ctl01*',
-                 compute_host='cmp001*'):
+                 run_cmd=None):
         self.__config = config
         self.underlay = underlay
         self.__salt_api = salt_api
@@ -49,98 +48,26 @@
         self.tempest_threads = tempest_threads
         self.tempest_pattern = tempest_pattern
         self.run_cmd = run_cmd or self.run_cmd
-        self.target_name = self.underlay.get_target_node_names(target)[0]
         self.master_name = self.underlay.get_target_node_names(
             self.master_host)[0]
-        self.control_name = control_host
-        self.compute_name = compute_host
-        self.barbican = False
+        self.__target_name = None
 
     @property
     def salt_api(self):
         return self.__salt_api
 
     @property
-    def runtest_pillar(self):
-        public_net = self.__config.underlay.dhcp_ranges[
-            settings.EXTERNAL_ADDRESS_POOL_NAME]
-        public_gateway = public_net["gateway"].encode("ascii")
-        public_cidr = public_net["cidr"].encode("ascii")
-        public_allocation_start = public_net["start"].encode("ascii")
-        public_allocation_end = public_net["end"].encode("ascii")
-        tempest_test_target = self.target_name.encode("ascii") + "*"
-
-        pillar = {
-            'classes': ['service.runtest.tempest',
-                        'service.runtest.tempest.public_net',
-                        'service.runtest.tempest.services.manila.glance'],
-            'parameters': {
-                '_param': {
-                    'runtest_tempest_cfg_dir': TEMPEST_CFG_DIR,
-                    'runtest_tempest_cfg_name': 'tempest.conf',
-                    'runtest_tempest_public_net': 'public',
-                    'openstack_public_neutron_subnet_gateway': public_gateway,
-                    'openstack_public_neutron_subnet_cidr': public_cidr,
-                    'openstack_public_neutron_subnet_allocation_start':
-                        public_allocation_start,
-                    'openstack_public_neutron_subnet_allocation_end':
-                        public_allocation_end,
-                    'tempest_test_target': tempest_test_target,
-                    'glance_image_cirros_location':
-                        'http://cz8133.bud.mirantis.net:8099'
-                        '/cirros-0.3.5-x86_64-disk.img',
-                    'glance_image_fedora_location':
-                        'http://cz8133.bud.mirantis.net:8099'
-                        '/Fedora-Cloud-Base-27-1.6.x86_64.qcow2',
-                    'glance_image_manila_location':
-                        'http://cz8133.bud.mirantis.net:8099'
-                        '/manila-service-image-master.qcow2',
-                },
-                'neutron': {
-                    'client': {
-                        'enabled': True
-                    }
-                },
-                'runtest': {
-                    'enabled': True,
-                    'keystonerc_node': 'ctl01*',
-                    'tempest': {
-                        'enabled': True,
-                        'cfg_dir': '${_param:runtest_tempest_cfg_dir}',
-                        'cfg_name': '${_param:runtest_tempest_cfg_name}',
-                        'put_keystone_rc_enabled': True,
-                        'put_local_image_file_enabled': False,
-                        'DEFAULT': {
-                            'log_file': 'tempest.log'
-                        },
-                        'compute': {
-                            'min_compute_nodes': 2,
-                        },
-                        'convert_to_uuid': {
-                            'network': {
-                                'public_network_id':
-                                '${_param:runtest_tempest_public_net}'
-                            }
-                        },
-                        'heat_plugin': {
-                            'build_timeout': '600'
-                        },
-                        'share': {
-                            'capability_snapshot_support': True,
-                            'run_driver_assisted_migration_tests': False,
-                            'run_manage_unmanage_snapshot_tests': False,
-                            'run_manage_unmanage_tests': False,
-                            'run_migration_with_preserve_snapshots_tests':
-                                False,
-                            'run_quota_tests': True,
-                            'run_replication_tests': False,
-                            'run_snapshot_tests': True,
-                        }}}}}
-
-        if self.barbican:
-            pillar['classes'].append('service.runtest.tempest.barbican')
-
-        return pillar
+    def target_name(self):
+        if not self.__target_name:
+            result = self.salt_api.get_pillar(
+                tgt=self.master_name,
+                pillar="runtest:tempest:test_target")
+            target_host = (result[0].get(self.master_name))
+            if target_host[-1] == "*":
+                target_host = target_host[:-1]
+            self.__target_name = self.underlay.get_target_node_names(
+                target_host)[0]
+        return self.__target_name
 
     def fetch_arficats(self, username=None, file_format='xml'):
         with self.underlay.remote(node_name=self.target_name,
@@ -156,25 +83,6 @@
                 destination=report,  # noqa
                 target=os.getcwd())
 
-    def store_runtest_model(self, runtest_pillar=None):
-        with self.underlay.yaml_editor(
-                file_path="/srv/salt/reclass/classes/cluster/"
-                          "{cluster_name}/infra/"
-                          "{class_name}.yml".format(
-                              cluster_name=self.cluster_name,
-                              class_name=self.class_name),
-                node_name=self.master_name) as editor:
-            editor.content = runtest_pillar or self.runtest_pillar
-        with self.underlay.yaml_editor(
-                file_path="/srv/salt/reclass/nodes/_generated/"
-                          "cfg01.{domain_name}.yml".format(
-                              domain_name=self.domain_name),
-                node_name=self.master_name) as editor:
-            editor.content['classes'].append(
-                'cluster.{cluster_name}.infra.{class_name}'.format(
-                    cluster_name=self.cluster_name,
-                    class_name=self.class_name))
-
     def save_runtime_logs(self, logs=None, inspect=None):
         if logs:
             with open("{path}/{target}_tempest_run.log".format(
@@ -194,35 +102,10 @@
                                                indent=4, sort_keys=True)
                 f.write(container_inspect)
 
-    def prepare(self, store_run_test_model):
-        barbican_pillar = "nova:controller:barbican:enabled"
-        result = self.__salt_api.get_pillar(tgt=self.control_name,
-                                            pillar=barbican_pillar)
-        self.barbican = result[0].get(self.control_name, False)
-        if store_run_test_model:
-            self.store_runtest_model()
-        cirros_pillar = ("salt-call --out=newline_values_only "
-                         "pillar.get "
-                         "glance:client:identity:"
-                         "admin_identity:image:cirros:location")
-        dpdk_pillar = "linux:network:dpdk:enabled"
-        salt_cmd = "salt -l info --hard-crash --state-output=mixed "
+    def prepare(self):
         salt_call_cmd = "salt-call -l info --hard-crash --state-output=mixed "
-
-        result = self.__salt_api.get_pillar(tgt=self.compute_name,
-                                            pillar=dpdk_pillar)
-
-        dpdk = result[0].get(self.compute_name, False)
-        LOG.info("DPDK enabled: {}".format(bool(dpdk)))
-
         commands = [
             {
-                'description': "Sync salt objects for runtest model",
-                'node_name': self.master_name,
-                'cmd': ("set -ex;" +
-                        salt_cmd + "'*' saltutil.refresh_pillar && " +
-                        salt_cmd + "'*' saltutil.sync_all")},
-            {
                 'description': ("Install docker-ce package and "
                                 "enable packets forwarding"),
                 'node_name': self.target_name,
@@ -236,71 +119,12 @@
                         salt_call_cmd + " pip.install setuptools && " +
                         salt_call_cmd + " pip.install docker")},
             {
-                'description': "Run salt.minion state for runtest formula",
-                'node_name': self.master_name,
-                'cmd': ("set -ex;" +
-                        salt_call_cmd + " state.sls salt.minion && "
-                        " sleep 20")},
-            {
-                'description': "Enforce keystone state for neutronv2",
-                'node_name': self.master_name,
-                'cmd': ("set -ex;" +
-                        salt_call_cmd + " state.sls keystone.client")},
-            {
-                'description': "Create networks for Tempest tests",
-                'node_name': self.master_name,
-                'cmd': ("set -ex;" +
-                        salt_call_cmd + " state.sls neutron.client")},
-            {
-                'description': "Create flavors for Tempest tests",
-                'node_name': self.master_name,
-                'cmd': ("set -ex;" +
-                        salt_call_cmd + " state.sls nova.client")},
-            {
-                'description': "Upload images for Tempest",
-                'node_name': self.master_name,
-                'cmd': ("set -ex;" +
-                        salt_call_cmd + " state.sls glance.client")},
-            {
                 'description': "Generate config for Tempest",
                 'node_name': self.master_name,
                 'cmd': ("set -ex;" +
-                        salt_call_cmd + " state.sls runtest")},
-            {
-                'description': "Upload cirros image",
-                'node_name': self.master_name,
-                'cmd': ("set -ex;"
-                        "cirros_url=$({}) && {} '{}' cmd.run "
-                        "\"wget $cirros_url -O /tmp/TestCirros-0.3.5.img\""
-                        .format(cirros_pillar, salt_cmd, self.target_name))},
+                        "salt-run state.orchestrate " +
+                        "runtest.orchestrate.tempest")},
         ]
-
-        if dpdk:
-            commands.append({
-                'description': "Configure flavor for DPDK",
-                'node_name': self.control_name,
-                'cmd': ("set -ex;" +
-                        salt_call_cmd + " cmd.run "
-                        " '. /root/keystonercv3;"
-                        "  openstack flavor set m1.extra_tiny_test"
-                        "  --property hw:mem_page_size=any;"
-                        "  openstack flavor set m1.tiny_test"
-                        "  --property hw:mem_page_size=any'")},
-            )
-
-        if self.barbican:
-            commands.append({
-                'description': "Configure barbican",
-                'node_name': self.master_name,
-                'cmd': ("set -ex;" +
-                        salt_call_cmd +
-                        " state.sls barbican.client && " +
-                        salt_call_cmd +
-                        " state.sls runtest.test_accounts && " +
-                        salt_call_cmd +
-                        " state.sls runtest.barbican_sign_image")},
-            )
-
         self.__salt_api.execute_commands(commands=commands,
                                          label="Prepare for Tempest")
 
@@ -380,13 +204,12 @@
         return {'inspect': inspect,
                 'logs': logs}
 
-    def prepare_and_run_tempest(self, username='root',
-                                store_run_test_model=True):
+    def prepare_and_run_tempest(self, username='root'):
         """
         Run tempest tests
         """
         tempest_timeout = settings.TEMPEST_TIMEOUT
-        self.prepare(store_run_test_model=store_run_test_model)
+        self.prepare()
         test_res = self.run_tempest(tempest_timeout)
         self.fetch_arficats(username=username)
         self.save_runtime_logs(**test_res)
