void optimise( UnattachedSet unattached ) throws MVDException
	{
		if ( incoming.size() == 1 && outgoing.size()==1 
			&& outgoingSet.equals(incomingSet) )
		{
			Arc a = incoming.get( 0 );
			Arc b = outgoing.get( 0 );
			if ( !a.isParent() && !a.isChild() 
				&& !b.isParent() && !b.isChild() )
			{
				char[] cData = new char[a.dataLen()+b.dataLen()];
				BitSet bs = new BitSet();
				bs.or( a.versions );
				Arc c = new Arc( bs, cData );
				a.from.replaceOutgoing( a, c );
				b.to.replaceIncoming( b, c );
				if ( unattached.contains(b) )
				{
					unattached.remove( b );
					unattached.add( c );
				}
			}
		}
	}