msc {
	hscale=2;
	ms [label="MS via BTS"], bsc_lchan[label="BSC lchan FSM"], bsc_gscon[label="BSC conn FSM"],
	msc_[label="MSC"];

	ms note msc_ [label="inter-BSC Handover to another BSS"];

	bsc_gscon abox bsc_gscon [label="ST_ACTIVE"];
	bsc_gscon box bsc_gscon [label="bsc_handover_start(): init conn->ho"];
	bsc_gscon -> bsc_gscon [label="GSCON_EV_HO_START (inter-BSC MO)"];
	bsc_gscon abox bsc_gscon [label="ST_HANDOVER_MO_\nWAIT_HO_CMD\nT7"];
	bsc_gscon => msc_ [label="BSSMAP Handover Required"];
	...;
	--- [label="On Timeout"];
	ms note bsc_gscon [label="MS happily continues on the old lchan."];
	bsc_gscon abox bsc_gscon [label="ST_ACTIVE"];
	bsc_gscon box bsc_gscon [label="handover_end(fail)"];
	--- [label="END: 'On Timeout'"];
	...;
	bsc_gscon <= msc_ [label="BSSMAP Handover Command"];
	bsc_gscon abox bsc_gscon [label="ST_HANDOVER_MO_\nWAIT_CLEAR_CMD\nT8"];
	ms <= bsc_gscon [label="RR Handover Command"];
	...;
	--- [label="On Timeout"];
	ms note bsc_gscon [label="MS happily continues on the old lchan."];
	bsc_gscon abox bsc_gscon [label="ST_ACTIVE"];
	bsc_gscon box bsc_gscon [label="handover_end(fail)"];
	--- [label="END: 'On Timeout'"];
	...;
	msc_ note msc_ [label="Remote BSS reported Handover Complete to the MSC, this connection has been
		superseded."];
	bsc_gscon <= msc_ [label="BSSMAP Clear Command"];
	bsc_gscon abox bsc_gscon [label="ST_CLEARING"];
	bsc_gscon => msc_ [label="BSSMAP Clear Complete"];
	bsc_lchan <- bsc_gscon [label="LCHAN_EV_RELEASE"];
	ms <=> bsc_lchan [label="release procedure (async)"];
}
