Index: uspace/lib/cpp/include/internal/rbtree.hpp
===================================================================
--- uspace/lib/cpp/include/internal/rbtree.hpp	(revision 369f5dfce0b2ad0b154aaf89054eb64daa6cf4f8)
+++ uspace/lib/cpp/include/internal/rbtree.hpp	(revision 7644d6e186ece59bb16ff427b3b0e2fcea5c7d3b)
@@ -380,4 +380,21 @@
             }
 
+            void insert_node(node_type* node, node_type* parent)
+            {
+                ++size_;
+                if (!parent)
+                    root_ = node;
+                else
+                {
+                    if (keys_comp(get_key(node->value), parent->value))
+                        parent->add_left_child(node);
+                    else
+                        parent->add_right_child(node);
+
+                    repair_after_insert_(node);
+                    update_root_(node);
+                }
+            }
+
         private:
             node_type* root_;
Index: uspace/lib/cpp/include/internal/rbtree_policies.hpp
===================================================================
--- uspace/lib/cpp/include/internal/rbtree_policies.hpp	(revision 369f5dfce0b2ad0b154aaf89054eb64daa6cf4f8)
+++ uspace/lib/cpp/include/internal/rbtree_policies.hpp	(revision 7644d6e186ece59bb16ff427b3b0e2fcea5c7d3b)
@@ -171,24 +171,10 @@
             auto val = value_type{forward<Args>(args)...};
             auto parent = tree.find_parent_for_insertion(val);
-            if (!parent)
-            {
-                tree.root_ = new node_type{move(val)};
-                ++tree.size_;
-
-                return make_pair(iterator{tree.root_, false}, true);
-            }
-
-            if (tree.keys_equal(tree.get_key(parent->value), tree.get_key(val)))
+
+            if (parent && tree.keys_equal(tree.get_key(parent->value), tree.get_key(val)))
                 return make_pair(iterator{parent, false}, false);
 
             auto node = new node_type{move(val)};
-            if (tree.keys_comp(tree.get_key(val), parent->value))
-                parent->add_left_child(node);
-            else
-                parent->add_right_child(node);
-
-            ++tree.size_;
-            tree.repair_after_insert_(node);
-            tree.update_root_(node);
+            tree.insert_node(node, parent);
 
             return make_pair(iterator{node, false}, true);
@@ -204,24 +190,9 @@
 
             auto parent = tree.find_parent_for_insertion(val);
-            if (!parent)
-            {
-                tree.root_ = new node_type{val};
-                ++tree.size_;
-
-                return make_pair(iterator{tree.root_}, true);
-            }
-
-            if (tree.keys_equal(tree.get_key(parent->value), tree.get_key(val)))
+            if (parent && tree.keys_equal(tree.get_key(parent->value), tree.get_key(val)))
                 return make_pair(iterator{parent, false}, false);
 
             auto node = new node_type{val};
-            if (tree.keys_comp(tree.get_key(val), parent->value))
-                parent->add_left_child(node);
-            else
-                parent->add_right_child(node);
-
-            ++tree.size_;
-            tree.repair_after_insert_(node);
-            tree.update_root_(node);
+            tree.insert_node(node, parent);
 
             return make_pair(iterator{node, false}, true);
@@ -237,24 +208,9 @@
 
             auto parent = tree.find_parent_for_insertion(val);
-            if (!parent)
-            {
-                tree.root_ = new node_type{forward<Value>(val)};
-                ++tree.size_;
-
-                return make_pair(iterator{tree.root_, false}, true);
-            }
-
-            if (tree.keys_equal(tree.get_key(parent->value), tree.get_key(val)))
+            if (parent && tree.keys_equal(tree.get_key(parent->value), tree.get_key(val)))
                 return make_pair(iterator{parent, false}, false);
 
             auto node = new node_type{forward<Value>(val)};
-            if (tree.keys_comp(tree.get_key(val), parent->value))
-                parent->add_left_child(node);
-            else
-                parent->add_right_child(node);
-
-            ++tree.size_;
-            tree.repair_after_insert_(node);
-            tree.update_root_(node);
+            tree.insert_node(node, parent);
 
             return make_pair(iterator{node, false}, true);
@@ -433,14 +389,5 @@
 
             auto parent = tree.find_parent_for_insertion(node->value);
-            if (!parent)
-                tree.root_ = node;
-            else if (tree.keys_comp(tree.get_key(node->value), parent->value))
-                parent->add_left_child(node);
-            else
-                parent->add_right_child(node);
-
-            ++tree.size_;
-            tree.repair_after_insert_(node);
-            tree.update_root_(node);
+            tree.insert_node(node, parent);
 
             return iterator{node, false};
