diff --git a/meta/classes-global/staging.bbclass
b/meta/classes-global/staging.bbclass
index c0f5e3ebb6..896592fb7e 100644
--- a/meta/classes-global/staging.bbclass
+++ b/meta/classes-global/staging.bbclass
@@ -176,16 +176,26 @@ def staging_copydir(c, target, dest, seendirs):
         seendirs.add(dest)

 def staging_processfixme(fixme, target, recipesysroot,
recipesysrootnative, d):
-    import subprocess
-
     if not fixme:
         return
-    cmd = "sed -e 's:^[^/]*/:%s/:g' %s | xargs sed -i -e
's:FIXMESTAGINGDIRTARGET:%s:g; s:FIXMESTAGINGDIRHOST:%s:g'" % (target, "
".join(fixme), recipesysroot, recipesysrootnative)
-    for fixmevar in ['PSEUDO_SYSROOT', 'HOSTTOOLS_DIR', 'PKGDATA_DIR',
'PSEUDO_LOCALSTATEDIR', 'LOGFIFO']:
-        fixme_path = d.getVar(fixmevar)
-        cmd += " -e 's:FIXME_%s:%s:g'" % (fixmevar, fixme_path)
-    bb.debug(2, cmd)
-    subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
+
+    import re
+
+    fixme_vars = {re.escape("FIXME_" + fixmevar): 'd.getVar(fixmevar)' for
fixmevar in ['PSEUDO_SYSROOT', 'HOSTTOOLS_DIR', 'PKGDATA_DIR',
'PSEUDO_LOCALSTATEDIR', 'LOGFIFO']}
+    fixme_path = {"FIXMESTAGINGDIRTARGET": recipesysroot,
"FIXMESTAGINGDIRHOST": recipesysrootnative, **fixme_vars}
+    target_re = re.compile(r"^[^/]*(?=/)")
+    fixme_re = re.compile("|".join(fixme_path.keys()))
+    fixme_files = set()
+    # Read fixme files
+    for path in fixme:
+        with open(path) as fixme_file:
+            fixme_files.update(target_re.sub(target, line.strip()) for
line in fixme_file.readlines())
+    # Fix files in-place
