diff --git a/cmd/fdt.c b/cmd/fdt.c
index 0f5923e75a41f45139314ce9408af06c749ea42e..58af7727ba088b34fc62a1bb0ec33dd4946d27ab 100644
--- a/cmd/fdt.c
+++ b/cmd/fdt.c
@@ -639,6 +639,27 @@ static int do_fdt(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 #endif
 
 	}
+#ifdef CONFIG_OF_LIBFDT_OVERLAY
+	/* apply an overlay */
+	else if (strncmp(argv[1], "ap", 2) == 0) {
+		unsigned long addr;
+		struct fdt_header *blob;
+
+		if (argc != 3)
+			return CMD_RET_USAGE;
+
+		if (!working_fdt)
+			return CMD_RET_FAILURE;
+
+		addr = simple_strtoul(argv[2], NULL, 16);
+		blob = map_sysmem(addr, 0);
+		if (!fdt_valid(&blob))
+			return CMD_RET_FAILURE;
+
+		if (fdt_overlay_apply(working_fdt, blob))
+			return CMD_RET_FAILURE;
+	}
+#endif
 	/* resize the fdt */
 	else if (strncmp(argv[1], "re", 2) == 0) {
 		fdt_shrink_to_minimum(working_fdt);
@@ -1025,6 +1046,9 @@ static int fdt_print(const char *pathp, char *prop, int depth)
 #ifdef CONFIG_SYS_LONGHELP
 static char fdt_help_text[] =
 	"addr [-c]  <addr> [<length>]   - Set the [control] fdt location to <addr>\n"
+#ifdef CONFIG_OF_LIBFDT_OVERLAY
+	"fdt apply <addr>                    - Apply overlay to the DT\n"
+#endif
 #ifdef CONFIG_OF_BOARD_SETUP
 	"fdt boardsetup                      - Do board-specific set up\n"
 #endif
diff --git a/lib/libfdt/fdt_overlay.c b/lib/libfdt/fdt_overlay.c
index c45e8b25fb067fe30971366ddd42c325d6ac276a..1dac8fd4834333de142d9a3666b9cc8c4e7c4200 100644
--- a/lib/libfdt/fdt_overlay.c
+++ b/lib/libfdt/fdt_overlay.c
@@ -142,10 +142,10 @@ static int overlay_update_local_node_references(void *fdto,
 		adj_val += delta;
 		adj_val = cpu_to_fdt32(adj_val);
 
-		ret = fdt_setprop_inplace_namelen_by_index(fdto, tree_node,
-							   name, strlen(name),
-							   index, &adj_val,
-							   sizeof(adj_val));
+		ret = fdt_setprop_inplace_namelen_partial(fdto, tree_node,
+							  name, strlen(name),
+							  index, &adj_val,
+							  sizeof(adj_val));
 		if (ret)
 			return ret;
 	}
@@ -220,9 +220,9 @@ static int overlay_fixup_one_phandle(void *fdt, void *fdto,
 		return fixup_off;
 
 	phandle = cpu_to_fdt32(phandle);
-	return fdt_setprop_inplace_namelen_by_index(fdto, fixup_off,
-						    name, name_len, index,
-						    &phandle, sizeof(phandle));
+	return fdt_setprop_inplace_namelen_partial(fdto, fixup_off,
+						   name, name_len, index,
+						   &phandle, sizeof(phandle));
 };
 
 static int overlay_fixup_phandle(void *fdt, void *fdto, int symbols_off,