diff --git a/library/MNCC_Types.ttcn b/library/MNCC_Types.ttcn
index 39f9dce..19af236 100644
--- a/library/MNCC_Types.ttcn
+++ b/library/MNCC_Types.ttcn
@@ -512,6 +512,39 @@
 		}
 	}
 };
+template MNCC_PDU tr_MNCC_SETUP_req(template uint32_t call_id := ?,
+				    template charstring called := ?,
+				    template charstring calling := *,
+				    template charstring imsi := ?) := {
+	msg_type := MNCC_SETUP_REQ,
+	u := {
+		signal := {	/* See 24.008 9.3.23.1 */
+			callref := call_id,
+			bearer_cap := *,				/* mandatory in CC */
+			called := tr_MNCC_number(called),		/* optional */
+			calling := tr_MNCC_number(calling),		/* optional */
+			redirecting := *,				/* optional */
+			connected := omit,
+			cause := omit,
+			progress := *,					/* optional */
+			useruser := *,					/* optional */
+			facility := *,					/* optional */
+			cccap := omit,
+			ssversion := omit,
+			clir_sup := 0,
+			clir_inv := 0,
+			signal := *,					/* optional */
+			keypad := omit,
+			more := 0,
+			notify := 0,
+			emergency := *,
+			imsi := imsi,
+			lchan_type := ?,
+			lchan_mode := ?
+		}
+	}
+};
+
 
 /* MO: MSC <- MNCC: Respons to SETUP.ind */
 template MNCC_PDU ts_MNCC_SETUP_rsp(uint32_t call_id, charstring imsi := "",
@@ -653,9 +686,9 @@
 			redirecting := omit,
 			connected := connected,
 			cause := omit,
-			progress := *,
-			useruser := *,
-			facility := *,
+			progress := omit,
+			useruser := omit,
+			facility := omit,
 			cccap := omit,
 			ssversion := omit,
 			clir_sup := 0,
@@ -664,10 +697,10 @@
 			keypad := omit,
 			more := 0,
 			notify := 0,
-			emergency := *,
+			emergency := omit,
 			imsi := "",
-			lchan_type := ?,
-			lchan_mode := ?
+			lchan_type := 0,
+			lchan_mode := 0
 		}
 	}
 }
@@ -807,6 +840,39 @@
 		}
 	}
 }
+template MNCC_PDU ts_MNCC_CALL_CONF_ind(uint32_t call_id,
+					template (omit) MNCC_bearer_cap bcap := omit,
+					template (omit) MNCC_cause cause := omit,
+					template (omit) MNCC_cccap cccap := omit) := {
+	msg_type := MNCC_CALL_CONF_IND,
+	u := {
+		signal := {	/* See 24.008 9.3.2 */
+			callref := call_id,
+			bearer_cap := bcap,
+			called := omit,
+			calling := omit,
+			redirecting := omit,
+			connected := omit,
+			cause := cause,
+			progress := omit,
+			useruser := omit,
+			facility := omit,
+			cccap := cccap,
+			ssversion := omit,
+			clir_sup := 0,
+			clir_inv := 0,
+			signal := omit,
+			keypad := omit,
+			more := 0,
+			notify := 0,
+			emergency := omit,
+			imsi := "",
+			lchan_type := 0,
+			lchan_mode := 0
+		}
+	}
+}
+
 
 /* MO: MSC <- MNCC: CALL_PROC.req; call establishment initiated in network */
 template MNCC_PDU ts_MNCC_CALL_PROC_req(uint32_t call_id, template MNCC_bearer_cap bcap := omit,
@@ -1007,6 +1073,39 @@
 		}
 	}
 }
+template (value) MNCC_PDU ts_MNCC_ALERT_ind(uint32_t call_id,
+				    template (omit) MNCC_progress prog := omit,
+				    template (omit) charstring fac := omit,
+				    template (omit) MNCC_useruser uu := omit) := {
+	msg_type := MNCC_ALERT_IND,
+	u := {
+		signal := {	/* See 24.008 9.3.1 */
+			callref := call_id,
+			bearer_cap := omit,
+			called := omit,
+			calling := omit,
+			redirecting := omit,
+			connected := omit,
+			cause := omit,
+			progress := prog,
+			useruser := uu,
+			facility := fac,
+			cccap := omit,
+			ssversion := omit,
+			clir_sup := 0,
+			clir_inv := 0,
+			signal := omit,
+			keypad := omit,
+			more := 0,
+			notify := 0,
+			emergency := omit,
+			imsi := "",
+			lchan_type := 0,
+			lchan_mode := 0
+		}
+	}
+}
+
 
 /*   : MSC <- MNCC: NOTIFY.req; request to send information pertaining to a call (such as user suspended) */
 template MNCC_PDU ts_MNCC_NOTIFY_req(uint32_t call_id, MNCC_notify notify) := {
@@ -1794,6 +1893,22 @@
 		}
 	}
 }
+template MNCC_PDU tr_MNCC_RTP_CONNECT(template uint32_t call_id,
+				      template uint32_t ip := ?,
+				      template uint32_t rtp_port := ?,
+				      template uint32_t pt := ?) := {
+	msg_type := MNCC_RTP_CONNECT,
+	u := {
+		rtp := {
+			callref := call_id,
+			ip := ip,
+			rtp_port := rtp_port,
+			payload_type := pt,
+			payload_msg_type := 0
+		}
+	}
+}
+
 
 /* MSC <- MNCC: RTP_FREE.req; request connect of RTP */
 template MNCC_PDU ts_MNCC_RTP_FREE(uint32_t call_id) := ts_MNCC_SIMPLE_RTP(MNCC_RTP_FREE, call_id);
diff --git a/library/SIP_Emulation.ttcn b/library/SIP_Emulation.ttcn
index 57ec704..3957b8f 100644
--- a/library/SIP_Emulation.ttcn
+++ b/library/SIP_Emulation.ttcn
@@ -70,7 +70,7 @@
 	sipVersion := ?
 }
 
-template PDU_SIP_Request tr_SIP_INVITE := {
+private template PDU_SIP_Request tr_SIP_INVITE := {
 	requestLine := tr_ReqLine(INVITE_E),
 	msgHeader := t_SIP_msgHeader_any,
 	messageBody := *,
diff --git a/library/SIP_Templates.ttcn b/library/SIP_Templates.ttcn
new file mode 100644
index 0000000..75681a9
--- /dev/null
+++ b/library/SIP_Templates.ttcn
@@ -0,0 +1,413 @@
+module SIP_Templates {
+
+import from SIPmsg_Types all;
+
+/* wrapper type to encapsulate the Addr_Union + parameter list used in From, To. ... */
+type record SipAddr {
+	Addr_Union 		addr,
+	SemicolonParam_List	params optional
+}
+
+const charstring c_SIP_VERSION := "SIP/2.0";
+
+template (value) SipUrl ts_SipUrl(charstring user_or_tel, charstring host, integer portnr) := {
+	scheme := "sip",
+	userInfo := {
+		userOrTelephoneSubscriber := user_or_tel,
+		password := omit
+	},
+	hostPort := {
+		host := host,
+		portField := portnr
+	},
+	urlParameters := omit,
+	headers := omit
+}
+template SipUrl tr_SipUrl(template charstring user_or_tel,
+			  template charstring host,
+			  template integer portnr) := {
+	scheme := "sip",
+	userInfo := {
+		userOrTelephoneSubscriber := user_or_tel,
+		password := *
+	},
+	hostPort := {
+		host := host,
+		portField := portnr
+	},
+	urlParameters := *,
+	headers := *
+}
+
+template (value) SipAddr ts_SipAddr(charstring user_or_tel, charstring host, integer portnr) := {
+	addr := {
+		nameAddr := {
+			displayName := omit,
+			addrSpec := ts_SipUrl(user_or_tel, host, portnr)
+		}
+	},
+	params := omit
+}
+template SipAddr tr_SipAddr(template charstring user_or_tel,
+				template charstring host,
+				template integer portnr) := {
+	addr := {
+		nameAddr := {
+			displayName := *,
+			addrSpec := tr_SipUrl(user_or_tel, host, portnr)
+		}
+	},
+	params := *
+}
+
+/* build a receive template from a value: substitute '*' for omit */
+function tr_SipAddr_from_val(SipAddr tin) return template SipAddr {
+	var template SipAddr ret := tin;
+	if (tin.addr.nameAddr.displayName == omit) {
+		ret.addr.nameAddr.displayName := *;
+	}
+	if (tin.addr.nameAddr.addrSpec.userInfo.password == omit) {
+		ret.addr.nameAddr.addrSpec.userInfo.password := *;
+	}
+	if (tin.params == omit) {
+		ret.params := *;
+	}
+	return ret;
+}
+
+
+function tr_HostPort(template HostPort hp) return template HostPort {
+	var template HostPort hpout := hp;
+	/* if the port number is 5060, it may be omitted */
+	if (isvalue(hp.portField) and valueof(hp.portField) == 5060) {
+		hpout.portField := 5060 ifpresent;
+	}
+	return hpout;
+}
+
+template (value) RequestLine ts_SIP_ReqLine(Method method, template (value) SipUrl uri,
+					    charstring ver := c_SIP_VERSION) := {
+	method := method,
+	requestUri := uri,
+	sipVersion := ver
+}
+template RequestLine tr_SIP_ReqLine(template Method method,
+				    template SipUrl uri,
+				    template charstring ver := c_SIP_VERSION) := {
+	method := method,
+	requestUri := uri,
+	sipVersion := ver
+}
+
+template (value) StatusLine ts_SIP_StatusLine(integer status_code, charstring reason) := {
+	sipVersion := "SIP/2.0",
+	statusCode := status_code,
+	reasonPhrase := reason
+}
+template StatusLine tr_SIP_StatusLine(template integer status_code, template charstring reason) := {
+	sipVersion := "SIP/2.0",
+	statusCode := status_code,
+	reasonPhrase := reason
+}
+
+
+template (value) PDU_SIP_Request ts_SIP_req(template (value) RequestLine rl) := {
+	requestLine := rl,
+	msgHeader := c_SIP_msgHeader_empty,
+	messageBody := omit,
+	payload := omit
+}
+
+const Method_List c_SIP_defaultMethods := {
+	"INVITE", "ACK", "BYE", "CANCEL", "OPTIONS", "PRACK", "MESSAGE", "SUBSCRIBE",
+	"NOTIFY", "REFER", "UPDATE" };
+
+private function f_ContentTypeOrOmit(template (omit) ContentType ct, template (omit) charstring body)
+return template (omit) ContentType {
+	/* if user explicitly stated no content type */
+	if (istemplatekind(ct, "omit")) {
+		return omit;
+	}
+	/* if there's no body, then there's no content-type either */
+	if (istemplatekind(body, "omit")) {
+		return omit;
+	}
+	return ct;
+}
+
+template (value) ContentType ts_CT_SDP := {
+	fieldName := CONTENT_TYPE_E,
+	mediaType := "application/sdp"
+};
+
+template (value) Via ts_Via_from(SipAddr from_addr) := {
+	fieldName := VIA_E,
+	viaBody := {
+		{
+			sentProtocol := { "SIP", "2.0", "UDP" },
+			sentBy := from_addr.addr.nameAddr.addrSpec.hostPort,
+			viaParams := omit
+		}
+	}
+}
+
+template (value) MessageHeader ts_SIP_msgHeader_empty :=c_SIP_msgHeader_empty;
+template (value) MessageHeader ts_SIP_msgh_std( CallidString call_id,
+						SipAddr from_addr,
+						SipAddr to_addr,
+						template (omit) SipAddr contact_addr,
+						charstring method,
+						integer seq_nr,
+						template (value) Via via,
+						template (omit) ContentType content_type := omit,
+						Method_List allow_methods := c_SIP_defaultMethods
+					) modifies ts_SIP_msgHeader_empty := {
+	allow := {
+		fieldName := ALLOW_E,
+		methods := allow_methods
+	},
+	callId := {
+		fieldName := CALL_ID_E,
+		callid := call_id
+	},
+	contact := ts_Contact(contact_addr),
+	contentType := content_type,
+	cSeq := {
+		fieldName := CSEQ_E,
+		seqNumber := seq_nr,
+		method := method
+	},
+	fromField := {
+		fieldName := FROM_E,
+		addressField := from_addr.addr,
+		fromParams := from_addr.params
+	},
+	toField := {
+		fieldName := TO_E,
+		addressField := to_addr.addr,
+		toParams := to_addr.params
+	},
+	userAgent := {
+		fieldName := USER_AGENT_E,
+		userAgentBody := {
+			"osmo-ttcn3-hacks/0.23"
+		}
+	},
+	via := via
+}
+
+private function tr_Contact(template SipAddr contact_addr) return template Contact
+{
+	if (istemplatekind(contact_addr, "omit")) {
+		return omit;
+	} else if (istemplatekind(contact_addr, "*")) {
+		return *;
+	} else if (istemplatekind(contact_addr, "?")) {
+		return ?;
+	}
+	var template Contact ret := {
+		fieldName := CONTACT_E,
+		contactBody := {
+			contactAddresses := {
+				{
+					addressField := contact_addr.addr,
+					contactParams := contact_addr.params
+				}
+			}
+		}
+	};
+	return ret;
+}
+
+private function ts_Contact(template (omit) SipAddr contact_addr) return template (omit) Contact
+{
+	if (istemplatekind(contact_addr, "omit")) {
+		return omit;
+	}
+	var template (omit) Contact ret := {
+		fieldName := CONTACT_E,
+		contactBody := {
+			contactAddresses := {
+				{
+					addressField := contact_addr.addr,
+					contactParams := contact_addr.params
+				}
+			}
+		}
+	};
+	return ret;
+}
+
+
+function tr_AllowMethods(template Method_List allow_methods) return template Allow {
+	if (istemplatekind(allow_methods, "omit")) {
+		return omit;
+	} else if (istemplatekind(allow_methods, "*")) {
+		return *;
+	} else if (istemplatekind(allow_methods, "?")) {
+		return ?;
+	}
+	var template Allow ret := {
+		fieldName := ALLOW_E,
+		methods := allow_methods
+	}
+	return ret
+}
+
+template MessageHeader tr_SIP_msgh_std( template CallidString call_id,
+					template SipAddr from_addr,
+					template SipAddr to_addr,
+					template SipAddr contact_addr,
+					template charstring method,
+					template ContentType content_type := *,
+					template integer seq_nr := ?,
+					template Method_List allow_methods := *
+				) modifies t_SIP_msgHeader_any := {
+	allow := tr_AllowMethods(allow_methods),
+	callId := {
+		fieldName := CALL_ID_E,
+		callid := call_id
+	},
+	contact := tr_Contact(contact_addr),
+	contentType := content_type,
+	cSeq := {
+		fieldName := CSEQ_E,
+		seqNumber := seq_nr,
+		method := method
+	},
+	fromField := {
+		fieldName := FROM_E,
+		addressField := from_addr.addr,
+		fromParams := from_addr.params
+	},
+	toField := {
+		fieldName := TO_E,
+		addressField := to_addr.addr,
+		toParams := to_addr.params
+	},
+	userAgent := *,
+	via := {
+		fieldName := VIA_E,
+		viaBody := {
+			{
+				sentProtocol := { "SIP", "2.0", "UDP" },
+				sentBy := tr_HostPort(from_addr.addr.nameAddr.addrSpec.hostPort),
+				viaParams := *
+			}
+		}
+	}
+}
+
+
+template (value) PDU_SIP_Request ts_SIP_INVITE( CallidString call_id,
+						SipAddr from_addr,
+						SipAddr to_addr,
+						integer seq_nr,
+						template (omit) charstring body
+						) := {
+	requestLine := ts_SIP_ReqLine(INVITE_E, to_addr.addr.nameAddr.addrSpec),
+	msgHeader := ts_SIP_msgh_std(call_id, from_addr, to_addr, from_addr, "INVITE", seq_nr,
+				     ts_Via_from(from_addr), f_ContentTypeOrOmit(ts_CT_SDP, body)),
+	messageBody := body,
+	payload := omit
+}
+template PDU_SIP_Request tr_SIP_INVITE( template CallidString call_id,
+					template SipAddr from_addr,
+					template SipAddr to_addr,
+					template integer seq_nr,
+					template charstring body
+						) := {
+	requestLine := tr_SIP_ReqLine(INVITE_E, to_addr.addr.nameAddr.addrSpec),
+	msgHeader := tr_SIP_msgh_std(call_id, from_addr, to_addr, ?, "INVITE", *, seq_nr),
+	messageBody := body,
+	payload := omit
+}
+
+template (value) PDU_SIP_Request ts_SIP_BYE( CallidString call_id,
+					     SipAddr from_addr,
+					     SipAddr to_addr,
+					     integer seq_nr,
+					     template (omit) charstring body
+						) := {
+	requestLine := ts_SIP_ReqLine(BYE_E, to_addr.addr.nameAddr.addrSpec),
+	msgHeader := ts_SIP_msgh_std(call_id, from_addr, to_addr, omit, "BYE", seq_nr,
+				     ts_Via_from(from_addr), f_ContentTypeOrOmit(ts_CT_SDP, body)),
+	messageBody := body,
+	payload := omit
+}
+
+template PDU_SIP_Request tr_SIP_BYE( template CallidString call_id,
+					template SipAddr from_addr,
+					template SipAddr to_addr,
+					template integer seq_nr,
+					template charstring body
+						) := {
+	requestLine := tr_SIP_ReqLine(BYE_E, to_addr.addr.nameAddr.addrSpec),
+	msgHeader := tr_SIP_msgh_std(call_id, from_addr, to_addr, omit, "BYE", *, seq_nr),
+	messageBody := body,
+	payload := omit
+}
+
+
+template (value) PDU_SIP_Request ts_SIP_ACK( CallidString call_id,
+						SipAddr from_addr,
+						SipAddr to_addr,
+						integer seq_nr,
+						template (omit) charstring body
+						) := {
+	requestLine := ts_SIP_ReqLine(ACK_E, to_addr.addr.nameAddr.addrSpec),
+	msgHeader := ts_SIP_msgh_std(call_id, from_addr, to_addr, from_addr, "ACK", seq_nr,
+				     ts_Via_from(from_addr), f_ContentTypeOrOmit(ts_CT_SDP, body)),
+	messageBody := body,
+	payload := omit
+}
+template PDU_SIP_Request tr_SIP_ACK( template CallidString call_id,
+				     template SipAddr from_addr,
+				     template SipAddr to_addr,
+				     template integer seq_nr,
+				     template charstring body
+						) := {
+	requestLine := tr_SIP_ReqLine(ACK_E, to_addr.addr.nameAddr.addrSpec),
+	msgHeader := tr_SIP_msgh_std(call_id, from_addr, to_addr, *, "ACK", *, seq_nr),
+	messageBody := body,
+	payload := omit
+}
+
+
+
+template (value) PDU_SIP_Response ts_SIP_Response( CallidString call_id,
+						   SipAddr from_addr,
+						   SipAddr to_addr,
+						   charstring method,
+						   integer status_code,
+						   integer seq_nr,
+						   charstring reason,
+						   Via via,
+						   template (omit) charstring body := omit
+							) := {
+	statusLine := ts_SIP_StatusLine(status_code, reason),
+	msgHeader := ts_SIP_msgh_std(call_id, from_addr, to_addr, omit, method, seq_nr,
+				     via, f_ContentTypeOrOmit(ts_CT_SDP, body)),
+	messageBody := body,
+	payload := omit
+}
+
+template PDU_SIP_Response tr_SIP_Response( template CallidString call_id,
+					   template SipAddr from_addr,
+					   template SipAddr to_addr,
+					   template SipAddr contact_addr,
+					   template charstring method,
+					   template integer status_code,
+					   template integer seq_nr := ?,
+					   template charstring reason := ?,
+					   template charstring body := ?
+						) := {
+	statusLine := tr_SIP_StatusLine(status_code, reason),
+	msgHeader := tr_SIP_msgh_std(call_id, from_addr, to_addr, contact_addr, method, *, seq_nr),
+	messageBody := body,
+	payload := omit
+}
+
+
+
+}
