diff --git a/meta/lib/oeqa/utils/__init__.py b/meta/lib/oeqa/utils/__init__.py
index 53bdcbf2661..e03f7e33bb0 100644
--- a/meta/lib/oeqa/utils/__init__.py
+++ b/meta/lib/oeqa/utils/__init__.py
@@ -96,4 +96,10 @@ def get_json_result_dir(d):
     custom_json_result_dir = d.getVar("OEQA_JSON_RESULT_DIR")
     if custom_json_result_dir:
         json_result_dir = custom_json_result_dir
-    return json_result_dir
\ No newline at end of file
+    return json_result_dir
+
+def get_artefact_dir(d):
+    custom_json_result_dir = d.getVar("OEQA_ARTEFACT_DIR")
+    if custom_json_result_dir:
+        return custom_json_result_dir
+    return os.path.join(d.getVar("LOG_DIR"), 'oeqa-artefacts')
diff --git a/meta/lib/oeqa/utils/postactions.py b/meta/lib/oeqa/utils/postactions.py
index 15f423218eb..2de2d18328e 100644
--- a/meta/lib/oeqa/utils/postactions.py
+++ b/meta/lib/oeqa/utils/postactions.py
@@ -7,23 +7,20 @@
 # Run a set of actions after tests. The runner provides internal data
 # dictionary as well as test context to any action to run.
 
-from oeqa.utils import get_json_result_dir
-
-def create_artifacts_directory(d, tc):
-    import shutil
-
-    local_artifacts_dir = os.path.join(get_json_result_dir(d), "artifacts")
-    if os.path.isdir(local_artifacts_dir):
-        shutil.rmtree(local_artifacts_dir)
-
-    os.makedirs(local_artifacts_dir)
+import datetime
+import io
+import os
+import stat
+import subprocess
+import tempfile
+from oeqa.utils import get_artefact_dir
 
 ##################################################################
 # Host/target statistics
 ##################################################################
 
-def get_target_disk_usage(d, tc):
-    output_file = os.path.join(get_json_result_dir(d), "artifacts", "target_disk_usage.txt")
+def get_target_disk_usage(d, tc, artifacts_list, outputdir):
+    output_file = os.path.join(outputdir, "target_disk_usage.txt")
     try:
         (status, output) = tc.target.run('df -h')
         with open(output_file, 'w') as f:
@@ -32,10 +29,10 @@ def get_target_disk_usage(d, tc):
     except Exception as e:
         bb.warn(f"Can not get target disk usage: {e}")
 
-def get_host_disk_usage(d, tc):
+def get_host_disk_usage(d, tc, artifacts_list, outputdir):
     import subprocess
 
-    output_file = os.path.join(get_json_result_dir(d), "artifacts", "host_disk_usage.txt")
+    output_file = os.path.join(outputdir, "host_disk_usage.txt")
     try:
         with open(output_file, 'w') as f:
             output = subprocess.run(['df', '-hl'], check=True, text=True, stdout=f, env={})
@@ -61,25 +58,20 @@ def get_artifacts_list(target, raw_list):
 
     return result
 
-def retrieve_test_artifacts(target, artifacts_list, target_dir):
-    import io, subprocess
-    local_artifacts_dir = os.path.join(target_dir, "artifacts")
+def list_and_fetch_failed_tests_artifacts(d, tc, artifacts_list, outputdir):
+    artifacts_list = get_artifacts_list(tc.target, artifacts_list)
+    if not artifacts_list:
+        bb.warn("Could not load artifacts list, skip artifacts retrieval")
+        return
     try:
         cmd = "tar zcf - " + " ".join(artifacts_list)
-        (status, output) = target.run(cmd, raw = True)
+        (status, output) = tc.target.run(cmd, raw = True)
         if status != 0 or not output:
             raise Exception("Error while fetching compressed artifacts")
-        p = subprocess.run(["tar", "zxf", "-", "-C", local_artifacts_dir], input=output)
+        p = subprocess.run(["tar", "zxf", "-", "-C", outputdir], input=output)
     except Exception as e:
         bb.warn(f"Can not retrieve {artifact_path} from test target: {e}")
 
-def list_and_fetch_failed_tests_artifacts(d, tc):
-    artifacts_list = get_artifacts_list(tc.target, d.getVar("TESTIMAGE_FAILED_QA_ARTIFACTS"))
-    if not artifacts_list:
-        bb.warn("Could not load artifacts list, skip artifacts retrieval")
-    else:
-        retrieve_test_artifacts(tc.target, artifacts_list, get_json_result_dir(d))
-
 
 ##################################################################
 # General post actions runner
@@ -91,12 +83,17 @@ def run_failed_tests_post_actions(d, tc):
     if not artifacts:
         return
 
+    outputdir = get_artefact_dir(d)
+    os.makedirs(outputdir, exist_ok=True)
+    datestr = datetime.datetime.now().strftime('%Y%m%d')
+    outputdir = tempfile.mkdtemp(prefix='oeqa-target-artefacts-%s-' % datestr, dir=outputdir)
+    os.chmod(outputdir, stat.S_IRWXU | stat.S_IRGRP | stat.S_IXGRP | stat.S_IROTH | stat.S_IXOTH)
+
     post_actions=[
-        create_artifacts_directory,
         list_and_fetch_failed_tests_artifacts,
         get_target_disk_usage,
         get_host_disk_usage
     ]
 
     for action in post_actions:
-        action(d, tc)
+        action(d, tc, artifacts, outputdir)
