private AndJoin getMatchingAndJoin(AndSplit split, int steps) {
		
		if (!this.containsVertex(split)) {
			return null;
		}
		
		AndJoin matchingAndJoin = null;
		List<ProcessNode> queue = new ArrayList<ProcessNode>();
		
		for (ProcessEdge edge : this.outgoingEdgesOf(split)) {
			ProcessNode target = this.getEdgeTarget(edge);
			queue.add(target);
		}
		
		while (!queue.isEmpty()) {
			ProcessNode node = queue.remove(0);
			if (node instanceof AndJoin) {
				AndJoin andJoin = (AndJoin) node;
				if (matchingAndJoin != null && !matchingAndJoin.equals(andJoin)) {
					throw new UnsupportedOperationException("AndSplit nodes can currently " +
							"have only one corresponding AndJoin node.");
				}
				matchingAndJoin = andJoin;
			} else {
				for (ProcessEdge edge : this.outgoingEdgesOf(node)) {
					queue.add(this.getEdgeTarget(edge));
				}
			}	
		}
		
		return matchingAndJoin;
	}