diff --git a/tests/nop_node.c b/tests/nop_node.c
new file mode 100644
index 0000000..86d5d63
--- /dev/null
+++ b/tests/nop_node.c
@@ -0,0 +1,96 @@
+/*
+ * libfdt - Flat Device Tree manipulation
+ *	Testcase for fdt_nop_node()
+ * Copyright (C) 2006 David Gibson, IBM Corporation.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+#include <fdt.h>
+#include <libfdt.h>
+
+#include "tests.h"
+#include "testdata.h"
+
+int main(int argc, char *argv[])
+{
+	struct fdt_header *fdt = &_test_tree1;
+	int subnode1_offset, subnode2_offset, subsubnode2_offset;
+	int err;
+
+	test_init(argc, argv);
+
+	subnode1_offset = fdt_path_offset(fdt, "/subnode1");
+	if ((err = fdt_offset_error(subnode1_offset)))
+		FAIL("Couldn't find \"/subnode1\": %s", fdt_strerror(err));
+	check_getprop_typed(fdt, subnode1_offset, "prop-int", TEST_VALUE_1);
+
+	subnode2_offset = fdt_path_offset(fdt, "/subnode2");
+	if ((err = fdt_offset_error(subnode2_offset)))
+		FAIL("Couldn't find \"/subnode2\": %s", fdt_strerror(err));
+	check_getprop_typed(fdt, subnode2_offset, "prop-int", TEST_VALUE_2);
+	
+	subsubnode2_offset = fdt_path_offset(fdt, "/subnode2/subsubnode");
+	if ((err = fdt_offset_error(subsubnode2_offset)))
+		FAIL("Couldn't find \"/subnode2/subsubnode\": %s",
+		     fdt_strerror(err));
+	check_getprop_typed(fdt, subsubnode2_offset, "prop-int", TEST_VALUE_2);
+
+	err = fdt_nop_node(fdt, subnode1_offset);
+	if (err)
+		FAIL("fdt_nop_node(subnode1): %s", fdt_strerror(err));
+
+	subnode1_offset = fdt_path_offset(fdt, "/subnode1");
+	if ((err = fdt_offset_error(subnode1_offset)) != FDT_ERR_NOTFOUND)
+		FAIL("fdt_path_offset(subnode1) returned \"%s\" instead of \"%s\"",
+		     fdt_strerror(err), fdt_strerror(FDT_ERR_NOTFOUND));
+
+	subnode2_offset = fdt_path_offset(fdt, "/subnode2");
+	if ((err = fdt_offset_error(subnode2_offset)))
+		FAIL("Couldn't find \"/subnode2\": %s", fdt_strerror(err));
+	check_getprop_typed(fdt, subnode2_offset, "prop-int", TEST_VALUE_2);
+	
+	subsubnode2_offset = fdt_path_offset(fdt, "/subnode2/subsubnode");
+	if ((err = fdt_offset_error(subsubnode2_offset)))
+		FAIL("Couldn't find \"/subnode2/subsubnode\": %s",
+		     fdt_strerror(err));
+	check_getprop_typed(fdt, subsubnode2_offset, "prop-int", TEST_VALUE_2);
+
+	err = fdt_nop_node(fdt, subnode2_offset);
+	if (err)
+		FAIL("fdt_nop_node(subnode2): %s", fdt_strerror(err));
+
+	subnode1_offset = fdt_path_offset(fdt, "/subnode1");
+	if ((err = fdt_offset_error(subnode1_offset)) != FDT_ERR_NOTFOUND)
+		FAIL("fdt_path_offset(subnode1) returned \"%s\" instead of \"%s\"",
+		     fdt_strerror(err), fdt_strerror(FDT_ERR_NOTFOUND));
+
+	subnode2_offset = fdt_path_offset(fdt, "/subnode2");
+	if ((err = fdt_offset_error(subnode2_offset)) != FDT_ERR_NOTFOUND)
+		FAIL("fdt_path_offset(subnode2) returned \"%s\" instead of \"%s\"",
+		     fdt_strerror(err), fdt_strerror(FDT_ERR_NOTFOUND));
+	
+	subsubnode2_offset = fdt_path_offset(fdt, "/subnode2/subsubnode");
+	if ((err = fdt_offset_error(subsubnode2_offset)) != FDT_ERR_NOTFOUND)
+		FAIL("fdt_path_offset(subsubnode2) returned \"%s\" instead of \"%s\"",
+		     fdt_strerror(err), fdt_strerror(FDT_ERR_NOTFOUND));
+
+	PASS();
+}
