diff --git a/policy/modules/system/userdomain.if b/policy/modules/system/userdomain.if
index 33a436ee..407b2c3d 100644
--- a/policy/modules/system/userdomain.if
+++ b/policy/modules/system/userdomain.if
@@ -1169,6 +1169,311 @@ template(`userdom_admin_user_template',`
') dnl endif TODO
')
+########################################
+##
+## Change to the generic user role.
+##
+##
+##
+## Change to the generic user role.
+##
+##
+## This is a template to support third party modules
+## and its use is not allowed in upstream reference
+## policy.
+##
+##
+##
+##
+## The prefix of the user role (e.g., user
+## is the prefix for user_r).
+##
+##
+##
+#
+template(`userdom_role_change_generic_user',`
+ ifdef(`strict_policy',`
+ userdom_role_change_template($1,user)
+ ',`
+ refpolicywarn(`$0($*) has no effect in targeted policy.')
+ ')
+')
+
+########################################
+##
+## Change from the generic user role.
+##
+##
+##
+## Change from the generic user role to
+## the specified role.
+##
+##
+## This is a template to support third party modules
+## and its use is not allowed in upstream reference
+## policy.
+##
+##
+##
+##
+## The prefix of the user role (e.g., user
+## is the prefix for user_r).
+##
+##
+##
+#
+template(`userdom_role_change_from_generic_user',`
+ ifdef(`strict_policy',`
+ userdom_role_change_template(user,$1)
+ ',`
+ refpolicywarn(`$0($*) has no effect in targeted policy.')
+ ')
+')
+
+########################################
+##
+## Change to the staff user role.
+##
+##
+##
+## Change to the staff user role.
+##
+##
+## This is a template to support third party modules
+## and its use is not allowed in upstream reference
+## policy.
+##
+##
+##
+##
+## The prefix of the user role (e.g., user
+## is the prefix for user_r).
+##
+##
+##
+#
+template(`userdom_role_change_staff',`
+ ifdef(`strict_policy',`
+ userdom_role_change_template($1,staff)
+ ',`
+ refpolicywarn(`$0($*) has no effect in targeted policy.')
+ ')
+')
+
+########################################
+##
+## Change from the staff user role.
+##
+##
+##
+## Change from the staff user role to
+## the specified role.
+##
+##
+## This is a template to support third party modules
+## and its use is not allowed in upstream reference
+## policy.
+##
+##
+##
+##
+## The prefix of the user role (e.g., user
+## is the prefix for user_r).
+##
+##
+##
+#
+template(`userdom_role_change_from_staff',`
+ ifdef(`strict_policy',`
+ userdom_role_change_template(staff,$1)
+ ',`
+ refpolicywarn(`$0($*) has no effect in targeted policy.')
+ ')
+')
+
+########################################
+##
+## Change to the sysadm user role.
+##
+##
+##
+## Change to the sysadm user role.
+##
+##
+## This is a template to support third party modules
+## and its use is not allowed in upstream reference
+## policy.
+##
+##
+##
+##
+## The prefix of the user role (e.g., user
+## is the prefix for user_r).
+##
+##
+##
+#
+template(`userdom_role_change_sysadm',`
+ ifdef(`strict_policy',`
+ userdom_role_change_template($1,sysadm)
+ ',`
+ refpolicywarn(`$0($*) has no effect in targeted policy.')
+ ')
+')
+
+########################################
+##
+## Change from the sysadm user role.
+##
+##
+##
+## Change from the sysadm user role to
+## the specified role.
+##
+##
+## This is a template to support third party modules
+## and its use is not allowed in upstream reference
+## policy.
+##
+##
+##
+##
+## The prefix of the user role (e.g., user
+## is the prefix for user_r).
+##
+##
+##
+#
+template(`userdom_role_change_from_sysadm',`
+ ifdef(`strict_policy',`
+ userdom_role_change_template(sysadm,$1)
+ ',`
+ refpolicywarn(`$0($*) has no effect in targeted policy.')
+ ')
+')
+
+########################################
+##
+## Change to the secadm user role.
+##
+##
+##
+## Change to the secadm user role.
+##
+##
+## This is a template to support third party modules
+## and its use is not allowed in upstream reference
+## policy.
+##
+##
+##
+##
+## The prefix of the user role (e.g., user
+## is the prefix for user_r).
+##
+##
+##
+#
+template(`userdom_role_change_secadm',`
+ ifdef(`enable_mls',`
+ userdom_role_change_template($1,secadm)
+ ',`
+ refpolicywarn(`$0($*) has no effect in non-MLS policy.')
+ ')
+')
+
+########################################
+##
+## Change from the secadm user role.
+##
+##
+##
+## Change from the secadm user role to
+## the specified role.
+##
+##
+## This is a template to support third party modules
+## and its use is not allowed in upstream reference
+## policy.
+##
+##
+##
+##
+## The prefix of the user role (e.g., user
+## is the prefix for user_r).
+##
+##
+##
+#
+template(`userdom_role_change_from_secadm',`
+ ifdef(`enable_mls',`
+ userdom_role_change_template(secadm,$1)
+ ',`
+ refpolicywarn(`$0($*) has no effect in non-MLS policy.')
+ ')
+')
+
+########################################
+##
+## Change to the auditadm user role.
+##
+##
+##
+## Change to the auditadm user role.
+##
+##
+## This is a template to support third party modules
+## and its use is not allowed in upstream reference
+## policy.
+##
+##
+##
+##
+## The prefix of the auditadm role (e.g., user
+## is the prefix for user_r).
+##
+##
+##
+#
+template(`userdom_role_change_auditadm',`
+ ifdef(`enable_mls',`
+ userdom_role_change_template($1,auditadm)
+ ',`
+ refpolicywarn(`$0($*) has no effect in non-MLS policy.')
+ ')
+')
+
+########################################
+##
+## Change from the auditadm user role.
+##
+##
+##
+## Change from the auditadm user role to
+## the specified role.
+##
+##
+## This is a template to support third party modules
+## and its use is not allowed in upstream reference
+## policy.
+##
+##
+##
+##
+## The prefix of the user role (e.g., user
+## is the prefix for user_r).
+##
+##
+##
+#
+template(`userdom_role_change_from_auditadm',`
+ ifdef(`enable_mls',`
+ userdom_role_change_template(auditadm,$1)
+ ',`
+ refpolicywarn(`$0($*) has no effect in non-MLS policy.')
+ ')
+')
+
########################################
##
## Make the specified type usable in a