protected GraphicalRepresentationElement representChildren(PathElement el, Set<PathElement> blackNodes)
	{
		// FIXME: check casts to VisualizableGraphComponent throughout the method
		GraphicalRepresentationElement repr = new GraphicalRepresentationElement(this,
				(VisualizableGraphComponent) el.getNode(), Type.NODE);
		blackNodes.add(el);
		
		List<PathElement> others = new LinkedList<PathElement>(el.getOtherChildren());
		
		representOthers(others, blackNodes, EdgeType.BACKLINK, el, repr);
		
		boolean first = true;
		for(PathElement child : el.getChildren())
		{
			for(Edge edge : (isBackwards ? theGraph.getInEdges(el.getNode()) : theGraph.getOutEdges(el.getNode())))
				if((isBackwards && (edge.getFrom() == child.getNode()))
						|| (!isBackwards && (edge.getTo() == child.getNode())))
				{
					GraphicalRepresentationElement childRepr = representChildren(child, blackNodes);
					GraphicalRepresentationElement edgeRepr = new GraphicalRepresentationElement(this,
							(VisualizableGraphComponent) edge, Type.EDGE);
					edgeRepr.setEdge(EdgeType.CHILDLINK, repr, childRepr);
					
					repr.connected.add(edgeRepr);
					((VisualizableGraphComponent) child.getNode()).addRepresentation(childRepr);
					((VisualizableGraphComponent) edge).addRepresentation(edgeRepr);
					first = false;
				}
			
			representOthers(others, blackNodes, first ? EdgeType.FORELINK : EdgeType.SIDELINK, el, repr);
			
		}
		representOthers(others, blackNodes, EdgeType.EXTLINK, el, repr);
		
		return repr;
	}