diff --git a/library/GSUP_Types.ttcn b/library/GSUP_Types.ttcn
index 8081347..e627538 100644
--- a/library/GSUP_Types.ttcn
+++ b/library/GSUP_Types.ttcn
@@ -1089,18 +1089,26 @@
 	hexstring imsi,
 	OCT4 sid,
 	GSUP_SessionState state,
-	template (omit) octetstring ss
+	template (omit) octetstring ss := omit,
+	template (omit) integer cause := omit
 ) return GSUP_IEs {
 	/* Mandatory IEs */
 	var GSUP_IEs ies := {
-		valueof(ts_GSUP_IE_IMSI(imsi)),
-		valueof(ts_GSUP_IE_SessionId(sid)),
-		valueof(ts_GSUP_IE_SessionState(state))
+		valueof(ts_GSUP_IE_IMSI(imsi))
 	};
 
+	/* Cause IE is needed for PROC_SS_ERR */
+	if (isvalue(cause)) {
+		ies := ies & { valueof(ts_GSUP_IE_Cause(valueof(cause))) };
+	}
+
+	/* Mandatory session IEs */
+	ies := ies & { valueof(ts_GSUP_IE_SessionId(sid)) };
+	ies := ies & { valueof(ts_GSUP_IE_SessionState(state)) };
+
 	/* Optional SS payload */
 	if (isvalue(ss)) {
-		ies[3] := valueof(ts_GSUP_IE_SSInfo(valueof(ss)));
+		ies := ies & { valueof(ts_GSUP_IE_SSInfo(valueof(ss))) };
 	}
 
 	return ies;
@@ -1109,29 +1117,42 @@
 	template hexstring imsi,
 	template OCT4 sid := ?,
 	template GSUP_SessionState state := ?,
-	template octetstring ss := ?
+	template octetstring ss := omit,
+	template integer cause := omit
 ) return template GSUP_IEs {
 	/* Mandatory IEs */
 	var template GSUP_IEs ies := {
-		tr_GSUP_IE_IMSI(imsi),
-		tr_GSUP_IE_SessionId(sid),
-		tr_GSUP_IE_SessionState(state)
+		tr_GSUP_IE_IMSI(imsi)
 	};
-	var integer last_idx := 3;
+	var integer idx := 1;
+
+	/* Cause IE is needed for PROC_SS_ERR */
+	if (istemplatekind(cause, "*")) {
+		ies[idx] := *;
+		idx := idx + 1;
+	} else if (not istemplatekind(cause, "omit")) {
+		ies[idx] := tr_GSUP_IE_Cause(cause);
+		idx := idx + 1;
+	}
+
+	/* Mandatory session IEs */
+	ies[idx] := tr_GSUP_IE_SessionId(sid);
+	ies[idx + 1] := tr_GSUP_IE_SessionState(state);
+	idx := idx + 2;
 
 	/* Optional SS payload */
 	if (istemplatekind(ss, "*")) {
-		ies[3] := *;
-		last_idx := last_idx + 1;
+		ies[idx] := *;
+		idx := idx + 1;
 	} else if (not istemplatekind(ss, "omit")) {
-		ies[3] := tr_GSUP_IE_SSInfo(ss);
-		last_idx := last_idx + 1;
+		ies[idx] := tr_GSUP_IE_SSInfo(ss);
+		idx := idx + 1;
 	}
 
 	/* the GSUP Message Class IE is optional, as old implementations don't have it yet */
 	var template GSUP_IEs ies2 := ies;
-	ies2[last_idx] := tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_USSD);
-	last_idx := last_idx + 1;
+	ies2[idx] := tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_USSD);
+	idx := idx + 1;
 
 	return (ies, ies2);
 }
@@ -1181,12 +1202,7 @@
 	integer cause
 ) := ts_GSUP(
 	OSMO_GSUP_MSGT_PROC_SS_ERROR,
-	{
-		valueof(ts_GSUP_IE_IMSI(imsi)),
-		valueof(ts_GSUP_IE_Cause(cause)),
-		valueof(ts_GSUP_IE_SessionId(sid)),
-		valueof(ts_GSUP_IE_SessionState(state))
-	}
+	f_gen_ts_ss_ies(imsi, sid, state, cause := cause)
 );
 template GSUP_PDU tr_GSUP_PROC_SS_ERR(
 	template hexstring imsi,
@@ -1195,13 +1211,7 @@
 	template integer cause := ?
 ) := tr_GSUP(
 	OSMO_GSUP_MSGT_PROC_SS_ERROR,
-	{
-		tr_GSUP_IE_IMSI(imsi),
-		tr_GSUP_IE_Cause(cause),
-		tr_GSUP_IE_SessionId(sid),
-		tr_GSUP_IE_SessionState(state),
-		tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_USSD)
-	}
+	f_gen_tr_ss_ies(imsi, sid, state, cause := cause)
 );
 
 template (value) GSUP_PDU ts_GSUP_MO_FORWARD_SM_REQ(
