diff --git a/library/SIP_Templates.ttcn b/library/SIP_Templates.ttcn
index f57b524..f48d137 100644
--- a/library/SIP_Templates.ttcn
+++ b/library/SIP_Templates.ttcn
@@ -11,59 +11,142 @@
 
 const charstring c_SIP_VERSION := "SIP/2.0";
 
-template (value) SipUrl ts_SipUrl(charstring user_or_tel, charstring host, integer portnr) := {
+template (value) SipUrl ts_SipUrl(template (value) HostPort host_port,
+				  template (omit) UserInfo user_info := omit) := {
 	scheme := "sip",
-	userInfo := {
-		userOrTelephoneSubscriber := user_or_tel,
-		password := omit
-	},
-	hostPort := {
-		host := host,
-		portField := portnr
-	},
+	userInfo := user_info,
+	hostPort := host_port,
 	urlParameters := omit,
 	headers := omit
 }
-template SipUrl tr_SipUrl(template charstring user_or_tel,
-			  template charstring host,
-			  template integer portnr) := {
+template (present) SipUrl tr_SipUrl(template (present) HostPort host_port := ?,
+				    template UserInfo user_info := *) := {
 	scheme := "sip",
-	userInfo := {
-		userOrTelephoneSubscriber := user_or_tel,
-		password := *
-	},
-	hostPort := {
-		host := host,
-		portField := portnr
-	},
+	userInfo := user_info,
+	hostPort := host_port,
 	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 (value) SipUrl ts_SipUrlHost(template (value) charstring host)
+	:= ts_SipUrl(ts_HostPort(host));
+
+// [20.10]
+template (present) NameAddr tr_NameAddr(template (present) SipUrl addrSpec := ?,
+				      template charstring displayName := *) := {
+	displayName := displayName,
+	addrSpec := addrSpec
 }
-template SipAddr tr_SipAddr(template charstring user_or_tel,
-				template charstring host,
-				template integer portnr) := {
+template (value) NameAddr ts_NameAddr(template (value) SipUrl addrSpec,
+				      template (omit) charstring displayName := omit) := {
+	displayName := displayName,
+	addrSpec := addrSpec
+}
+
+template (present) Addr_Union tr_Addr_Union_NameAddr(template (present) NameAddr nameAddr := ?) := {
+	nameAddr := nameAddr
+}
+template (value) Addr_Union ts_Addr_Union_NameAddr(template (value) NameAddr nameAddr) := {
+	nameAddr := nameAddr
+}
+
+template (present) Addr_Union tr_Addr_Union_SipUrl(template (present) SipUrl sipUrl := ?) := {
+	addrSpecUnion := sipUrl
+}
+template (value) Addr_Union ts_Addr_Union_SipUrl(template (value) SipUrl sipUrl) := {
+	addrSpecUnion := sipUrl
+}
+
+
+template (present) ContactAddress tr_ContactAddress(template (present) Addr_Union addressField := ?,
+						  template SemicolonParam_List contactParams := *) := {
+	addressField := addressField,
+	contactParams := contactParams
+}
+template (value) ContactAddress ts_ContactAddress(template (value) Addr_Union addressField,
+						  template (omit) SemicolonParam_List contactParams := omit) := {
+	addressField := addressField,
+	contactParams := contactParams
+}
+
+template (present) Contact tr_Contact(template (present) ContactAddress_List contactAddresses := ?) := {
+	fieldName := CONTACT_E,
+	contactBody := {
+		contactAddresses := contactAddresses
+	}
+}
+template (value) Contact ts_Contact(template (value) ContactAddress_List contactAddresses) := {
+	fieldName := CONTACT_E,
+	contactBody := {
+		contactAddresses := contactAddresses
+	}
+}
+
+template (value) Contact ts_ContactWildcard := {
+	fieldName := CONTACT_E,
+	contactBody := {
+		wildcard := "*"
+	}
+}
+
+template (present) Contact tr_Contact_SipAddr(template (present) SipAddr contact_addr := ?)
+	:= tr_Contact({ tr_ContactAddress(contact_addr.addr, contact_addr.params) });
+
+private function f_tr_Contact_SipAddr(template SipAddr contact_addr) return template Contact
+{
+	if (istemplatekind(contact_addr, "omit")) {
+		return omit;
+	} else if (istemplatekind(contact_addr, "*")) {
+		return *;
+	}
+	return tr_Contact_SipAddr(contact_addr);
+}
+
+template (value) Contact ts_Contact_SipAddr(template (value) SipAddr contact_addr)
+	:= ts_Contact({ ts_ContactAddress(contact_addr.addr, contact_addr.params) });
+private function ts_Contact_SipAddr_omit(template (omit) SipAddr contact_addr := omit) return template (omit) Contact
+{
+	if (istemplatekind(contact_addr, "omit")) {
+		return omit;
+	}
+	return ts_Contact_SipAddr(contact_addr);
+}
+
+
+// [20.19]
+template (value) Expires ts_Expires(template (value) DeltaSec deltaSec := "7200") := {
+	fieldName := EXPIRES_E,
+	deltaSec := deltaSec
+}
+
+template (value) SipAddr ts_SipAddr(template (value) HostPort host_port,
+				    template (omit) UserInfo user_info := omit,
+				    template (omit) charstring displayName := omit,
+				    template (omit) SemicolonParam_List params := omit) := {
 	addr := {
 		nameAddr := {
-			displayName := *,
-			addrSpec := tr_SipUrl(user_or_tel, host, portnr)
+			displayName := displayName,
+			addrSpec := ts_SipUrl(host_port, user_info)
 		}
 	},
-	params := *
+	params := params
+}
+template (present) SipAddr tr_SipAddr(template (present) HostPort host_port := ?,
+				      template UserInfo user_info := *,
+				      template charstring displayName := *,
+				      template SemicolonParam_List params := *) := {
+	addr := {
+		nameAddr := {
+			displayName := displayName,
+			addrSpec := tr_SipUrl(host_port, user_info)
+		}
+	},
+	params := 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;
+function tr_SipAddr_from_val(SipAddr tin) return template (present) SipAddr {
+	var template (present) SipAddr ret := tin;
 	if (tin.addr.nameAddr.displayName == omit) {
 		ret.addr.nameAddr.displayName := *;
 	}
@@ -76,7 +159,11 @@
 	return ret;
 }
 
-
+template (value) HostPort ts_HostPort(template (omit) charstring host := omit,
+				      template (omit) integer portField := omit) := {
+	host := host,
+	portField := portField
+}
 function tr_HostPort(template HostPort hp) return template HostPort {
 	var template HostPort hpout := hp;
 	/* if the port number is 5060, it may be omitted */
@@ -86,15 +173,28 @@
 	return hpout;
 }
 
-template (value) RequestLine ts_SIP_ReqLine(Method method, template (value) SipUrl uri,
+
+template (value) UserInfo ts_UserInfo(template (value) charstring userOrTelephoneSubscriber,
+				      template (omit) charstring password := omit) := {
+	userOrTelephoneSubscriber := userOrTelephoneSubscriber,
+	password := password
+}
+template (present) UserInfo tr_UserInfo(template (present) charstring userOrTelephoneSubscriber := ?,
+					template charstring password := *) := {
+	userOrTelephoneSubscriber := userOrTelephoneSubscriber,
+	password := password
+}
+
+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) := {
+template (present) RequestLine tr_SIP_ReqLine(template (present) Method method := ?,
+					      template (present) SipUrl uri := ?,
+					      template (present) charstring ver := c_SIP_VERSION) := {
 	method := method,
 	requestUri := uri,
 	sipVersion := ver
@@ -105,7 +205,8 @@
 	statusCode := status_code,
 	reasonPhrase := reason
 }
-template StatusLine tr_SIP_StatusLine(template integer status_code, template charstring reason) := {
+template (present) StatusLine tr_SIP_StatusLine(template integer status_code,
+						template charstring reason) := {
 	sipVersion := "SIP/2.0",
 	statusCode := status_code,
 	reasonPhrase := reason
@@ -141,28 +242,41 @@
 	mediaType := "application/sdp"
 };
 
-template (value) Via ts_Via_from(SipAddr from_addr) := {
+template (value) Via ts_Via_from(template (value) HostPort addr) := {
 	fieldName := VIA_E,
 	viaBody := {
 		{
 			sentProtocol := { "SIP", "2.0", "UDP" },
-			sentBy := from_addr.addr.nameAddr.addrSpec.hostPort,
+			sentBy := addr,
 			viaParams := omit
 		}
 	}
 }
+template (present) Via tr_Via_from(template (present) HostPort host_port := ?,
+				   template SemicolonParam_List viaParams := *) := {
+	fieldName := VIA_E,
+	viaBody := {
+		{
+			sentProtocol := { "SIP", "2.0", "UDP" },
+			sentBy := host_port,
+			viaParams := viaParams
+		}
+	}
+	}
 
-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 := {
+template (value) MessageHeader ts_SIP_msgHeader_empty := c_SIP_msgHeader_empty;
+template (value) MessageHeader
+ts_SIP_msgh_std(template (value) CallidString call_id,
+		template (value) SipAddr from_addr,
+		template (value) SipAddr to_addr,
+		template (omit) Contact contact,
+		template (value) charstring method,
+		template (value) integer seq_nr,
+		template (value) Via via,
+		template (omit) ContentType content_type := omit,
+		template (value) Method_List allow_methods := c_SIP_defaultMethods,
+		template (omit) Expires expires := omit
+	) modifies ts_SIP_msgHeader_empty := {
 	allow := {
 		fieldName := ALLOW_E,
 		methods := allow_methods
@@ -171,13 +285,14 @@
 		fieldName := CALL_ID_E,
 		callid := call_id
 	},
-	contact := ts_Contact(contact_addr),
+	contact := contact,
 	contentType := content_type,
 	cSeq := {
 		fieldName := CSEQ_E,
 		seqNumber := seq_nr,
 		method := method
 	},
+	expires := expires,
 	fromField := {
 		fieldName := FROM_E,
 		addressField := from_addr.addr,
@@ -197,49 +312,6 @@
 	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;
@@ -248,34 +320,38 @@
 	} else if (istemplatekind(allow_methods, "?")) {
 		return ?;
 	}
-	var template Allow ret := {
+	var template (present) 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 := {
+template (present) MessageHeader
+tr_SIP_msgh_std(template CallidString call_id,
+		template SipAddr from_addr,
+		template SipAddr to_addr,
+		template Contact contact,
+		template (present) Via via := tr_Via_from(?),
+		template charstring method,
+		template ContentType content_type := *,
+		template integer seq_nr := ?,
+		template Method_List allow_methods := *,
+		template Expires expires := *
+		) modifies t_SIP_msgHeader_any := {
 	allow := tr_AllowMethods(allow_methods),
 	callId := {
 		fieldName := CALL_ID_E,
 		callid := call_id
 	},
-	contact := tr_Contact(contact_addr),
+	contact := contact,
 	contentType := content_type,
 	cSeq := {
 		fieldName := CSEQ_E,
 		seqNumber := seq_nr,
 		method := method
 	},
+	expires := expires,
 	fromField := {
 		fieldName := FROM_E,
 		addressField := from_addr.addr,
@@ -287,105 +363,143 @@
 		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 := *
-			}
-		}
-	}
+	via := via
 }
 
 
-template (value) PDU_SIP_Request ts_SIP_INVITE( CallidString call_id,
-						SipAddr from_addr,
-						SipAddr to_addr,
-						integer seq_nr,
-						template (omit) charstring body
-						) := {
+template (value) PDU_SIP_Request
+ts_SIP_REGISTER(template (value) SipUrl sip_url_host_port,
+		template (value) CallidString call_id,
+		template (value) SipAddr from_addr,
+		template (value) SipAddr to_addr,
+		template (value) Via via,
+		integer seq_nr,
+		template (omit) Contact contact,
+		template (omit) Expires expires,
+		template (omit) charstring body := omit) := {
+	requestLine := ts_SIP_ReqLine(REGISTER_E, sip_url_host_port),
+	msgHeader := ts_SIP_msgh_std(call_id, from_addr, to_addr, contact,
+				     "REGISTER", seq_nr, via,
+				     f_ContentTypeOrOmit(ts_CT_SDP, body),
+				     expires := expires),
+	messageBody := body,
+	payload := omit
+}
+template (present) PDU_SIP_Request
+tr_SIP_REGISTER(template (present) SipUrl sip_url_host_port := ?,
+		template (present) CallidString call_id := ?,
+		template (present) SipAddr from_addr := ?,
+		template (present) SipAddr to_addr := ?,
+		template integer seq_nr := *,
+		template Contact contact := *,
+		template Expires expires := *,
+		template charstring body := *) := {
+	requestLine := tr_SIP_ReqLine(REGISTER_E, sip_url_host_port),
+	msgHeader := tr_SIP_msgh_std(call_id, from_addr, to_addr, contact,
+				     tr_Via_from(tr_HostPort(from_addr.addr.nameAddr.addrSpec.hostPort)),
+				     "INVITE", *, seq_nr,
+				     expires := expires),
+	messageBody := body,
+	payload := omit
+}
+
+template (value) PDU_SIP_Request
+ts_SIP_INVITE(CallidString call_id,
+	      SipAddr from_addr,
+	      SipAddr to_addr,
+	      integer seq_nr,
+	      template (omit) charstring body := omit) := {
 	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)),
+	msgHeader := ts_SIP_msgh_std(call_id, from_addr, to_addr,
+				     ts_Contact_SipAddr(from_addr),
+				     "INVITE", seq_nr,
+				     ts_Via_from(from_addr.addr.nameAddr.addrSpec.hostPort),
+				     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
-						) := {
+template (present) 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),
+	msgHeader := tr_SIP_msgh_std(call_id, from_addr, to_addr, ?,
+				     tr_Via_from(tr_HostPort(from_addr.addr.nameAddr.addrSpec.hostPort)),
+				     "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
-						) := {
+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)),
+				     ts_Via_from(from_addr.addr.nameAddr.addrSpec.hostPort),
+				     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
-						) := {
+template (present) 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),
+	msgHeader := tr_SIP_msgh_std(call_id, from_addr, to_addr, omit,
+				     tr_Via_from(tr_HostPort(from_addr.addr.nameAddr.addrSpec.hostPort)),
+				     "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
-						) := {
+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)),
+	msgHeader := ts_SIP_msgh_std(call_id, from_addr, to_addr,
+				     ts_Contact_SipAddr(from_addr),
+				     "ACK", seq_nr,
+				     ts_Via_from(from_addr.addr.nameAddr.addrSpec.hostPort),
+				     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
-						) := {
+template (present) 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),
+	msgHeader := tr_SIP_msgh_std(call_id, from_addr, to_addr, *,
+				     tr_Via_from(tr_HostPort(from_addr.addr.nameAddr.addrSpec.hostPort)),
+				     "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
-							) := {
+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)),
@@ -393,18 +507,20 @@
 	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 := ?
-						) := {
+template (present) PDU_SIP_Response
+tr_SIP_Response(template CallidString call_id,
+		template SipAddr from_addr,
+		template SipAddr to_addr,
+		template Contact contact,
+		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),
+	msgHeader := tr_SIP_msgh_std(call_id, from_addr, to_addr, contact,
+				     tr_Via_from(tr_HostPort(from_addr.addr.nameAddr.addrSpec.hostPort)),
+				     method, *, seq_nr),
 	messageBody := body,
 	payload := omit
 }
diff --git a/sip/SIP_Tests.ttcn b/sip/SIP_Tests.ttcn
index ab33af7..aee1a82 100644
--- a/sip/SIP_Tests.ttcn
+++ b/sip/SIP_Tests.ttcn
@@ -99,12 +99,16 @@
 
 private function f_CallPars_compute(inout CallPars cp) {
 	if (cp.is_mo) {
-		cp.comp.sip_url_ext := valueof(ts_SipAddr(cp.called, mp_local_host, 5060));
-		cp.comp.sip_url_gsm := valueof(ts_SipAddr(cp.calling, mp_osmosip_host, 5060));
+		cp.comp.sip_url_ext := valueof(ts_SipAddr(ts_HostPort(mp_local_host, 5060),
+							  ts_UserInfo(cp.called)));
+		cp.comp.sip_url_gsm := valueof(ts_SipAddr(ts_HostPort(mp_osmosip_host, 5060),
+							  ts_UserInfo(cp.calling)));
 		cp.mncc_call_id := f_sip_rand_seq_nr();
 	} else {
-		cp.comp.sip_url_ext := valueof(ts_SipAddr(cp.calling, mp_local_host, 5060));
-		cp.comp.sip_url_gsm := valueof(ts_SipAddr(cp.called, mp_osmosip_host, 5060));
+		cp.comp.sip_url_ext := valueof(ts_SipAddr(ts_HostPort(mp_local_host, 5060),
+							  ts_UserInfo(cp.calling)));
+		cp.comp.sip_url_gsm := valueof(ts_SipAddr(ts_HostPort(mp_osmosip_host, 5060),
+							  ts_UserInfo(cp.called)));
 		cp.comp.sip_call_id := hex2str(f_rnd_hexstring(15));
 	}
 	cp.comp.sip_seq_nr := f_sip_rand_seq_nr();
@@ -338,7 +342,7 @@
 	}
 
 	/* OSC -> SIP: OSC confirms call establishment to SIP side */
-	as_SIP_expect_resp(tr_SIP_Response(cp.comp.sip_call_id, sip_addr_ext, sip_addr_gsm, contact_addr := ?,
+	as_SIP_expect_resp(tr_SIP_Response(cp.comp.sip_call_id, sip_addr_ext, sip_addr_gsm, contact := ?,
 					   method := "INVITE", status_code := 200,
 					   seq_nr := ?, reason := "OK",
 					   body := expect_sdp_to_sip));
