diff --git a/lib/bb/fetch2/__init__.py b/lib/bb/fetch2/__init__.py
index 9cb268be5..1c3bab6d7 100644
--- a/lib/bb/fetch2/__init__.py
+++ b/lib/bb/fetch2/__init__.py
@@ -1564,6 +1564,8 @@ class FetchMethod(object):
 
         if unpack:
             tar_cmd = ['tar', '--extract', '--no-same-owner']
+            if 'fixperms' in urldata.parm and urldata.parm['fixperms'] == '1':
+                tar_cmd.append('--delay-directory-restore')
             if 'striplevel' in urldata.parm:
                 striplevel = urldata.parm['striplevel']
                 if not striplevel.isdigit():
@@ -1659,6 +1661,9 @@ class FetchMethod(object):
         bb.note("Unpacking %s to %s/" % (file, unpackdir))
         _run(cmd)
 
+        if 'fixperms' in urldata.parm and urldata.parm['fixperms'] == '1':
+            _run(['chmod', '-R', '+X', unpackdir])
+
         if iterate is True:
             iterate_urldata = urldata
             iterate_urldata.localpath = "%s/%s" % (rootdir, iterate_file)
