diff -ruN rubytree.orig/lib/tree.rb rubytree/lib/tree.rb
--- rubytree.orig/lib/tree.rb	2007-12-22 01:28:59.000000000 +0100
+++ rubytree/lib/tree.rb	2009-09-01 17:09:14.308077847 +0200
@@ -469,6 +469,39 @@
       parent.children.size
     end
 
+    # Recursively add a child and all required grandchildren according to path.
+    #
+    # Example:
+    # 
+    #   myTreeNode = Tree::TreeNode.new("ROOT", "content")
+    #   myTreeNode.add_recursive("child/grandchild/grand-grandchild", "grand-grandchild content")
+    #
+    #   myTreeNode['child']['grandchild']['grand-grandchild'].content # => "grand-grandchild content"
+    #
+    # Taken from 
+    # http://github.com/gderosa/blasco/blob/2a3778d83f5cb4cc12d3579390b61df3adff7ca0/lib/blasco/extensions/tree.rb
+    #
+    def add_recursive(path, content)
+      # path may be a String ("/path/to/something") or an
+      # array (["path", "to", "something"])
+      path = path.split('/') if path.respond_to? :split
+      if path.length == 1
+        begin
+          add Tree::TreeNode.new path[0], content
+        rescue RuntimeError # node already exists
+          self[path[0]] = content
+        end
+      else
+        begin
+          add Tree::TreeNode.new path[0], nil
+        rescue RuntimeError # node already exists
+          # do nothing
+        end
+        first = path.shift
+        self[first].add_recursive(path, content)
+      end
+    end
+
     protected :parent=, :setAsRoot!, :createDumpRep
 
   end
