diff --git a/source/dub/dub.d b/source/dub/dub.d
index 8a4854e..45f862d 100644
--- a/source/dub/dub.d
+++ b/source/dub/dub.d
@@ -1244,6 +1244,7 @@
 		Package m_rootPackage;
 		bool[string] m_packagesToUpgrade;
 		Package[PackageDependency] m_packages;
+		TreeNodes[][TreeNode] m_children;
 	}
 
 
@@ -1335,6 +1336,15 @@
 
 	protected override TreeNodes[] getChildren(TreeNode node)
 	{
+		if (auto pc = node in m_children)
+			return *pc;
+		auto ret = getChildrenRaw(node);
+		m_children[node] = ret;
+		return ret;
+	}
+
+	private final TreeNodes[] getChildrenRaw(TreeNode node)
+	{
 		import std.array : appender;
 		auto ret = appender!(TreeNodes[]);
 		auto pack = getPackage(node.pack, node.config);