diff --git a/tcp_tests/managers/execute_commands.py b/tcp_tests/managers/execute_commands.py
index 56e2722..1b961b2 100644
--- a/tcp_tests/managers/execute_commands.py
+++ b/tcp_tests/managers/execute_commands.py
@@ -75,11 +75,13 @@
         """
         for n, step in enumerate(commands):
             # Required fields
-            cmd = step.get('cmd')
-            do = step.get('do')
+            action_cmd = step.get('cmd')
+            action_do = step.get('do')
+            action_upload = step.get('upload')
+            action_download = step.get('download')
             # node_name = step.get('node_name')
             # Optional fields
-            description = step.get('description', cmd)
+            description = step.get('description', action_cmd)
             # retry = step.get('retry', {'count': 1, 'delay': 1})
             # retry_count = retry.get('count', 1)
             # retry_delay = retry.get('delay', 1)
@@ -88,10 +90,14 @@
             msg = "[ {0} #{1} ] {2}".format(label, n + 1, description)
             LOG.info("\n\n{0}\n{1}".format(msg, '=' * len(msg)))
 
-            if cmd:
+            if action_cmd:
                 self.execute_command(step)
-            elif do:
+            elif action_do:
                 self.command2(step)
+            elif action_upload:
+                self.action_upload(step)
+            elif action_download:
+                self.action_download(step)
 
     def execute_command(self, step):
         # Required fields
@@ -202,3 +208,87 @@
                 # In the last retry iteration, raise an exception
                 raise Exception("Step '{0}' failed"
                                 .format(description))
+
+    def action_upload(self, step):
+        """Upload from local host to environment node
+
+        Example:
+
+        - description: Upload a file
+          upload:
+            local_path: /tmp/
+            local_filename: cirros*.iso
+            remote_path: /tmp/
+          node_name: ctl01
+          skip_fail: False
+        """
+        node_name = step.get('node_name')
+        local_path = step.get('upload', {}).get('local_path', None)
+        local_filename = step.get('upload', {}).get('local_filename', None)
+        remote_path = step.get('upload', {}).get('remote_path', None)
+        description = step.get('description', local_path)
+        skip_fail = step.get('skip_fail', False)
+
+        if not local_path or not local_filename or not remote_path:
+            raise Exception("Step '{0}' failed: please specify 'local_path', "
+                            "'local_filename' and 'remote_path' correctly"
+                            .format(description))
+
+        result = {}
+        with self.__underlay.local() as local:
+            result = local.execute('find {0} -type f -name {1}'
+                                   .format(local_path, local_filename))
+            LOG.info("Found files to upload:\n{0}".format(result))
+
+        if not result['stdout'] and not skip_fail:
+            raise Exception("Nothing to upload on step {0}"
+                            .format(description))
+
+        with self.__underlay.remote(node_name=node_name) as remote:
+            file_names = result['stdout']
+            for file_name in file_names:
+                LOG.info("Uploading {0} to {1}:{2}"
+                         .format(local_path, node_name, file_name))
+                remote.upload(source=local_path, target=file_name.rstrip())
+
+    def action_download(self, step):
+        """Download from environment node to local host
+
+        Example:
+
+        - description: Download a file
+          download:
+            remote_path: /tmp/
+            remote_filename: report*.html
+            local_path: /tmp/
+          node_name: ctl01
+          skip_fail: False
+        """
+        node_name = step.get('node_name')
+        remote_path = step.get('download', {}).get('remote_path', None)
+        remote_filename = step.get('download', {}).get('remote_filename', None)
+        local_path = step.get('download', {}).get('local_path', None)
+        description = step.get('description', remote_path)
+        skip_fail = step.get('skip_fail', False)
+
+        if not remote_path or not remote_filename or not local_path:
+            raise Exception("Step '{0}' failed: please specify 'remote_path', "
+                            "'remote_filename' and 'local_path' correctly"
+                            .format(description))
+
+        with self.__underlay.remote(node_name=node_name) as remote:
+
+            result = remote.execute('find {0} -type f -name {1}'
+                                    .format(remote_path, remote_filename))
+            LOG.info("Found files to download:\n{0}".format(result))
+
+            if not result['stdout'] and not skip_fail:
+                raise Exception("Nothing to download on step {0}"
+                                .format(description))
+
+            file_names = result['stdout']
+            for file_name in file_names:
+                LOG.info("Downloading {0}:{1} to {2}"
+                         .format(node_name, file_name, local_path))
+                remote.download(destination=file_name.rstrip(),
+                                target=local_path)
diff --git a/tcp_tests/managers/underlay_ssh_manager.py b/tcp_tests/managers/underlay_ssh_manager.py
index f30d7a0..53f5aee 100644
--- a/tcp_tests/managers/underlay_ssh_manager.py
+++ b/tcp_tests/managers/underlay_ssh_manager.py
@@ -17,6 +17,7 @@
 
 from devops.helpers import helpers
 from devops.helpers import ssh_client
+from devops.helpers import subprocess_runner
 from paramiko import rsakey
 import yaml
 
@@ -237,6 +238,19 @@
             private_keys=[rsakey.RSAKey(file_obj=StringIO.StringIO(key))
                           for key in ssh_data['keys']])
 
+    def local(self):
+        """Get Subprocess instance for local operations like:
+
+        underlay.local.execute(command, verbose=False, timeout=None)
+        underlay.local.check_call(
+            command, verbose=False, timeout=None,
+            error_info=None, expected=None, raise_on_err=True)
+        underlay.local.check_stderr(
+            command, verbose=False, timeout=None,
+            error_info=None, raise_on_err=True)
+        """
+        return subprocess_runner.Subprocess()
+
     def check_call(
             self, cmd,
             node_name=None, host=None, address_pool=None,
diff --git a/tcp_tests/templates/virtual-mcp-ocata-dvr/openstack.yaml b/tcp_tests/templates/virtual-mcp-ocata-dvr/openstack.yaml
index a125b87..25a5106 100644
--- a/tcp_tests/templates/virtual-mcp-ocata-dvr/openstack.yaml
+++ b/tcp_tests/templates/virtual-mcp-ocata-dvr/openstack.yaml
@@ -363,3 +363,11 @@
   node_name: {{ HOSTNAME_GTW01 }}
   retry: {count: 1, delay: 30}
   skip_fail: false
+
+- description: Download results
+  download:
+    remote_path: /root
+    remote_filename: "report_*.xml"
+    local_path: {{ os_env('PWD') }}
+  node_name: {{ HOSTNAME_GTW01 }}
+  skip_fail: false
diff --git a/tcp_tests/templates/virtual-mcp-ocata-ovs/openstack.yaml b/tcp_tests/templates/virtual-mcp-ocata-ovs/openstack.yaml
index 9ae8b00..8e37fe4 100644
--- a/tcp_tests/templates/virtual-mcp-ocata-ovs/openstack.yaml
+++ b/tcp_tests/templates/virtual-mcp-ocata-ovs/openstack.yaml
@@ -364,3 +364,11 @@
   node_name: {{ HOSTNAME_GTW01 }}
   retry: {count: 1, delay: 30}
   skip_fail: false
+
+- description: Download results
+  download:
+    remote_path: /root
+    remote_filename: "report_*.xml"
+    local_path: {{ os_env('PWD') }}
+  node_name: {{ HOSTNAME_GTW01 }}
+  skip_fail: false
diff --git a/tcp_tests/tests/system/test_install_mcp11_ovs_ocata.py b/tcp_tests/tests/system/test_install_mcp11_ovs_ocata.py
index 88c5cb7..f029744 100644
--- a/tcp_tests/tests/system/test_install_mcp11_ovs_ocata.py
+++ b/tcp_tests/tests/system/test_install_mcp11_ovs_ocata.py
@@ -34,14 +34,6 @@
 
         """
         LOG.info("*************** DONE **************")
-        gtw01 = [node_name for node_name in
-                 underlay.node_names() if 'gtw01' in node_name]
-        with underlay.remote(node_name=gtw01[0]) as gtw_remote:
-            result = gtw_remote.execute('find /root -name "report_*.xml"')
-            LOG.debug("Find result {0}".format(result))
-            file_name = result['stdout'][0].rstrip()
-            LOG.debug("Founded files {0}".format(file_name))
-            gtw_remote.download(destination=file_name, target=os.getcwd())
 
     @pytest.mark.fail_snapshot
     def test_mcp11_ocata_dvr_install(self, underlay, openstack_deployed,
@@ -54,14 +46,6 @@
 
         """
         LOG.info("*************** DONE **************")
-        gtw01 = [node_name for node_name in
-                 underlay.node_names() if 'gtw01' in node_name]
-        with underlay.remote(node_name=gtw01[0]) as gtw_remote:
-            result = gtw_remote.execute('find /root -name "report_*.xml"')
-            LOG.debug("Find result {0}".format(result))
-            file_name = result['stdout'][0].rstrip()
-            LOG.debug("Founded files {0}".format(file_name))
-            gtw_remote.download(destination=file_name, target=os.getcwd())
 
     @pytest.mark.fail_snapshot
     def test_mcp11_ocata_dpdk_install(self, underlay, openstack_deployed,
