Feature cheat-sheet

B2BUA Instance SAS Support Originating / Terminating Point(s) in Session Plan Network Operator Data Subscriber Data Stateful or Stateless POJO Feature or SBB Feature

MMTEL

Yes

Terminating

  • SipAccess_PartyRequest

  • SipAccess_PartyResponse

  • SipAccess_SubscriberCheck

  • SipAccess_ServiceTimer

  • SipMidSession_PartyRequest

  • SipMidSession_PartyResponse

  • SubscriptionSipRequest

  • SubscriptionSipResponse

  • SipMidSession_CreditAllocatedPostCC

  • SipMidSession_CreditLimitReachedPostCC

  • SipMidSession_OCSFailurePostCC

  • SipLegEnd

  • SipEndSession

Yes

No

Stateful

SBB with multiple FSMs encoded into session state

Source Code

This feature’s source code is available in the Sentinel VoLTE SDK in the mmtel-conferencing module pack. It can be viewed by using the create-module command in the SDK with that module pack, for example:

> create-module new-conf-module opencloud#mmtel-conferencing#volte/2.9.0;2.9.0.0

This command will prompt you for information needed to create the new modules, once completed the original source for the feature can be found in the new modules.

The module-pack includes the following modules relevant to this feature:

Module Name Description

mmtel-conferencing

Group module for the feature that includes all of the modules listed below.

mmtel-conf-library

Contains common code for the conference modules.

mmtel-conf-profile

Contains the profile specification for the conferencing configuration profile table.

mmtel-conf-view-profile

Contains the profile specification for the profile table used to track information about a conference.

mmtel-conf-event-schema-library

Generates java code for the the conference event XML schema.

mmtel-conf-msml-schema-library-dialogic

Generates java code for the MSML XML schema. Required for interaction with Dialogic MRF.

mmtel-conf-msml-schema-library-radisys

Generates java code for the MSML XML schema. Required for interaction with Radisys MRF.

mmtel-conf-mapper-library-dialogic

Mapper library that uses mmtel-conf-msml-schema-library-dialogic to create conference MSML.

mmtel-conf-mapper-library-radisys

Mapper library that uses mmtel-conf-msml-schema-library-radisys to create conference MSML.

mmtel-conf

Contains the feature itself.

Subscriber data

Not applicable; the feature is generally available unless disabled at the network level.

Network data

Data is stored in the MMTelCONFConfigProfileTable profile, which is initially set up by the installer.

Parameter Type Description Default Note
MRFURI

String

SIP or TEL URI for the MRF

none

ICSCFURI

String

SIP or TEL URI for the I-SCSCF

none

Mandatory when the IsMrfRoutableViaIMS option is set to True.

ConfFactoryPSI

String

SIP or TEL URI for conferencing service PSI

none

ConfMaxParticipants

Integer {0, 3, or greater}

Maximum number of participants; 0 = disabled

3

ConfCascadingEnabled

Boolean

Allow other conference participants to cascade conferencing

true

Reserved. Current implementation ignores it. Cascading is not explicitly disabled.

ConferenceViewRemovalDelay

Long

Delay after conference ends before ConferenceView profiles are removed

none

Delay to allow all outstanding subscriptions to conference to end

IsVideoConferenceAllowed

Boolean

Policy setting that allows a video conference to be created or not

False

IsMrfRoutableViaIMS

Boolean

Policy setting that specifies if calls to the MRF should be routed via IMS

False

If set to true, then the ICSCFURI has to be set

AddOrigParameter

Boolean

Indicates whether or not to add the orig URI parameter to the Route header for initiating calls to participants

True

RootOnSelector

Boolean

Decides whether the 'root' element will be a child of the 'selector' element, otherwise will be a child of 'videolayout'

False

Bandwidth

Integer

Bandwidth value to be used as an attribute of the 'root' element if not specified in INVITE SDP

128

Required for integration with Radisys MRF

MinimumPictureInterval

Integer

Mpi value to be used as an attribute of the 'root' element if not specified in INVITE SDP

16

Required for integration with Radisys MRF

MaximumPictureSize

String

Bpp value to be used as an attribute of the 'root' element if not specified in INVITE SDP

none

Required for integration with Radisys MRF

Framesize

Integer

Framesize value to be used as an attribute of the 'root' element if not specified in INVITE SDP

396

Required for integration with Radisys MRF

ProfileLevelId

String

ProfileLevelId value to be used as an attribute of the 'root' element if not specified in INVITE SDP

00800a

Required for integration with Radisys MRF

Description

Feature name

MMTelCONF

Applicable contexts

SIP service

Prerequisite features

This feature allows a user to create a multi-party session between two or more parties. The feature is initially triggered when a subscriber (conference moderator) makes a call to the conferencing factory URI that points towards a media server (MRFC/MRFP). Subsequently, the conference moderator joins one or more participants into the conference by creating a call leg between the media server and every participant. For every participant added to the conference the feature instructs the media server to join (or mix) media of the new participant with the conference session media. The feature enables n-way voice communication between all conference participants by mixing media from each participant session.

Conference moderator is a special role that allows adding and removing participants to and from a conference. Charging is correlated to the moderator session. Accordingly, all participants' sessions are terminated when the moderator disconnects.

The feature feeds conference state data into the MMTel Conference Subscription, which renders the state of a conference to arbitrary endpoints subscribed to the conference event package.

Conferencing between three participants

three party conference

Conference setup begins when the conference moderator establishes a session with the media server using the conferencing feature. Although not strictly a precondition, the conference moderator would have established sessions with party B and C (dialogs x and y). These are established outside the scope of the conferencing feature. The moderator dials a destination that is translated into a conference factory URI by the feature, and routed to the media server.

Additionally, when the moderator sets up a connection to the media server, the feature allocates a conference focus URI. It is an opaque SIP URI that identifies the conference instance, and essentially the multi-party session. The conference focus URI is used as a SIP target by all participants including the moderator for all subsequent SIP messaging.

Having set up the initial connection, the conference moderator creates a conference object and begins adding participants to the conference. It is a multi-step process that involves setting up new sessions with the new participants and interaction with the media server, using the MSML protocol over SIP/INFO as the protocol transaction transport. See Interaction with Media Server for details.

Three-party conference setup overview

When the moderator establishes the session with the media server (control connection) the conferencing feature:

  • creates the MSML conferencing object and the first MSML connection for the moderator.

The moderator can then join a participant by creating a SIP REFER transaction on dialog A, where the REFER request has a Refer-to header with a URI header Replaces that references an existing call x between the moderator (user A) and prospective participant (user B).

The conferencing feature then:

  • acknowledges the REFER request with a 202 response

  • performs a charging authorization check

  • if charging authorization check is successful, creates and links two SIP sessions:

    • the conferencing server and the media server (dialog B1)

    • the new participant and the conferencing server (dialog B)

Note After dialog B has been successfully created, the corresponding call x is terminated by the UA of the user B, as a part of processing of the INVITE request with the Replaces header copied from the corresponding REFER request.
  • re-uses the MSML conferencing object, and joins the participant into the conference.

Once successful, the first two participants are joined into the conference. Adding subsequent participants is an identical process.

three-party-conference-sequence

Routing SIP traffic towards Media Server (MRF) through the IMS

The MMTelCONF feature may directly contact a Media Server/Media Resource Function. This means that any INVITE from the feature is sent directly to the MRF. The Request URI of the outbound INVITE is set to the URI of the MRF.

This feature also supports routing INVITEs destined for the MRF through the IMS. In order to route through the IMS, the network configuration attribute IsMrfRoutableViaIMS must be set to true in the MMTelCONFConfigProfileTable

When this attribute is set to true and the initial INVITE from the conference moderator is received via the S-CSCF, the feature stores the Record-route SIP URI in the Session State attribute named SCSCFRouteAddress. In order to route the INVITE through the IMS, the feature retrieves the SIP URI (of the S-CSCF) from Session State, and places it as the topmost route header of the outbound INVITE.

The feature will also add a header parameter specified in configuration attribute RouteOrigUrlParameter to the Route header. For example, if parameter is set to value "orig" it will enable originating services to be run on outbound sessions from the conference server towards the conference participants.

Conference media

Every conference participant establishes signalling and media sessions with Media Server. Media Server performs mixing of media of all participants and enables all participants to hear each other (audio conference) and see each other (video conference).

Conference audio mixer

Loudest participants Optional MSML element <n-loudest> determines the number of participants from which audio is mixed based on their audio energy. MMTelCONF doesn’t define this element and relies on the default behaviour that causes Media Server to mix audio from all participants.

Audio sampling rate

Optional attribute samplerate determines the sample rate for the audio mixer. MMTelCONF doesn’t define this attribute leaving to the default 8000 kHz.

Active speaker notification

Active speaker notification enables active speaker to be notified with appropriate type of MSML event. MMTelCONF doesn’t define this attribute leaving to the default behaviour where notification is not supported.

DTMF and in-band tone clamping

When enabled Media Server blocks DTMF and in-band tones from being mixed. MMTelCONF doesn’t define this attribute leaving to the default where clamping is not performed.

Video layout

MMTelCONF implements a simple video layout where a single region over the root window displays the most active speaker. The same video output is offered to all conference participants.

Video resolution

Range of video resolutions are supported and configurable at a feature level. Media Server must support the values configured.

Abbreviation MSML schema v1.1 compliant Value Note

CIF

Yes

352 × 288

Supported; Default

QCIF

Yes

176 × 144

Supported

4CIF

Yes

704 × 576

Not supported

16CIF

Yes

1408 × 1152

Not supported

SQCIF

No

128 × 96

Proprietary support only

VGA

No

640 x 480

Proprietary support only

QVGA

No

320 x 240

Proprietary support only

HD720p

No

1280 x 720

Proprietary support only

HD720p_4x3

No

960 x 720

Proprietary support only

Degrading from and upgrading to video media

Video conference is triggered when:

Video conferencing is administratively enabled (IsVideoConferenceAllowed=true), and Conference moderator makes a video media offer that is acceptable to Media Server If one of these preconditions is not met the conference shall have only audio media mixed irrespective if all or some participants have successfully negotiated video session with Media Server. This is because the feature will not instruct the Media Server to mix video media.

When the feature has determined a video conference session state field IsVideoConference will be set to true. The conference will remain marked as video conference regardless of whether some or all participants downgrade their media to audio only.

If a conference has been determined as a video conference any one participant including the moderator can downgrade/upgrade the media to/from video by sending re-INVITE with video media description IP port set to zero (downgrade) or non-zero (upgrade). Alternatively, conference participant can re-INVITE with video media description excluded or included achieving the same result.

Video only conference

Video only communication may occur on any one participant leg provided this is acceptable to both Media Server and the participant. Video only communication can occur when a participant or media server didn’t have matching audio codecs or have mismatching parameters.

Terminating conference

The conference is considered to be terminated when the conference moderator, either:

  • has disconnected, which will trigger the feature to remove all remaining participants

  • is the last participant remaining after all other participants have disconnected.

Removing participants

The conference moderator can eject any participant at will by creating a REFER transaction with a request that contains a Refer-to header with a URI parameter method=BYE and a URI referencing the participant to be ejected. This feature removes the participant by terminating both call legs for that participant.

Re-INVITE Based Three-party conference setup overview

There is an alternative flow when setting up a conference. Under this flow, participants receive a re-INVITE on the consulting call rather than an INVITE with Replaces. This means that releasing the consulting call between the moderator and the participant is now the responsibility of the AS, rather than the UE.

In order for the re-INVITE based flow to function:

  1. SCC Conference Handling configuration must be toggled on (set the EnableSCCConfHandling attribute to true)

  2. there is no originating iFC for the call from the moderator towards the Conference Factory PSI

    1. NOTE: this restriction has been lifted in version 2.9.0.4 and later in the 2.9.0 series

  3. originating and terminating SCC-AS must be implemented

  4. the INVITE with Replaces sent by conferencing must trigger originating SCC processing

  5. all sessions are subject to Session Tracking (this is automatically enabled when the EnableSCCConfHandling attribute is set to true)

Once the requirements are met the originating SCC-AS can implement the re-INVITE based flow. For a reference to the features used to implement this in the SCC-AS please refer to Reuse of access transfer procedures for conferencing. Configuration and flows for this capability are described in the following portion.

Note that since 2.9.0.4 the MMTel Conference feature will use the X-MSW-Original-Refer-To header in preference to the Refer-To header in the Re-INVITE based conference setup. This is to facilitate conference moderator Access Transfer where an originating SCC-AS must be present between the moderator UE and the call to the Conference Factory.

SCC Conference Handling Configuration

SCC Conference handling configuration data is stored in the SCCConfHandlingConfigProfileTable profile table. Each profile is scoped according to a Sentinel Selection Key. By default there is one profile in the table, which is created by the installer. Each profile contains the following attributes.

Parameter Type Description Default Note
EnableSCCConfHandling

Boolean

Enables SCC conf handling

false

ConfFactoryPSI

String

SIP or TEL URI for conferencing service PSI

none

Needs to match the value of ConfFactoryPSI in Network data

Flows

The first flow shows standard treatment where the INVITE with Replaces is passed and translated all the way through to the participant.

scc-orig-conference-invite-with-replaces-no-orig-conf-trigger

The second flow shows the re-INVITE based alternative enabled by the originating SCC where the INVITE with Replaces is converted to a re-INVITE on the participant’s consulting call.

scc-orig-conference-invite-with-replaces-scc-orig-reinvite

Interaction with MMTel Conference Subscription feature

MMTel Conference and MMTel Conference Subscription features share the data stored in the MMTelCONFView profiles associated with a given conference if there is at least one active subscription session for the associated conferenceID. The data is updated in the MMTel Conference feature when the conference is modified and is subsequently read by the MMTel Conference Subscription feature when it periodically polls for state changes. The ConferenceViewRemovalDelay in the MMTel Conference feature’s configuration provides a mechanism to allow all subscription sessions associated with MMTel Conference Subscription feature for the ended conference to complete before the MMTelCONFView profiles are removed.

Conference Privacy

During a standard conference call, outbound INVITEs to conference participants after the REFER message include a Referred-By header with the conference moderator’s SIP identity.

If the conference moderator includes a Privacy header with value User or Header in either the initial INVITE to the conference focus or the REFER message to participants, then the Referred-By header is excluded from the INVITE to participants.

If the moderator or partipants include a Privacy header with value Id or User, then the subscriber’s identity in conference subscription notifications is anonymized.

Feature interaction

An initial INVITE with a Replaces header must be exempted from processing by a feature that performs call re-targeting, call barring, call rejection, or early session announcements.

Charging

Online charging uses a single OCS session for all legs of the conference:

  • The OCS Session begins when the conference creator sets up a call with the conference server (MT instance).

  • A credit check is performed before each participant is joined (event-based charging).

  • A credit check/reservation is performed on the MO instance of every participant leg.

  • The icid value of the P-Charging-Vector header in the received INVITE from the conference creator is copied into the P-Charging-Vector of every INVITE sent towards a participant, as a way of charging correlation.

Inputs and outputs

Session state and leg manager data

Inputs

Name Type Format Description Behaviour if null/invalid Note

Sentinel Selection Key

com.opencloud.sentinel.common.SentinelSelectionKey

selection key (for example, <platform>::::)

For selecting configuration data

Feature not executed

Session State Data

Sentinel Script Execution Point

enum com.opencloud.sentinel.feature.SipFeatureScriptExecutionPoint

Determination of context of execution, such as credit check, early session, mid-dialog session

No execution

Session State Data

Call Type

enum com.opencloud.sentinel.common.CallType

Determination of context of execution, such as MobileTerminating

NA

Session State Data

Call Leg

com.opencloud.sentinel.multileg.Leg

Determination of leg that receives an event

Call terminated

Leg Manager API

MMTelCONFServiceData

Complex

Read from the HSS or HLR in SubscriberDataLookupFromHSSor SubscriberDataLookupFromHLR

Feature not executed

Session State Data

Outputs

Name Type Format Description Note
ConferenceID

String

A 16-character alpha-numeric string prefixed with mmtel-conf-

Generated by the feature when setting up moderator connection

ConferenceFocusAddress

String

SIP URI

URI derived from conference ID used to address the conference UA instance, such as <sip:mmtel-conf-VdvxbG3LUjb-CzwXAHnCqQ@10.1.1.1:5060;oc-node=101;lr>;isfocus

Session State Data

ControlPartLegName

String

Control leg name, participant side

Session State Data

ControlMRFLegName

String

Control leg name, Media server side

Session State Data

CurrentConnectionRequest

com.opencloud.volte.sentinel.mmtel.feature.conf MMTelCONFConnectionRequest

Value object that represent request data and state of processing for joining a new participant; request that is being processed currently

Session State Data

ConnectionRequestQueue

com.opencloud.volte.sentinel.mmtel.feature.conf MMTelCONFConnectionRequestQueue

Pending requests to join new participants

Session State Data

JoiningParticipants

com.opencloud.volte.sentinel.mmtel.feature.conf MMTelCONFConnectionRequestQueue

Requests for which media bridging is in progress (MSML transaction is in progress)

Session State Data

JoinedParticipants

com.opencloud.volte.sentinel.mmtel.feature.conf MMTelCONFConnectionRequestQueue

Value objects that represent that participants that have been joined into conference including those already disconnected

Session State Data

VideoConferenceResolution

com.opencloud.volte.sentinel.mmtel.feature.conf VideoConferencePolicyType.VideoConferenceResolution

Value to represent the video conference resolution used for control MRF session

Session State Data

Bandwidth

Integer

Bandwidth value to use for control MRF session

Session State Data

MinimumPictureInterval

Integer

Mpi value to use for control MRF session

Session State Data

MaximumPictureSize

String

Bpp value to use for control MRF session

Session State Data

FrameSize

Integer

Framesize value to use for control MRF session

Session State Data

ProfileLevelId

String

Profile-level-id value to use for control MRF session

Session State Data

Codec

String

Codec value to use for control MRF session

Session State Data

Execution of this feature can also affect the conference view during execution if a participant is added or their status has changed.

Statistics

MMTelCONF statistics are tracked by the MMTelCONF SBB and can be found under the following parameter set:
SLEE-Usage → volte.sentinel.sip service ID → MMTelCONF SBB ID.

Statistic Incremented when…​
FeatureInvocations

the conference feature runs

FeatureFsmCompletions

the main conference FSM reaches its end state

SentinelAborts

Sentinel VoLTE instructs the conference feature to abort execution

SipParseMinorFailure

a non-fatal error occurs while attempting to read the information in a SIP message

SipDataAccessFailure

a problem occurs while trying to access a SIP leg or message

SipParticipantSentByeOnActiveConnection

a BYE request is received on an active (join operation complete) participant connection

SipParticipantSentByeOnInactiveConnection

a BYE request is received on an inactive (join operation incomplete) participant connection

SipMRFSentByeOnActiveConnection

a BYE request is received on an active (join operation complete) media server connection.

SipMRFSentByeOnInactiveConnection

a BYE request is received on an inactive (join operation incomplete) media server connection

ConferenceFeatureConfigurationFailure

a problem occurs while trying to load the conference feature’s network-level configuration data

ConferenceCoreError

a fatal error occurs in the core conference feature FSM

ConferenceConnectionError

a fatal error occurs in the conference feature’s non-control connection management FSM

ConferenceConnectionEstablished

a non-control connection is successfully established between a conference participant and the MRF

ConferenceConnectionMRFLegCreated

a non-control leg to the MRF is successfully established

ConferenceConnectionTerminated

a fully established non-control conference connection is terminated

ConferenceConnectionCreditCheckInitiated

the conference feature triggers a credit check

ConferenceConnectionParticipantSupportsVideo

a participant has indicated that they support video in an SDP answer

ConferenceControlConnectionError

a fatal error occurs in the conference feature’s control connection management FSM

ConferenceControlConnectionEstablished

a control connection is successfully established between a conference moderator and the MRF.

ConferenceControlConnectionTerminated

a fully established conference control connection is terminated.

ConferenceControlConnectionReceivedMalformedMessage

a badly formed REFER request is received from the conference moderator.

ConferenceControlConnectionQueuedNotify

a NOTIFY is queued on the control connection

ConferenceControlConnectionSentNotify

a NOTIFY is sent to the conference moderator

FromHeaderAnonymised

the moderator has indicated they want privacy applied to the outgoing INVITE

ConferenceMediaVideoSelected

the moderator sets the conference up as a video session

ConferenceMediaServerIsAccessedViaSCSCF

the feature makes a call to the MRF via the S-CSCF

Error scenarios

Scenario Handling

Second initial request received towards conference PSI

Report featureFailedToExecute

Non MT request received by conference PSI

Report featureFailedToExecute

Mappers

This feature uses two different sets of mappers that conform to:

Mapping Mapper Execution Point

MMTelCONFConfigWrapper.class → CreateConferenceMSML.class

MMTelCONFConnectionRequestQueue.class → JoinConferenceMSML.class

IncomingSipResponse.class → ResponseMSML.class

Mapper Configuration

As mentioned in the previous section this feature uses two different sets of mappers. The set to configure depends on the media server in use with the feature. Configuring mappers can be done in the SentinelMapperSetEntryTable. The following yaml excerpts outline which profiles should be configured for each vendor.

Dialogic

SentinelMapperSetEntryTable:
    ${platform.operator.name}::sipcall:::MMTelConfMSML-CreateConference-Dialogic:
        MapperSetName: '${platform.operator.name}:'
        SessionType: sipcall
        PlanId: ''
        MapperExecutionPoint: ''
        MappingName: MMTelConfMSML-CreateConference-Dialogic
    ${platform.operator.name}::sipcall:::MMTelConfMSML-JoinConference-Dialogic:
        MapperSetName: '${platform.operator.name}:'
        SessionType: sipcall
        PlanId: ''
        MapperExecutionPoint: ''
        MappingName: MMTelConfMSML-JoinConference-Dialogic
    ${platform.operator.name}::sipcall:::MMTelConfMSML-Response-Dialogic:
        MapperSetName: '${platform.operator.name}:'
        SessionType: sipcall
        PlanId: ''
        MapperExecutionPoint: ''
        MappingName: MMTelConfMSML-Response-Dialogic

Radisys

SentinelMapperSetEntryTable:
    ${platform.operator.name}::sipcall:::MMTelConfMSML-CreateConference-Radisys:
        MapperSetName: '${platform.operator.name}:'
        SessionType: sipcall
        PlanId: ''
        MapperExecutionPoint: ''
        MappingName: MMTelConfMSML-CreateConference-Radisys
    ${platform.operator.name}::sipcall:::MMTelConfMSML-JoinConference-Radisys:
        MapperSetName: '${platform.operator.name}:'
        SessionType: sipcall
        PlanId: ''
        MapperExecutionPoint: ''
        MappingName: MMTelConfMSML-JoinConference-Radisys
    ${platform.operator.name}::sipcall:::MMTelConfMSML-Response-Radisys
        MapperSetName: '${platform.operator.name}:'
        SessionType: sipcall
        PlanId: ''
        MapperExecutionPoint: ''
        MappingName: MMTelConfMSML-Response-Radisys

Feature responses

Response Reason
endSession

Max number of participants < 3, or MMTelCONFServiceData.OperatorAuthorized is false.

featureFailedToExecute

Multiple initial requests or non MT initial request received towards conference PSI

featureHasFinished

Feature has finished

Configuration profile naming

Configuration Profile Table Name Description Profile Naming
MMTelCONFConfigProfileTable

See Network Data for a detailed description of parameters

Example configuration for conference feature where localhost:5260 is the address of the MMTel TAS:

ConfFactoryPSI ConfMaxParticipants ConfCascadingEnabled ConferenceViewRemovalDelay
sip:conf-factory@localhost:5260
3
false
30000

Conference view

The current view of a conference is stored as a series of read-only profiles (one for each participant) within the MMTelCONFViewTable profile table.

Profile Table Name Description Profile Naming
MMTelCONFViewTable

Stores the current state of a participant within a conference

${CONFERENCE_ID}__${CONNECTION_ID}
Parameter Type Description
ConferenceEndpointStatus

String

Current status of a participant connected, disconnected or on-hold

ConferenceID

String

Unique 16-character alpha-numeric string prefixed by mmtel-conf- (common amongst all participants)

ConnectionID

String

Unique identifier for a participant as the uniqueness of ParticipantID cannot be guaranteed

ParticipantID

String

URI identifying the participant

ParticipantDisplayText

String

Participant display text

EndpointID

String Unique

Identifier for the endpoint

ConferenceEnded

Boolean

true if the conference has ended and we are waiting for notifications to end

LastUpdateTime

Long

Timestamp representing the last time the profile was updated

ParticipantRequestedPrivacy

Boolean

true if conference participant requested privacy

Conference event package

A UE may attempt to subscribe to notifications for the conference event package. Subscriptions for the conference event package are handled by the MMTel Conference Subscription.

Provisioning interfaces

The feature is provisioned using the Sentinel REST API or web interface.

Previous page Next page
Sentinel VoLTE Version 2.9.0