diff --git a/library/L3_Templates.ttcn b/library/L3_Templates.ttcn
new file mode 100644
index 0000000..8f60b5c
--- /dev/null
+++ b/library/L3_Templates.ttcn
@@ -0,0 +1,112 @@
+module L3_Templates {
+
+import from General_Types all;
+import from MobileL3_Types all;
+import from MobileL3_CommonIE_Types all;
+import from MobileL3_MM_Types all;
+import from MobileL3_RRM_Types all;
+
+type enumerated CmServiceType {
+	CM_TYPE_MO_CALL		('0001'B),
+	CM_TYPE_EMERG_CALL	('0010'B),
+	CM_TYPE_MO_SMS		('0100'B),
+	CM_TYPE_SS_ACT		('1000'B)
+}
+
+
+/* send template fro Mobile Identity (TMSI) */
+template MobileIdentityLV ts_MI_TMSI_LV(OCT4 tmsi) := {
+	lengthIndicator := 0, /* overwritten */
+	mobileIdentityV := {
+		typeOfIdentity := '000'B,	/* overwritten */
+		oddEvenInd_identity := {
+			tmsi_ptmsi := {
+				oddevenIndicator := '0'B,
+				fillerDigit := '1111'B,
+				octets := tmsi
+			}
+		}
+	}
+}
+
+private function f_enc_IMSI_L3(hexstring digits) return IMSI_L3 {
+	var IMSI_L3 l3;
+	var integer len := lengthof(digits);
+	if (len rem 2 == 1) {	/* modulo remainder */
+		l3.oddevenIndicator := '0'B;
+		l3.fillerDigit := '1111'B;
+	} else {
+		l3.oddevenIndicator := '1'B;
+		l3.fillerDigit := omit;
+	}
+	l3.digits := digits;
+	return l3;
+}
+
+/* send template fro Mobile Identity (IMSI) */
+template (value) MobileIdentityLV ts_MI_IMSI_LV(hexstring imsi_digits) := {
+	lengthIndicator := 0, /* overwritten */
+	mobileIdentityV := {
+		typeOfIdentity := '000'B, /* overwritten */
+		oddEvenInd_identity := {
+			imsi := f_enc_IMSI_L3(imsi_digits)
+		}
+	}
+}
+
+/* Send template for Classmark 2 */
+template (value) MobileStationClassmark2_LV ts_CM2 := {
+	lengthIndicator := 0,
+	rf_PowerCapability := '000'B,
+	a5_1 := '0'B,
+	esind := '1'B,
+	revisionLevel := '10'B,
+	spare1_1 := '0'B,
+	mobileStationClassmark2_oct4 := omit,
+	mobileStationClassmark2_oct5 := omit
+};
+
+/* Send template for CM SERVICE REQUEST */
+template (value) PDU_ML3_MS_NW ts_CM_SERV_REQ(BIT4 serv_type, MobileIdentityLV mi_lv) := {
+	discriminator := '0000'B, /* overwritten */
+	tiOrSkip := {
+		skipIndicator := '0000'B
+	},
+	msgs := {
+		mm := {
+			cMServiceRequest := {
+				messageType := '000000'B, /* overwritten */
+				nsd := '00'B,
+				cm_ServiceType := serv_type,
+				cipheringKeySequenceNumber := { '000'B, '0'B },
+				mobileStationClassmark2 := ts_CM2,
+				mobileIdentity := mi_lv,
+				priorityLevel := omit,
+				additionalUpdateParameterTV := omit,
+				deviceProperties := omit
+			}
+		}
+	}
+}
+
+/* Send template for PAGING RESPONSE */
+template (value) PDU_ML3_MS_NW ts_PAG_RESP(MobileIdentityLV mi_lv) := {
+	discriminator := '0000'B, /* overwritten */
+	tiOrSkip := {
+		skipIndicator := '0000'B
+	},
+	msgs := {
+		rrm := {
+			pagingResponse := {
+				messageType := '00000000'B, /* overwritten */
+				cipheringKeySequenceNumber := { '000'B, '0'B },
+				spare1_4 := '0000'B,
+				mobileStationClassmark := ts_CM2,
+				mobileIdentity := mi_lv,
+				additionalUpdateParameters := omit
+			}
+		}
+	}
+}
+
+}
