public Node getNodeAt(Graphics2D g2, Point point) {
		Rectangle rect = new Rectangle(point.x - 1, point.y - 1, 3, 3);

		for (Node node : tree.getExternalNodes()) {
			Shape taxonLabelBound = tipLabelBounds.get(node);

			if (taxonLabelBound != null && g2.hit(rect, taxonLabelBound, false)) {
				return node;
			}
		}

		for (Node node : tree.getNodes()) {
			Shape branchPath = transform.createTransformedShape(treeLayoutCache.getBranchPath(node));
			if (branchPath != null && g2.hit(rect, branchPath, true)) {
				return node;
			}
			Shape collapsedShape = transform.createTransformedShape(treeLayoutCache.getCollapsedShape(node));
			if (collapsedShape != null && g2.hit(rect, collapsedShape, false)) {
				return node;
			}
		}

		return null;
	}