diff --git a/meta/classes/cross-canadian.bbclass b/meta/classes/cross-canadian.bbclass
index 47fb0ab..7dc20c6 100644
--- a/meta/classes/cross-canadian.bbclass
+++ b/meta/classes/cross-canadian.bbclass
@@ -90,7 +90,8 @@ export PKG_CONFIG_DIR = "${STAGING_DIR_HOST}${layout_libdir}/pkgconfig"
 export PKG_CONFIG_SYSROOT_DIR = "${STAGING_DIR_HOST}"
 
 # Cross-canadian packages need to pull in nativesdk dynamic libs
-SHLIBSDIR = "${STAGING_DIR}/${SDK_ARCH}-nativesdk${SDK_VENDOR}-${BUILD_OS}/shlibs"
+SHLIBSDIRS = "${TMPDIR}/pkgdata/${HOST_ARCH}-nativesdk${HOST_VENDOR}-${HOST_OS}/shlibs/ ${TMPDIR}/pkgdata/all-${HOST_VENDOR}-${HOST_OS}/shlibs/"
+SHLIBSDIR = "${TMPDIR}/pkgdata/${HOST_ARCH}-nativesdk${HOST_VENDOR}-${HOST_OS}/shlibs/"
 
 do_populate_sysroot[stamp-extra-info] = ""
 do_package[stamp-extra-info] = ""
diff --git a/meta/classes/native.bbclass b/meta/classes/native.bbclass
index eb30b5a..93f96f5 100644
--- a/meta/classes/native.bbclass
+++ b/meta/classes/native.bbclass
@@ -88,7 +88,6 @@ do_populate_sysroot[sstate-outputdirs] = "${STAGING_DIR_NATIVE}"
 # Since we actually install these into situ there is no staging prefix
 STAGING_DIR_HOST = ""
 STAGING_DIR_TARGET = ""
-SHLIBSDIR = "${STAGING_DIR_NATIVE}/shlibs"
 PKG_CONFIG_DIR = "${libdir}/pkgconfig"
 
 EXTRA_NATIVE_PKGCONFIG_PATH ?= ""
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
index 0300277..76979bd 100644
--- a/meta/classes/package.bbclass
+++ b/meta/classes/package.bbclass
@@ -1292,8 +1292,16 @@ python package_do_filedeps() {
         d.setVar("FILERPROVIDESFLIST_" + pkg, " ".join(provides_files))
 }
 
-SHLIBSDIR = "${STAGING_DIR_HOST}/shlibs"
-SHLIBSWORKDIR = "${WORKDIR}/shlibs"
+def getshlibsdirs(d):
+    dirs = []
+    triplets = (d.getVar("PKGTRIPLETS") or "").split()
+    for t in triplets:
+        dirs.append("${TMPDIR}/pkgdata/" + t + "/shlibs/")
+    return " ".join(dirs)
+
+SHLIBSDIRS = "${@getshlibsdirs(d)}"
+SHLIBSDIR = "${TMPDIR}/pkgdata/${PACKAGE_ARCH}${TARGET_VENDOR}-${TARGET_OS}/shlibs"
+SHLIBSWORKDIR = "${PKGDESTWORK}/shlibs"
 
 python package_do_shlibs() {
     import re, pipes
@@ -1318,7 +1326,7 @@ python package_do_shlibs() {
 
     pkgdest = d.getVar('PKGDEST', True)
 
-    shlibs_dir = d.getVar('SHLIBSDIR', True)
+    shlibs_dirs = d.getVar('SHLIBSDIRS', True).split()
     shlibswork_dir = d.getVar('SHLIBSWORKDIR', True)
 
     # Take shared lock since we're only reading, not writing
@@ -1472,7 +1480,7 @@ python package_do_shlibs() {
             d.setVar('pkg_postinst_%s' % pkg, postinst)
 
     list_re = re.compile('^(.*)\.list$')
-    for dir in [shlibs_dir]:
+    for dir in shlibs_dirs:
         if not os.path.exists(dir):
             continue
         for file in os.listdir(dir):
@@ -1543,7 +1551,7 @@ python package_do_pkgconfig () {
     workdir = d.getVar('WORKDIR', True)
     pkgdest = d.getVar('PKGDEST', True)
 
-    shlibs_dir = d.getVar('SHLIBSDIR', True)
+    shlibs_dirs = d.getVar('SHLIBSDIRS', True).split()
     shlibswork_dir = d.getVar('SHLIBSWORKDIR', True)
 
     pc_re = re.compile('(.*)\.pc$')
@@ -1594,7 +1602,7 @@ python package_do_pkgconfig () {
                 f.write('%s\n' % p)
             f.close()
 
-    for dir in [shlibs_dir]:
+    for dir in shlibs_dirs:
         if not os.path.exists(dir):
             continue
         for file in os.listdir(dir):
@@ -1853,10 +1861,9 @@ SSTATETASKS += "do_package"
 do_package[sstate-name] = "package"
 do_package[cleandirs] = "${PKGDESTWORK}"
 do_package[sstate-plaindirs] = "${PKGD} ${PKGDEST}"
-do_package[sstate-inputdirs] = "${PKGDESTWORK} ${SHLIBSWORKDIR}"
-do_package[sstate-outputdirs] = "${PKGDATA_DIR} ${SHLIBSDIR}"
+do_package[sstate-inputdirs] = "${PKGDESTWORK}"
+do_package[sstate-outputdirs] = "${PKGDATA_DIR}"
 do_package[sstate-lockfile-shared] = "${PACKAGELOCK}"
-do_package[stamp-extra-info] = "${MACHINE}"
 do_package_setscene[dirs] = "${STAGING_DIR}"
 
 python do_package_setscene () {
