private boolean _insert(int nodeIndex, Coordinate point, int level) {
		
		// TODO? HOW TO ADD PREVIOUSLY ENCOUNTERED ELEMENTS IN MATRIX
		// ALTER INSERT TO NEXT RECURSIVE LEVEL THEN ZERO OUT PARENT?
		QuadTreeNode node = _nodes.get(nodeIndex);
		
		
		// If level is reached or the point is not within 
		// the boundary, kick out.
		if (!node.boundary.isInBoundary(point)) { 
			return false;
		} 
		
		// Flag that indicates a node has been added
		node.isEmpty = false;
		
		// point added
		++node.elemCount;
		
		// Threshold gate keeper
		if (node.elemCount <= _maxNodeCapacity) { 
			// append index to list of indexes
			
			//node.add(point);
			return true; 
		}
		
		// no need to build out children if we will reach 
		// zero-level on the next recursive step.
		if (level-1 <= 0) { 
			//node.add(point);
			return true; 
		}
		
		// I am now a parent!!!
		node.isLeaf = false;	// No longer a leaf
		node.isEmpty = true;	// Inner nodes do not have contents
		
		
		// Make childrens!!!
		
		// subdivide and recursive search
		if (!node.hasChildren()) {
			_subDivide(nodeIndex);
		}
		
		// TODO? TAKE CURRENT LIST AND REDISTRIBUTE AMONGST KIDS? 
		// CURRENT NODE LIST IS EMPTY AT POST?
		//Coordinate pt;
		//while (!node.isEmpty()) {
			//pt = node.remove(0);
			// Recursive search of new kids
			if (_insert(node.children[QuadTreeNodeType.NW_NODE.ordinal()], point, level-1)) { 
				return true;
				//continue
			}
			if (_insert(node.children[QuadTreeNodeType.NE_NODE.ordinal()], point, level-1)) { 
				return true;
				//continue; 
			}
			if (_insert(node.children[QuadTreeNodeType.SE_NODE.ordinal()], point, level-1)) { 
				return true;
				//continue; 
			}
			if (_insert(node.children[QuadTreeNodeType.SW_NODE.ordinal()], point, level-1)) { 
				return true;
				//continue; 
			}
		//}
		
		// Cannot add element
		return false;
	}