diff --git a/msc/MSC_Tests.ttcn b/msc/MSC_Tests.ttcn
index f6ab439..b64b872 100644
--- a/msc/MSC_Tests.ttcn
+++ b/msc/MSC_Tests.ttcn
@@ -330,144 +330,6 @@
 	activate(as_Tguard_direct());
 }
 
-template PDU_BSSAP ts_BSSAP_BSSMAP := {
-	discriminator := '0'B,
-	spare := '0000000'B,
-	dlci := omit,
-	lengthIndicator := 0,	/* overwritten by codec */
-	pdu := ?
-}
-
-template PDU_BSSAP tr_BSSAP_BSSMAP := {
-	discriminator := '0'B,
-	spare := '0000000'B,
-	dlci := omit,
-	lengthIndicator := ?,
-	pdu := {
-		bssmap := ?
-	}
-}
-
-
-type integer BssmapCause;
-
-template (value) BSSMAP_IE_Cause ts_BSSMAP_IE_Cause(BssmapCause val) := {
-	elementIdentifier := '04'O,
-	lengthIndicator := 0,
-	causeValue := int2bit(val, 7),
-	extensionCauseValue := '0'B,
-	spare1 := omit
-}
-
-template (value) PDU_BSSAP ts_BSSMAP_Reset(BssmapCause cause) modifies ts_BSSAP_BSSMAP := {
-	pdu := {
-		bssmap := {
-			reset := {
-				messageType := '30'O,
-				cause := ts_BSSMAP_IE_Cause(cause),
-				a_InterfaceSelectorForReset := omit
-			}
-		}
-	}
-}
-
-template (value) PDU_BSSAP ts_BSSMAP_ResetAck modifies ts_BSSAP_BSSMAP := {
-	pdu := {
-		bssmap := {
-			resetAck := {
-				messageType := '31'O,
-				a_InterfaceSelectorForReset := omit
-			}
-		}
-	}
-}
-
-template PDU_BSSAP tr_BSSMAP_ResetAck modifies tr_BSSAP_BSSMAP := {
-	pdu := {
-		bssmap := {
-			resetAck := {
-				messageType := '31'O,
-				a_InterfaceSelectorForReset := *
-			}
-		}
-	}
-}
-
-template BSSMAP_IE_CellIdentifier ts_BSSMAP_IE_CellID := {
-	elementIdentifier := '05'O,
-	lengthIndicator := 0,
-	cellIdentifierDiscriminator := '0000'B,
-	spare1_4 := '0000'B,
-	cellIdentification := ?
-}
-
-type uint16_t BssmapLAC;
-type uint16_t BssmapCI;
-
-/*
-template BSSMAP_IE_CellIdentifier ts_CellId_CGI(mcc, mnc, lac, ci)
-modifies ts_BSSMAP_IE_CellID := {
-	cellIdentification := {
-		cI_LAC_CGI := {
-			mnc_mcc := FIXME,
-			lac := int2oct(lac, 2),
-			ci := int2oct(ci, 2)
-		}
-	}
-}
-*/
-
-template BSSMAP_IE_CellIdentifier ts_CellID_LAC_CI(BssmapLAC lac, BssmapCI ci)
-modifies ts_BSSMAP_IE_CellID := {
-	cellIdentification := {
-		cI_LAC_CI := {
-			lac := int2oct(lac, 2),
-			ci := int2oct(ci, 2)
-		}
-	}
-}
-
-template BSSMAP_IE_CellIdentifier ts_CellId_CI(BssmapCI ci)
-modifies ts_BSSMAP_IE_CellID := {
-	cellIdentification := {
-		cI_CI := int2oct(ci, 2)
-	}
-}
-
-template BSSMAP_IE_CellIdentifier ts_CellId_none
-modifies ts_BSSMAP_IE_CellID := {
-	cellIdentification := {
-		cI_noCell := ''O
-	}
-}
-
-
-template BSSMAP_IE_Layer3Information ts_BSSMAP_IE_L3Info(octetstring l3info) := {
-	elementIdentifier := '17'O,
-	lengthIndicator := 0,
-	layer3info := l3info
-}
-
-template PDU_BSSAP ts_BSSMAP_ComplL3(BSSMAP_IE_CellIdentifier cell_id, octetstring l3_info)
-modifies ts_BSSAP_BSSMAP := {
-	pdu := {
-		bssmap := {
-			completeLayer3Information := {
-				messageType := '57'O,
-				cellIdentifier := cell_id,
-				layer3Information := ts_BSSMAP_IE_L3Info(l3_info),
-				chosenChannel := omit,
-				lSAIdentifier := omit,
-				aPDU := omit,
-				codecList := omit,
-				redirectAttemptFlag := omit,
-				sendSequenceNumber := omit,
-				iMSI := omit
-			}
-		}
-	}
-}
-
 type function void_fn(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr;
 
 /* FIXME: move into BSC_ConnectionHandler? */
