d.setVar('IMAGE_FEATURES', ' '.join(list(remain_features)))
 
+    if d.getVar('BB_WORKERCONTEXT', True) is not None:
+        runtime_mapping_rename("PACKAGE_INSTALL", d)
+        runtime_mapping_rename("PACKAGE_INSTALL_ATTEMPTONLY", d)
+
     # Ensure we have the vendor list for complementary package handling
     ml_vendor_list = ""
     multilibs = d.getVar('MULTILIBS', True) or ""
     d.setVar('MULTILIB_VENDORS', ml_vendor_list)
 }
 
-python image_handler () {
-    if not isinstance(e, bb.event.RecipeParsed):
-        return
-
-    # If we don't do this we try and run the mapping hooks while parsing which is slow
-    # bitbake should really provide something to let us know this...
-    if e.data.getVar('BB_WORKERCONTEXT', True) is not None:
-        runtime_mapping_rename("PACKAGE_INSTALL", e.data)
-        runtime_mapping_rename("PACKAGE_INSTALL_ATTEMPTONLY", e.data)
-
-}
-addhandler image_handler
-
 #
 # Get a list of files containing device tables to create.
 # * IMAGE_DEVICE_TABLE is the old name to an absolute path to a device table file
 
 
 SDK_PACKAGING_FUNC ?= "create_shar"
 
-python () {
-    # If we don't do this we try and run the mapping hooks while parsing which is slow
-    # bitbake should really provide something to let us know this...
-    if bb.data.getVar('BB_WORKERCONTEXT', d, True) is not None:
-        runtime_mapping_rename("TOOLCHAIN_TARGET_TASK", d)
-}
-
 fakeroot python do_populate_sdk() {
+    runtime_mapping_rename("TOOLCHAIN_TARGET_TASK", d)
+
     bb.build.exec_func("populate_sdk_image", d)
 
     # Handle multilibs in the SDK environment, siteconfig, etc files...