public void merge() throws MVDException
	{
		if ( match == null )
			match = getBestMatch();
		// create left and right subarcs
		if ( match.dataOffset > 0 )
			leftSubArc = splitOffLeftArc();
		if ( match.length+match.dataOffset < arc.dataLen() )
			rightSubArc = splitOffRightArc();
		// create left and right subgraphs
		if ( transposed )
		{
			if ( match.dataOffset > 0 )
				leftSubGraph = graph;
			if ( match.length+match.dataOffset < arc.dataLen() )
				rightSubGraph = graph;
			transposeMerge();
		}
		else
		{
			createLeftSubGraph();
			createRightSubGraph();
			alignMerge();
		}
		// add left and right subarcs to the special left & right sets
		addSubArcsToSpecials();
	}