diff --git a/library/Osmocom_Gb_Types.ttcn b/library/Osmocom_Gb_Types.ttcn
index c5b0953..8101712 100644
--- a/library/Osmocom_Gb_Types.ttcn
+++ b/library/Osmocom_Gb_Types.ttcn
@@ -1555,6 +1555,74 @@
 	}
 
 
+/* extract the BVCI IE of given PDU + return it */
+function f_BSSGP_BVCI_IE_get(PDU_BSSGP pdu) return template (omit) BVCI {
+	select (pdu) {
+	case (PDU_BSSGP:{pDU_BSSGP_FLUSH_LL:=?}) {
+		return pdu.pDU_BSSGP_FLUSH_LL.bVCI_old;
+		}
+	case (PDU_BSSGP:{pDU_BSSGP_FLUSH_LL_ACK:=?}) {
+		return pdu.pDU_BSSGP_FLUSH_LL_ACK.bVCI_new;
+		}
+	case (PDU_BSSGP:{pDU_BSSGP_LLC_DISCARDED:=?}) {
+		return pdu.pDU_BSSGP_LLC_DISCARDED.bVCI;
+		}
+	case (PDU_BSSGP:{pDU_BSSGP_BVC_BLOCK:=?}) {
+		return pdu.pDU_BSSGP_BVC_BLOCK.bVCI;
+		}
+	case (PDU_BSSGP:{pDU_BSSGP_BVC_BLOCK_ACK:=?}) {
+		return pdu.pDU_BSSGP_BVC_BLOCK_ACK.bVCI;
+		}
+	case (PDU_BSSGP:{pDU_BSSGP_BVC_UNBLOCK:=?}) {
+		return pdu.pDU_BSSGP_BVC_UNBLOCK.bVCI;
+		}
+	case (PDU_BSSGP:{pDU_BSSGP_BVC_UNBLOCK_ACK:=?}) {
+		return pdu.pDU_BSSGP_BVC_UNBLOCK_ACK.bVCI;
+		}
+	case (PDU_BSSGP:{pDU_BSSGP_BVC_RESET:=?}) {
+		return pdu.pDU_BSSGP_BVC_RESET.bVCI;
+		}
+	case (PDU_BSSGP:{pDU_BSSGP_BVC_RESET_ACK:=?}) {
+		return pdu.pDU_BSSGP_BVC_RESET_ACK.bVCI;
+		}
+	case (PDU_BSSGP:{pDU_BSSGP_STATUS:=?}) {
+		return pdu.pDU_BSSGP_STATUS.bVCI;
+		}
+	case (PDU_BSSGP:{pDU_BSSGP_PERFORM_LOCATION_REQUEST:=?}) {
+		return pdu.pDU_BSSGP_PERFORM_LOCATION_REQUEST.bVCI;
+		}
+	case (PDU_BSSGP:{pDU_BSSGP_PERFORM_LOCATION_RESPONSE:=?}) {
+		return pdu.pDU_BSSGP_PERFORM_LOCATION_RESPONSE.bVCI;
+		}
+	case (PDU_BSSGP:{pDU_BSSGP_PERFORM_LOCATION_ABORT:=?}) {
+		return pdu.pDU_BSSGP_PERFORM_LOCATION_ABORT.bVCI;
+		}
+	case (PDU_BSSGP:{pDU_BSSGP_POSITION_COMMAND:=?}) {
+		return pdu.pDU_BSSGP_POSITION_COMMAND.bVCI;
+		}
+	case (PDU_BSSGP:{pDU_BSSGP_POSITION_RESPONSE:=?}) {
+		return pdu.pDU_BSSGP_POSITION_RESPONSE.bVCI;
+		}
+	case (PDU_BSSGP:{pDU_BSSGP_PAGING_PS:={?,?,*,{bVCI:=?},*,*,?,*,*}}) {
+		return pdu.pDU_BSSGP_PAGING_PS.paging_Field4.bVCI;
+		}
+	case (PDU_BSSGP:{pDU_BSSGP_PAGING_CS:={?,?,?,{bVCI:=?},*,*,*,*,*}}) {
+		return pdu.pDU_BSSGP_PAGING_CS.paging_Field4.bVCI;
+		}
+	case else {
+		return omit;
+		}
+	}
+}
+
+/* extract the BVCI IE of given PDU + convert it to integer value */
+function f_BSSGP_BVCI_get(PDU_BSSGP pdu) return template (omit) BssgpBvci {
+	var template (omit) BVCI bvci_raw := f_BSSGP_BVCI_IE_get(pdu);
+	if (istemplatekind(bvci_raw, "omit")) {
+		return omit;
+	}
+	return oct2int(valueof(bvci_raw.unstructured_value));
+}
 
 
 } with { encode "RAW" };
