diff --git a/import-layers/yocto-poky/meta/recipes-devtools/prelink/prelink_git.bb b/import-layers/yocto-poky/meta/recipes-devtools/prelink/prelink_git.bb
index e223ef6..0856b1c 100644
--- a/import-layers/yocto-poky/meta/recipes-devtools/prelink/prelink_git.bb
+++ b/import-layers/yocto-poky/meta/recipes-devtools/prelink/prelink_git.bb
@@ -8,7 +8,7 @@
 runtime and thus programs come up faster."
 LICENSE = "GPLv2"
 LIC_FILES_CHKSUM = "file://COPYING;md5=c93c0550bd3173f4504b2cbd8991e50b"
-SRCREV = "927979bbd115eeb8a75db3231906ef6aca4c4eb6"
+SRCREV = "ef20628dd78b92e1a3123afc67b64cf010bdd9e4"
 PV = "1.0+git${SRCPV}"
 
 #
@@ -44,6 +44,99 @@
 EXTRA_OECONF = "--disable-selinux --with-pkgversion=${PV}-${PR} \
 	--with-bugurl=http://bugzilla.yoctoproject.org/"
 
+
+#
+# For target prelink we need to ensure paths match the lib path layout
+# including for any configured multilibs
+#
+python do_linkerpaths () {
+    values = all_multilib_tune_list(["TUNE_ARCH", "baselib", "ABIEXTENSION"], d)
+
+    arches = values["TUNE_ARCH"]
+    baselibs = values["baselib"]
+    abis = values["ABIEXTENSION"]
+
+    def replace_lines(f, search, replacement, d, firstonly = False, secondonly = False):
+        f = d.expand(f)
+        if search == replacement:
+            return
+        bb.debug(2, "Replacing %s with %s in %s" % (search, replacement, f))
+        with open(f, "r") as data:
+            lines = data.readlines()
+        with open(f, "w") as data:
+            for line in lines:
+                if not secondonly and not firstonly:
+                    line = line.replace(search, replacement)
+                elif secondonly and search in line:
+                    secondonly = False
+                elif firstonly and search and search in line:
+                    line = line.replace(search, replacement)
+                    search = None
+                data.write(line)
+
+    def replace_lines_rtld(f, search, replacement, section, d):
+        f = d.expand(f)
+        bb.debug(2, "Replacing %s with %s in %s" % (search, replacement, f))
+        with open(f, "r") as data:
+            lines = data.readlines()
+        found = False
+        found2 = False
+        with open(f, "w") as data:
+            for line in lines:
+                if section in line:
+                    if section == "else" and "if" in line:
+                        found = False
+                    else:
+                        found = True
+                if found and "dst_LIB =" in line:
+                    found2 = True
+                elif "}" in line:
+                    found = False
+                    found2 = False
+                if found2:
+                    line = line.replace(search, replacement)
+                data.write(line)
+
+    for i, arch in enumerate(arches):
+        tune_baselib = baselibs[i]
+        abi = abis[i]
+
+        bits = 32
+        if arch == "powerpc":
+            replace_lines("${S}/src/arch-ppc.c", "/lib/ld.so.1", "/" + tune_baselib + "/ld.so.1", d)
+        elif arch == "powerpc64":
+            replace_lines("${S}/src/arch-ppc64.c", "/lib64/ld64.so.1", "/" + tune_baselib + "/ld64.so.1", d)
+            bits = 64
+        elif arch == "x86_64":
+            if abi == "x32":
+                replace_lines("${S}/src/arch-x86_64.c", "/libx32/ld-linux-x32.so.2", "/" + tune_baselib + "/ld-linux-x32.so.2", d)
+            else:
+                replace_lines("${S}/src/arch-x86_64.c", "/lib64/ld-linux-x86-64.so.2", "/" + tune_baselib + "/ld-linux-x86-64.so.2", d)
+            bits = 64
+        elif arch == "arm":
+            replace_lines("${S}/src/arch-arm.c", "/lib/ld-linux.so.3", "/" + tune_baselib + "/ld-linux.so.3", d)
+            replace_lines("${S}/src/arch-arm.c", "/lib/ld-linux-armhf.so.3", "/" + tune_baselib + "/ld-linux-armhf.so.3", d)
+        elif arch == "mips" or arch == "mipsel":
+            replace_lines("${S}/src/arch-mips.c", "/lib/ld.so.1", "/" + tune_baselib + "/ld.so.1", d, firstonly=True)
+            replace_lines("${S}/src/arch-mips.c", "/lib32/ld.so.1", "/" + tune_baselib + "/ld.so.1", d)
+        elif arch == "mips64" or arch == "mips64el":
+            replace_lines("${S}/src/arch-mips.c", "/lib/ld.so.1", "/" + tune_baselib + "/ld.so.1", d, secondonly=True)
+            replace_lines("${S}/src/arch-mips.c", "/lib64/ld.so.1", "/" + tune_baselib + "/ld.so.1", d)
+            bits = 64
+        elif arch.endswith("86"):
+            replace_lines("${S}/src/arch-i386.c", "/lib/ld-linux.so.2", "/" + tune_baselib + "/ld-linux.so.2", d)
+        if bits == 32 and tune_baselib != "lib":
+            replace_lines_rtld("${S}/src/rtld/rtld.c", "lib", tune_baselib, "else", d)
+        if bits == 64 and tune_baselib != "lib64":
+            replace_lines_rtld("${S}/src/rtld/rtld.c", "lib64", tune_baselib, "use_64bit", d)
+}
+
+python () {
+    overrides = d.getVar("OVERRIDES", True).split(":")
+    if "class-target" in overrides:
+        bb.build.addtask('do_linkerpaths', 'do_configure', 'do_patch', d)
+}
+
 do_configure_prepend () {
         # Disable documentation!
         echo "all:" > ${S}/doc/Makefile.am
