public Object[] getEdgesBetween(Object cell1, Object cell2, boolean directed) {
	if (graphLayoutCache != null && graphLayoutCache.isPartial()
		&& edgePromotion) {
	    Set cells1 = getHiddenChildren(cell1);
	    Set cells2 = getHiddenChildren(cell2);

	    // Optimise for the standard case of no child cells
	    if (cells1.size() == 1 && cells2.size() == 1) {
		return DefaultGraphModel.getEdgesBetween(model, cell1, cell2,
			directed);
	    }
	    // The object array to be returned
	    Object[] edgesBetween = null;
	    Iterator iter1 = cells1.iterator();
	    while (iter1.hasNext()) {
		Object tempCell1 = iter1.next();
		Iterator iter2 = cells2.iterator();
		while (iter2.hasNext()) {
		    Object tempCell2 = iter2.next();
		    Object[] edges = DefaultGraphModel.getEdgesBetween(model,
			    tempCell1, tempCell2, directed);
		    if (edges.length > 0) {
			if (edgesBetween == null) {
			    edgesBetween = edges;
			} else {
			    // need to copy everything into a new array
			    Object[] newArray = new Object[edges.length
				    + edgesBetween.length];
			    System.arraycopy(edgesBetween, 0, newArray, 0,
				    edgesBetween.length);
			    System.arraycopy(edges, 0, newArray,
				    edgesBetween.length, edges.length);
			    edgesBetween = newArray;
			}
		    }
		}
	    }
	    return edgesBetween;

	} else {
	    return DefaultGraphModel.getEdgesBetween(model, cell1, cell2,
		    directed);
	}
    }