diff --git a/library/L3_Templates.ttcn b/library/L3_Templates.ttcn
index 9bd74db..73d2818 100644
--- a/library/L3_Templates.ttcn
+++ b/library/L3_Templates.ttcn
@@ -1766,6 +1766,130 @@
 	}
 }
 
+
+function ts_ApnTLV(template (omit) octetstring apn) return template (omit) AccessPointNameTLV {
+	if (istemplatekind(apn, "omit")) {
+		return omit;
+	} else {
+		var template (omit) AccessPointNameTLV ret := {
+			elementIdentifier := '28'O,
+			lengthIndicator := 0, /* overwritten */
+			accessPointNameValue := apn
+		}
+		return ret;
+	}
+}
+
+function ts_PcoTLV(template (omit) ProtocolConfigOptionsV pco)
+					return template (omit) ProtocolConfigOptionsTLV {
+	if (istemplatekind(pco, "omit")) {
+		return omit;
+	} else {
+		var template (omit) ProtocolConfigOptionsTLV ret := {
+			elementIdentifier := '27'O,
+			lengthIndicator := 0, /* overwritten */
+			protocolConfigOptionsV := pco
+		}
+		return ret;
+	}
+}
+
+template (value) PDU_L3_MS_SGSN ts_SM_ACT_PDP_REQ(BIT3 tid, BIT4 nsapi, BIT4 sapi, QoSV qos,
+						  PDPAddressV addr,
+						  template (omit) octetstring apn := omit,
+						  template (omit) ProtocolConfigOptionsV pco := omit
+						) := {
+	discriminator := '0000'B, /* overwritten */
+	tiOrSkip := {
+		transactionId := {
+			tio := tid,
+			tiFlag := '0'B,
+			tIExtension := omit
+		}
+	},
+	msgs := {
+		gprs_sm := {
+			activatePDPContextRequest := {
+				messageType := '00000000'B, /* overwritten */
+				requestedNSAPI := { nsapi, '0000'B },
+				requestedLLCSAPI := { sapi, '0000'B },
+				requestedQoS := {
+					lengthIndicator := 0, /* overwritten */
+					qoSV := qos
+				},
+				requestedPDPaddress := {
+					lengthIndicator := 0, /* overwritten */
+					pdpAddressV := addr
+				},
+				accessPointName := ts_ApnTLV(apn),
+				protocolConfigOpts := ts_PcoTLV(pco),
+				requestType := omit,
+				deviceProperties := omit,
+				nBIFOM_Container := omit
+			}
+		}
+	}
+}
+
+template PDU_L3_SGSN_MS tr_SM_ACT_PDP_REJ(template BIT3 tid := ?, template OCT1 cause := ?) := {
+	discriminator := '1010'B,
+	tiOrSkip := {
+		transactionId := {
+			tio := tid,
+			tiFlag := '1'B,
+			tIExtension := omit
+		}
+	},
+	msgs := {
+		gprs_sm := {
+			activatePDPContextReject := {
+				messageType := '01001111'B,
+				smCause := cause,
+				protocolConfigOpts := *,
+				backOffTimer := *,
+				reAttemptIndicator := *,
+				nBIFOM_Container := *
+			}
+		}
+	}
+}
+
+template PDU_L3_SGSN_MS tr_SM_ACT_PDP_ACCEPT(template BIT3 tid := ?, template BIT4 sapi := ?,
+					     template QoSV qos := ?)
+:= {
+	discriminator := '1010'B,
+	tiOrSkip := {
+		transactionId := {
+			tio := tid,
+			tiFlag := '1'B,
+			tIExtension := omit
+		}
+	},
+	msgs := {
+		gprs_sm := {
+			activatePDPContextAccept := {
+				messageType := '01000010'B,
+				negotiatedLLCSAPI := { sapi, '0000'B },
+				negotiatedQoS := {
+					lengthIndicator := ?,
+					qoSV := qos
+				},
+				radioPriority := ?,
+				spare := '0000'B,
+				pdpAddress := *,
+				protocolConfigOpts := *,
+				packetFlowID := *,
+				sMCause2 := *,
+				connectivityType := *,
+				wLANOffloadIndication := *,
+				nBIFOM_Container := *
+			}
+		}
+	}
+}
+
+
+
 private function f_concat_pad(integer tot_len, hexstring prefix, integer suffix) return hexstring {
 	var integer suffix_len := tot_len - lengthof(prefix);
 	var charstring suffix_ch := int2str(suffix);
