msc {
	hscale="3";
	ms [label="MS"], omsc [label="MSC/VLR"], hlr [label="HLR"], smsc [label="SMSC"];

	ms <-> omsc [label="Establishment, Auth, Ciph, ..."];
	...;
	ms -> omsc [label="CP-DATA(RP-DATA(SMS-SUBMIT))"];
	ms <- omsc [label="CP-ACK"];
	omsc -> hlr [label="GSUP MO-ForwardSM-Req (MR, DA=SMSC, OA=MSISDN, UI)"];
	hlr box hlr [label="Route based on DA\n(SMSC address)"];
	hlr -> smsc [label="GSUP MO-ForwardSM-Req (MR, DA=SMSC, OA=MSISDN, UI)"];

	|||;
	... [label="Successful delivery"];
	|||;
	hlr <- smsc [label="GSUP MO-ForwardSM-Res (MR)"];
	omsc <- hlr [label="GSUP MO-ForwardSM-Res (MR)"];
	ms <- omsc [label="CP-DATA(RP-ACK)"];
	ms -> omsc [label="CP-ACK"];

	|||;
	... [label="Failed delivery"];
	|||;
	hlr <- smsc [label="GSUP MO-ForwardSM-Err (MR, Cause)"];
	omsc <- hlr [label="GSUP MO-ForwardSM-Err (MR, Cause)"];
	ms <- omsc [label="CP-DATA(RP-ERROR)"];
	ms -> omsc [label="CP-ACK"];
}