digraph G {
rankdir=TB
labelloc=t; label="Handover FSM: Intra-BSC"

        lchan [label="lchan FSM",shape=box3d]
        intra [label="intra-BSC HO",shape=box]
        old_lchan [label="old lchan",shape=box3d]
	terminate [shape=octagon]

	invisible [style="invisible"]
	invisible -> intra [label="Measurement Report",style=dotted]
	invisible -> old_lchan [style=invisible,arrowhead=none]

	intra -> WAIT_LCHAN_ACTIVE [label="handover_start()",style=dotted]
        WAIT_LCHAN_ACTIVE -> lchan [label="lchan_activate(FOR_HANDOVER)",style=dotted]
	lchan -> WAIT_LCHAN_ACTIVE [label="HO_EV_\nLCHAN_\nACTIVE,ERROR",style=dotted,constraint=false]
        WAIT_LCHAN_ACTIVE -> WAIT_RR_HO_DETECT
        WAIT_RR_HO_DETECT -> old_lchan [label="RR Handover\nCommand",style=dotted,constraint=false]
	
	lchan -> WAIT_RR_HO_DETECT [label="RR Handover\nDetect",style=dotted]
	WAIT_RR_HO_DETECT -> WAIT_RR_HO_COMPLETE

	lchan -> WAIT_RR_HO_COMPLETE [label="RR Handover\nComplete",style=dotted]
	WAIT_RR_HO_COMPLETE -> WAIT_LCHAN_ESTABLISHED
	lchan -> WAIT_LCHAN_ESTABLISHED [label="HO_EV_LCHAN_\nESTABLISHED",style=dotted]

	WAIT_LCHAN_ESTABLISHED -> terminate [label="non-TCH"]
	WAIT_LCHAN_ESTABLISHED -> WAIT_MGW_ENDPOINT_TO_MSC
	WAIT_MGW_ENDPOINT_TO_MSC -> terminate [label="handover_end()"]
}
