def METHOD_NAME(self, pos):
    #find the node we need to subdivide
    node_idx, node, child_idx, subdivide = self._search(pos)
    if not subdivide:
        #add a new node
        #print 'adding without subdivision'
        self._add_node(pos, node_idx, child_idx)
    else:
        #print 'adding with subdivision: ',  node_idx, child_idx
        #we need to move the current node data into a child
        node_child_idx = ((node['centroid'] > node['centre']) * self._octant_offsets).sum()
        new_idx, new_node = self._add_node(node['centroid'], node_idx, node_child_idx)
        while node_child_idx == child_idx:
            node = new_node
            node_idx = new_idx
            #visited.append(new_idx)
            child_idx = ((pos > node['centre']) * self._octant_offsets).sum()
            node_child_idx = ((node['centroid'] > node['centre']) * self._octant_offsets).sum()
            new_idx, new_node = self._add_node(node['centroid'], node_idx, node_child_idx)
        self._add_node(pos, node_idx, child_idx)
    self._nodes[node_idx]['nPoints'] += 1
    while node_idx > 0:
        #print node_idx
        node_idx = self._nodes[node_idx]['parent']
        #print node_idx, self._nodes[node_idx]['depth']
        self._nodes[node_idx]['nPoints'] += 1
        #TODO - update centroids