diff --git a/lib/hexp/node.rb b/lib/hexp/node.rb
index <HASH>..<HASH> 100644
--- a/lib/hexp/node.rb
+++ b/lib/hexp/node.rb
@@ -131,7 +131,7 @@ module Hexp
     # @api public
     #
     def inspect
-      self.class.inspect_name + [tag, attributes, children ].reject(&:empty?).inspect
+      self.class.inspect_name + [tag, attributes, children].compact.reject(&:empty?).inspect
     end
 
     # Pretty print, a multiline representation with indentation
@@ -260,6 +260,22 @@ module Hexp
       attr('class', [attr('class'), klz].compact.join(' '))
     end
 
+    def add_child(child)
+      H[
+        self.tag,
+        self.attributes,
+        self.children + [child]
+      ]
+    end
+
+    def |(attrs)
+      H[
+        self.tag,
+        self.attributes.merge(attrs),
+        self.children
+      ]
+    end
+
     private
 
     # Set an attribute, used internally by #attr
Add #add_child and #| to node. Still unsure how to strike a balance between immutable objects and a pleasant, non-confusing api.