diff --git a/library/M3UA_Templates.ttcn b/library/M3UA_Templates.ttcn
index 1063b50..5881b40 100644
--- a/library/M3UA_Templates.ttcn
+++ b/library/M3UA_Templates.ttcn
@@ -379,6 +379,218 @@
 	}
 }
 
+/***********************************************************************
+ * SSNM Class
+ ***********************************************************************/
+
+template (value) M3UA_Point_Code ts_M3UA_PC(uint24_t pc, uint8_t mask := 0) := {
+	mask := int2oct(mask, 1),
+	affected_Point_Code := int2oct(pc, 3)
+}
+
+template (value) M3UA_Affected_Point_Codes ts_M3UA_AffPc(template (value) M3UA_Point_Codes pcs) := {
+	tag := '0012'O,
+	lengthInd := 0,
+	pointCodes := pcs
+}
+template (present) M3UA_Affected_Point_Codes tr_M3UA_AffPc(template (present) M3UA_Point_Codes pcs) := {
+	tag := '0012'O,
+	lengthInd := ?,
+	pointCodes := pcs
+}
+
+template (value) M3UA_User_Cause ts_M3UA_UserCause(template (value) OCT2 cause,
+						   template (value) OCT2 user) := {
+	tag := '0204'O,
+	lengthInd := 0,
+	cause := cause,
+	user := user
+}
+template (present) M3UA_User_Cause tr_M3UA_UserCause(template (present) OCT2 cause,
+						     template (present) OCT2 user) := {
+	tag := '0204'O,
+	lengthInd := ?,
+	cause := cause,
+	user := user
+}
+
+template (value) PDU_M3UA ts_M3UA_DUNA(template (value) M3UA_Point_Codes affected_pcs,
+				       template (omit) OCT4 rctx := omit) := {
+	m3UA_DUNA := {
+		version := c_M3UA_VERSION,
+		reserved := '00'O,
+		messageClassAndType := '0201'O,
+		messageLength := 0,
+		messageParameters := {
+			network_Appearance := omit,
+			routing_Context := ts_M3UA_routing_ctx(rctx),
+			affected_Point_Codes := ts_M3UA_AffPc(affected_pcs),
+			info_String := omit
+		}
+	}
+}
+template (present) PDU_M3UA tr_M3UA_DUNA(template (present) M3UA_Point_Codes affected_pcs := ?,
+					 template OCT4 rctx := *):= {
+	m3UA_DUNA := {
+		version := c_M3UA_VERSION,
+		reserved := '00'O,
+		messageClassAndType := '0201'O,
+		messageLength := ?,
+		messageParameters := {
+			network_Appearance := *,
+			routing_Context := tr_M3UA_routing_ctx(rctx),
+			affected_Point_Codes := tr_M3UA_AffPc(affected_pcs),
+			info_String := *
+		}
+	}
+}
+
+template (value) PDU_M3UA ts_M3UA_DAVA(template (value) M3UA_Point_Codes affected_pcs,
+				       template (omit) OCT4 rctx := omit) := {
+	m3UA_DAVA := {
+		version := c_M3UA_VERSION,
+		reserved := '00'O,
+		messageClassAndType := '0202'O,
+		messageLength := 0,
+		messageParameters := {
+			network_Appearance := omit,
+			routing_Context := ts_M3UA_routing_ctx(rctx),
+			affected_Point_Codes := ts_M3UA_AffPc(affected_pcs),
+			info_String := omit
+		}
+	}
+}
+template (present) PDU_M3UA tr_M3UA_DAVA(template (present) M3UA_Point_Codes affected_pcs := ?,
+					 template OCT4 rctx := *):= {
+	m3UA_DAVA := {
+		version := c_M3UA_VERSION,
+		reserved := '00'O,
+		messageClassAndType := '0202'O,
+		messageLength := ?,
+		messageParameters := {
+			network_Appearance := *,
+			routing_Context := tr_M3UA_routing_ctx(rctx),
+			affected_Point_Codes := tr_M3UA_AffPc(affected_pcs),
+			info_String := *
+		}
+	}
+}
+
+template (value) PDU_M3UA ts_M3UA_DAUD(template (value) M3UA_Point_Codes affected_pcs,
+				       template (omit) OCT4 rctx := omit) := {
+	m3UA_DAUD := {
+		version := c_M3UA_VERSION,
+		reserved := '00'O,
+		messageClassAndType := '0203'O,
+		messageLength := 0,
+		messageParameters := {
+			network_Appearance := omit,
+			routing_Context := ts_M3UA_routing_ctx(rctx),
+			affected_Point_Codes := ts_M3UA_AffPc(affected_pcs),
+			info_String := omit
+		}
+	}
+}
+template (present) PDU_M3UA tr_M3UA_DAUD(template (present) M3UA_Point_Codes affected_pcs := ?,
+					 template OCT4 rctx := *):= {
+	m3UA_DAUD := {
+		version := c_M3UA_VERSION,
+		reserved := '00'O,
+		messageClassAndType := '0203'O,
+		messageLength := ?,
+		messageParameters := {
+			network_Appearance := *,
+			routing_Context := tr_M3UA_routing_ctx(rctx),
+			affected_Point_Codes := tr_M3UA_AffPc(affected_pcs),
+			info_String := *
+		}
+	}
+}
+
+template (value) PDU_M3UA ts_M3UA_SCON(template (value) M3UA_Point_Codes affected_pcs,
+				       template (omit) OCT4 rctx := omit) := {
+	m3UA_SCON := {
+		version := c_M3UA_VERSION,
+		reserved := '00'O,
+		messageClassAndType := '0204'O,
+		messageLength := 0,
+		messageParameters := {
+			network_Appearance := omit,
+			routing_Context := ts_M3UA_routing_ctx(rctx),
+			affected_Point_Codes := ts_M3UA_AffPc(affected_pcs),
+			concerned_Destination := omit,
+			congestion_Indicators := omit,
+			info_String := omit
+		}
+	}
+}
+template (present) PDU_M3UA tr_M3UA_SCON(template (present) M3UA_Point_Codes affected_pcs := ?,
+					 template OCT4 rctx := *):= {
+	m3UA_SCON := {
+		version := c_M3UA_VERSION,
+		reserved := '00'O,
+		messageClassAndType := '0204'O,
+		messageLength := ?,
+		messageParameters := {
+			network_Appearance := *,
+			routing_Context := tr_M3UA_routing_ctx(rctx),
+			affected_Point_Codes := tr_M3UA_AffPc(affected_pcs),
+			concerned_Destination := *,
+			congestion_Indicators := *,
+			info_String := *
+		}
+	}
+}
+
+template (value) PDU_M3UA ts_M3UA_DUPU(template (value) M3UA_Point_Codes affected_pcs,
+					template (value) OCT2 cause,
+					template (value) OCT2 user,
+					template (omit) OCT4 rctx := omit) := {
+	m3UA_DUPU := {
+		version := c_M3UA_VERSION,
+		reserved := '00'O,
+		messageClassAndType := '0205'O,
+		messageLength := 0,
+		messageParameters := {
+			network_Appearance := omit,
+			routing_Context := ts_M3UA_routing_ctx(rctx),
+			affected_Point_Codes := ts_M3UA_AffPc(affected_pcs),
+			user_Cause := ts_M3UA_UserCause(cause, user),
+			info_String := omit
+		}
+	}
+}
+template (present) PDU_M3UA tr_M3UA_DUPU(template (present) M3UA_Point_Codes affected_pcs := ?,
+					 template (present) OCT2 cause := ?,
+					 template (present) OCT2 user := ?,
+					 template OCT4 rctx := *):= {
+	m3UA_DUPU := {
+		version := c_M3UA_VERSION,
+		reserved := '00'O,
+		messageClassAndType := '0205'O,
+		messageLength := ?,
+		messageParameters := {
+			network_Appearance := *,
+			routing_Context := tr_M3UA_routing_ctx(rctx),
+			affected_Point_Codes := tr_M3UA_AffPc(affected_pcs),
+			user_Cause := tr_M3UA_UserCause(cause, user),
+			info_String := *
+		}
+	}
+}
+
+template (present) PDU_M3UA tr_M3UA_DRST := {
+	m3UA_DRST := {
+		version := c_M3UA_VERSION,
+		reserved := '00'O,
+		messageClassAndType := '0206'O,
+		messageLength := ?,
+		messageParameters := ?
+	}
+}
+
+template (present) PDU_M3UA tr_M3UA_SSNM := (tr_M3UA_DUNA, tr_M3UA_DAVA, tr_M3UA_DAUD,
+					     tr_M3UA_SCON, tr_M3UA_DUPU, tr_M3UA_DRST);
 
 /***********************************************************************
  * MGMT Class
