diff --git a/library/RSL_Types.ttcn b/library/RSL_Types.ttcn
index 0f03c87..ceb6adb 100644
--- a/library/RSL_Types.ttcn
+++ b/library/RSL_Types.ttcn
@@ -4,7 +4,7 @@
  *
  * RSL is a 3GPP standard protocol used between BTS and BSC in a GSM network.
  *
- * (C) 2017 by Harald Welte <laforge@gnumonks.org>
+ * (C) 2017-2023 by Harald Welte <laforge@gnumonks.org>
  * All rights reserved.
  *
  * Released under the terms of GNU General Public License, Version 2 or
@@ -206,7 +206,7 @@
 		RSL_IE_CBCH_LOAD_INFO		('00101101'B),
 		RSL_IE_SMSCB_CHAN_INDICATOR	('00101110'B),
 		RSL_IE_GROUP_CALL_REF		('00101111'B),
-		RSL_IE_CHAN_DESC		('00110000'B),
+		RSL_IE_GROUP_CHAN_DESC		('00110000'B),
 		RSL_IE_NCH_DRX_INFO		('00110001'B),
 		RSL_IE_CMD_INDICATOR		('00110010'B),
 		RSL_IE_EMLPP_PRIO		('00110011'B),
@@ -850,6 +850,78 @@
 		slot_count := slot_count
 	}
 
+	/* 9.3.45 Group Call Reference */
+	type record RSL_IE_GroupCallReference {
+		uint8_t		len,
+		GroupCallRef	group_or_bcast_call_ref
+	} with {
+		variant (len) "LENGTHTO(group_or_bcast_call_ref)"
+	};
+	template (value) RSL_IE_GroupCallReference ts_GroupCallRef(template (value) GroupCallRef gcr) := {
+		len := 0, // overwritten
+		group_or_bcast_call_ref := gcr
+	}
+	template (present) RSL_IE_GroupCallReference tr_GroupCallRef(template (present) GroupCallRef gcr := ?) := {
+		len := ?,
+		group_or_bcast_call_ref := gcr
+	}
+
+	/* 9.3.46 Channel description */
+	type record RSL_IE_GroupChannelDescription {
+		uint8_t 	len,
+		octetstring 	chan_desc
+	} with {
+		variant (len) "LENGTHTO(chan_desc)"
+	};
+	template (value) RSL_IE_GroupChannelDescription ts_GroupChanDesc(template (value) octetstring cd) := {
+		len := 0, // overwritten
+		chan_desc := cd
+	}
+	template (present) RSL_IE_GroupChannelDescription tr_GroupChanDesc(template (present) octetstring cd) := {
+		len := ?,
+		chan_desc := cd
+	}
+
+	/* 9.3.47 NCH DRX Information */
+	type record RSL_IE_NchDrxInformation {
+		uint8_t 	len,
+		BIT2		spare,
+		BIT1		nln_status,
+		BIT3		emlpp_priority,
+		BIT2		nln
+	} with {
+		variant (len) "LENGTHTO(spare,nln_status,emlpp_priority,nln)"
+	};
+
+	/* 9.3.48 Command Indicator */
+	type enumerated RSL_CommandIndicator {
+		CMD_IND_START		(0),
+		CMD_IND_STOP		(1)
+	} with { variant "FIELDLENGTH(8)" };
+	type record RSL_IE_CommandIndicator {
+		uint8_t			len,
+		RSL_CommandIndicator	command_value
+	} with {
+		variant (len) "LENGTHTO(command_value)"
+	};
+	template (value) RSL_IE_CommandIndicator ts_CommandInd(template (value) RSL_CommandIndicator ci) := {
+		len := 0, // overwritten
+		command_value := ci
+	}
+	template (present) RSL_IE_CommandIndicator tr_CommandInd(template (present) RSL_CommandIndicator ci) := {
+		len := ?,
+		command_value := ci
+	}
+
+	/* 9.3.50 UIC */
+	type record RSL_IE_Uic {
+		uint8_t		len,
+		BIT2		spare,
+		uint6_t		uic
+	} with {
+		variant (len) "LENGTHTO(spare,uic)"
+	};
+
 	/* 9.3.52, 3GPP TS 44.018 10.5.2.21aa  */
 	type record RSL_IE_MultirateCfg {
 		uint8_t 	len,
@@ -1086,6 +1158,12 @@
 		RSL_LV			full_imm_ass_info,
 		MobileIdentityLV	ms_identity,
 
+		RSL_IE_GroupCallReference group_call_ref,
+		RSL_IE_GroupChannelDescription group_chan_desc,
+		RSL_IE_NchDrxInformation nch_drx_info,
+		RSL_IE_CommandIndicator	cmd_indicator,
+		RSL_IE_Uic		uic,
+
 		uint16_t		ipa_conn_id,
 		uint16_t		ipa_local_port,
 		uint16_t		ipa_remote_port,
@@ -1153,6 +1231,12 @@
 					ms_identity, iei =  RSL_IE_MS_IDENTITY;
 					other, iei = RSL_IE_FULL_BCCH_INFO;
 
+					group_call_ref, iei = RSL_IE_GROUP_CALL_REF;
+					group_chan_desc, iei = RSL_IE_GROUP_CHAN_DESC;
+					nch_drx_info, iei = RSL_IE_NCH_DRX_INFO;
+					cmd_indicator, iei = RSL_IE_CMD_INDICATOR;
+					uic, iei = RSL_IE_UIC;
+
 					ipa_conn_id, iei = RSL_IE_IPAC_CONN_ID;
 					ipa_remote_ip, iei = RSL_IE_IPAC_REMOTE_IP;
 					ipa_remote_port, iei = RSL_IE_IPAC_REMOTE_PORT;
@@ -2659,6 +2743,50 @@
 		}
 	}
 
+	template (value) RSL_Message ts_RSL_NOTIF_CMD_START(template (value) GroupCallRef group_call_ref,
+							    template (value) octetstring chan_desc) := {
+		msg_disc := ts_RSL_MsgDisc(RSL_MDISC_CCHAN, false),
+		msg_type := RSL_MT_NOT_CMD,
+		ies := {
+			t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := ts_RslChanNr_PCH_AGCH(0)}),
+			t_RSL_IE(RSL_IE_CMD_INDICATOR, RSL_IE_Body:{cmd_indicator := ts_CommandInd(CMD_IND_START)}),
+			t_RSL_IE(RSL_IE_GROUP_CALL_REF, RSL_IE_Body:{group_call_ref := ts_GroupCallRef(group_call_ref)}),
+			t_RSL_IE(RSL_IE_GROUP_CHAN_DESC, RSL_IE_Body:{group_chan_desc := ts_GroupChanDesc(chan_desc)})
+		}
+	}
+	template RSL_Message tr_RSL_NOTIF_CMD_START(template (present) GroupCallRef group_call_ref,
+						    template (present) octetstring chan_desc := ?) := {
+		msg_disc := tr_RSL_MsgDisc(RSL_MDISC_CCHAN, false),
+		msg_type := RSL_MT_NOT_CMD,
+		ies := {
+			tr_RSL_IE(RSL_IE_Body:{chan_nr := t_RslChanNr_PCH_AGCH(0)}),
+			tr_RSL_IE(RSL_IE_Body:{cmd_indicator := tr_CommandInd(CMD_IND_START)}),
+			tr_RSL_IE(RSL_IE_Body:{group_call_ref := tr_GroupCallRef(group_call_ref)}),
+			tr_RSL_IE(RSL_IE_Body:{group_chan_desc := tr_GroupChanDesc(chan_desc)}),
+			*
+		}
+	}
+
+	template (value) RSL_Message ts_RSL_NOTIF_CMD_STOP(template (value) GroupCallRef group_call_ref) := {
+		msg_disc := ts_RSL_MsgDisc(RSL_MDISC_CCHAN, false),
+		msg_type := RSL_MT_NOT_CMD,
+		ies := {
+			t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := ts_RslChanNr_PCH_AGCH(0)}),
+			t_RSL_IE(RSL_IE_CMD_INDICATOR, RSL_IE_Body:{cmd_indicator := ts_CommandInd(CMD_IND_STOP)}),
+			t_RSL_IE(RSL_IE_GROUP_CALL_REF, RSL_IE_Body:{group_call_ref := ts_GroupCallRef(group_call_ref)})
+		}
+	}
+	template RSL_Message tr_RSL_NOTIF_CMD_STOP(template (present) GroupCallRef group_call_ref) := {
+		msg_disc := tr_RSL_MsgDisc(RSL_MDISC_CCHAN, false),
+		msg_type := RSL_MT_NOT_CMD,
+		ies := {
+			tr_RSL_IE(RSL_IE_Body:{chan_nr := t_RslChanNr_PCH_AGCH(0)}),
+			tr_RSL_IE(RSL_IE_Body:{cmd_indicator := tr_CommandInd(CMD_IND_STOP)}),
+			tr_RSL_IE(RSL_IE_Body:{group_call_ref := tr_GroupCallRef(group_call_ref)}),
+			*
+		}
+	}
+
 
 
 	function f_rsl_find_ie(RSL_Message msg, RSL_IE_Type iei, out RSL_IE_Body ret) return boolean {
