diff --git a/library/CBSP_Templates.ttcn b/library/CBSP_Templates.ttcn
index 5da2958..f86241e 100644
--- a/library/CBSP_Templates.ttcn
+++ b/library/CBSP_Templates.ttcn
@@ -667,6 +667,85 @@
 	return tr_CBSP(CBSP_MSGT_KILL_FAIL, ies);
 }
 
+/* 8.1.3.10 MESSAGE STATUS QUERY */
+template (value) CBSP_PDU
+ts_CBSP_MSG_STATUS_QUERY(template (value) uint16_t msg_id,
+			 template (value) uint16_t old_ser_nr,
+			 template (value) BSSMAP_FIELD_CellIdentificationList cell_list,
+			 template (value) uint8_t channel_ind) :=
+	ts_CBSP(CBSP_MSGT_MSG_STATUS_QUERY, {
+			ts_CbspMsgId(msg_id),
+			ts_OldSerNo(old_ser_nr),
+			ts_CbspCellList(cell_list),
+			ts_CbspChannelInd(channel_ind)});
+template (present) CBSP_PDU
+tr_CBSP_MSG_STATUS_QUERY(template (present) uint16_t msg_id := ?,
+			 template (present) uint16_t old_ser_nr := ?,
+			 template (present) BSSMAP_FIELD_CellIdentificationList cell_list := ?,
+			 template (present) uint8_t channel_ind := ?) :=
+	ts_CBSP(CBSP_MSGT_MSG_STATUS_QUERY, {
+			ts_CbspMsgId(msg_id),
+			ts_OldSerNo(old_ser_nr),
+			ts_CbspCellList(cell_list),
+			ts_CbspChannelInd(channel_ind)});
+
+/* 8.1.3.11 MESSAGE STATUS QUERY COMPLETE */
+template (value) CBSP_PDU
+ts_CBSP_MSG_STATUS_QUERY_COMPL(template (value) uint16_t msg_id, template (value) uint16_t old_ser_nr,
+			       template (value) CBSP_IE_NumBcastComplList compl_list,
+			       template (value) uint8_t channel_ind) :=
+	ts_CBSP(CBSP_MSGT_MSG_STATUS_QUERY_COMPL, {
+		ts_CbspMsgId(msg_id),
+		ts_OldSerNo(old_ser_nr),
+		ts_CbspNumComplList(valueof(compl_list)),
+		ts_CbspChannelInd(channel_ind)});
+template (present) CBSP_PDU
+tr_CBSP_MSG_STATUS_QUERY_COMPL(template (present) uint16_t msg_id, template (present) uint16_t old_ser_nr,
+				template (present) CBSP_IE_NumBcastComplList compl_list,
+				template (present) uint8_t channel_ind) :=
+	tr_CBSP(CBSP_MSGT_MSG_STATUS_QUERY_COMPL, {
+		tr_CbspMsgId(msg_id),
+		tr_OldSerNo(old_ser_nr),
+		tr_CbspNumComplList(compl_list),
+		tr_CbspChannelInd(channel_ind)});
+
+/* 8.1.3.12 MESSAGE STATUS QUERY FAILURE */
+function ts_CBSP_MSG_STATUS_QUERY_FAIL(template (value) uint16_t msg_id, template (value) uint16_t old_ser_nr,
+				       template (value) CBSP_FailureListItems fail_list,
+				       template (value) uint8_t channel_ind,
+				       template (omit) CBSP_IE_NumBcastComplList compl_list)
+return template (value) CBSP_PDU {
+	var template (value) CBSP_IEs ies := {
+		ts_CbspMsgId(msg_id),
+		ts_OldSerNo(old_ser_nr),
+		ts_CbspFailList(fail_list),
+		ts_CbspChannelInd(channel_ind)
+	};
+	if (not istemplatekind(compl_list, "omit")) {
+		ies[lengthof(ies)] := ts_CbspNumComplList(valueof(compl_list));
+	}
+	return ts_CBSP(CBSP_MSGT_MSG_STATUS_QUERY_FAIL, ies);
+}
+function tr_CBSP_MSG_STATUS_QUERY_FAIL(template (present) uint16_t msg_id := ?, template (present) uint16_t old_ser_nr := ?,
+				       template (present) CBSP_FailureListItems fail_list := ?,
+				       template (present) uint8_t channel_ind := ?,
+				       template CBSP_IE_NumBcastComplList compl_list := *)
+return template (present) CBSP_PDU {
+	var template (present) CBSP_IEs ies := {
+		tr_CbspMsgId(msg_id),
+		tr_OldSerNo(old_ser_nr),
+		tr_CbspFailList(fail_list),
+		tr_CbspChannelInd(channel_ind)
+	};
+	if (istemplatekind(compl_list, "*")) {
+		testcase.stop("TITAN > 6.5.0 doesn't support this");
+		//ies[lengthof(ies)] := ts_CbspNumComplList(valueof(compl_list));
+	} else if (not istemplatekind(compl_list, "omit")) {
+		ies[lengthof(ies)] := tr_CbspNumComplList(compl_list);
+	}
+	return tr_CBSP(CBSP_MSGT_MSG_STATUS_QUERY_FAIL, ies);
+}
+
 
 /* 8.1.3.16 RESET */
 template (value) CBSP_PDU ts_CBSP_RESET(template (value) BSSMAP_FIELD_CellIdentificationList cell_list) :=
