public static <A, B> List<List<A>> flatten(List<B> tree,
			F1<B, List<B>> nodeQuerier,
			F1<B, A> presentationQuerier) {
		ArrayList<List<A>> result = new ArrayList<List<A>>();
		for (B b : tree) {
			result.addAll(flatten(b, nodeQuerier, presentationQuerier));
		}
		return result;
	}