optimize add_child function