mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengmcesession.cpp
branchRCL_3
changeset 22 73a1feb507fb
parent 18 407431f36921
child 23 bc78a40cd63c
--- a/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengmcesession.cpp	Thu Aug 19 09:51:39 2010 +0300
+++ b/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengmcesession.cpp	Tue Aug 31 15:12:07 2010 +0300
@@ -28,9 +28,12 @@
 #include "musengsessiondurationtimer.h"
 #include "musengtelephoneutils.h"
 #include "musengmceutils.h"
+#include "mussessionproperties.h"
+#include "contactenginestub.h"
+#include "musenglivevideoplayer.h"
 
 //  SYSTEM INCLUDES
-
+#include <lcsourcefilecontrol.h>
 #include <digia/eunit/eunitmacros.h>
 #include <mceinsession.h>
 #include <mcevideostream.h>
@@ -42,9 +45,37 @@
 #include <mcevideocodec.h>
 #include <mceaudiocodec.h>
 #include <audiopreference.h>
+#include <mceavccodec.h>
 #include <mceh263codec.h>
-#include <mceavccodec.h>
+#include <mcecamerasource.h>
+#include <mcefilesource.h>
+#include <telmicmutestatuspskeys.h>
+
+// CONSTANTS
+
+_LIT8( KMusAvcBitrateLevel1TestText, "TestTextForAvcBrL1Level" );
+_LIT8( KMusAvcBitrateLevel1bTestText, "TestTextForAvcBrL1bLevel" );
+_LIT8( KMusAvcBitrateLevel1_1TestText, "TestTextForAvcBrL1_1Level" );
+_LIT8( KMusAvcBitrateLevel1_2TestText, "TestTextForAvcBrL1_2Level" );
+_LIT8( KMusAvcBitrateLevel1_3TestText, "TestTextForAvcBrL1_3Level" );
+_LIT8( KMusAvcBitrateLevel2TestText, "TestTextForAvcBrL2Level" );
+
+_LIT8( KMusAvcBitrateLevel_1b_ConfigKey, "AvcBrL1b=TestTextForAvcBrL1bLevel;" );
 
+_LIT8( KMusAvcBitrateLevel_1_1_ConfigKey, 
+"AvcBrL1_1=TestTextForAvcBrL1_1Level;");
+
+_LIT8( KMusAvcBitrateLevels_1_1_And_1b_ConfigKeys, 
+"AvcBrL1_1=TestTextForAvcBrL1_1Level;\
+AvcBrL1b=TestTextForAvcBrL1bLevel;" );
+
+_LIT8( KMusAvcAllLevelsConcatenation,
+"AvcBrL1=TestTextForAvcBrL1Level;\
+AvcBrL1b=TestTextForAvcBrL1bLevel;\
+AvcBrL1_1=TestTextForAvcBrL1_1Level;\
+AvcBrL1_2=TestTextForAvcBrL1_2Level;\
+AvcBrL1_3=TestTextForAvcBrL1_3Level;\
+AvcBrL2=TestTextForAvcBrL2Level;" );
 
 
 // -----------------------------------------------------------------------------
@@ -110,34 +141,37 @@
 //
 void UT_CMusEngMceSession::SetupL(  )
     {
-    iObserver = new( ELeave ) CMusEngObserverStub;
-    iLiveSession = CMusEngLiveSession::NewL( KNullDesC,
-                                             TRect(0,0, 100,100),
-                                             *iObserver,
-                                             *iObserver,
-                                             *iObserver );
+    iLcSessionObserver = new( ELeave )CLcSessionObserverStub;
+    iLcUiProvider = new( ELeave )CLcUiProviderStub;
+
+    User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid,
+                                        NMusSessionApi::KRemoteSipAddress,
+                                        KTestRecipientSipUri ) );    
+    
+    iLiveSession = CMusEngLiveSession::NewL();
+    iLiveSession->SetLcSessionObserver( iLcSessionObserver );
+    iLiveSession->SetLcUiProvider( iLcUiProvider );    
     
-    iSomeOtherSession = CMusEngLiveSession::NewL( KNullDesC,
-                                                  TRect(0,0, 100,100),
-                                                  *iObserver,
-                                                  *iObserver,
-                                                  *iObserver );
-    ESTABLISH_OUT_SESSION( iSomeOtherSession );
+    iSomeOtherSession = CMusEngLiveSession::NewL();
+    iSomeOtherSession->SetLcSessionObserver( iLcSessionObserver );
+    iSomeOtherSession->SetLcUiProvider( iLcUiProvider );
     
-    iClipSession = CMusEngClipSession::NewL( TRect(0,0, 100,100),
-                                             *iObserver,
-                                             *iObserver,
-                                             *iObserver );                                             
-    iClipSession->SetClipL( KTestVideoFileName() );
+    ESTABLISH_OUT_SESSION( iSomeOtherSession );
+   
+    iClipSession = CMusEngClipSession::NewL();
+    iClipSession->SetLcSessionObserver( iLcSessionObserver );
+    iClipSession->SetLcUiProvider( iLcUiProvider );
+    MLcSourceFileControl* sourceFileControl =
+        iClipSession->LocalVideoPlayer()->LcSourceFileControl();
+    sourceFileControl->SetLcFileNameL( KTestAvcVideoFileName() );
 
-    TBuf<50> videoCodec;
-    videoCodec.Copy( KMceSDPNameH264() );
-    iClipSession->SetSupportedVideoCodecListL(videoCodec);
+    delete iClipSession->iVideoCodecList;
+    iClipSession->iVideoCodecList = NULL;
+    iClipSession->iVideoCodecList = KMceSDPNameH264().AllocL();
     
     // Construct and establish an incoming session
-    iReceiveSession = CMusEngReceiveSession::NewL( TRect(0,0, 100,100), 
-                                                   *iObserver,
-                                                   *iObserver );
+    iReceiveSession = CMusEngReceiveSession::NewL();
+    iReceiveSession->SetLcSessionObserver( iLcSessionObserver ); 
     CMceInSession* inSession = CMceInSession::NewL( *iReceiveSession->iManager,
                                                     KTestOriginator() );
                                                     
@@ -153,12 +187,11 @@
                                                         inSession, 
                                                         &iContainer );
     iReceiveSession->iSession->iState = CMceSession::EProceeding;
-    iReceiveSession->AcceptInvitationL( ETrue );
-    
-    iObserver->Reset();
+    iReceiveSession->EstablishLcSessionL();
+   
+    iLcSessionObserver->Reset();
     }
 
-
 // -----------------------------------------------------------------------------
 //
 // -----------------------------------------------------------------------------
@@ -168,47 +201,282 @@
     delete iLiveSession;
     delete iClipSession;
     delete iReceiveSession;
-    delete iObserver;
+    delete iLcSessionObserver;
+    delete iLcUiProvider;
     delete iSomeOtherSession;
-    
+    PropertyHelper::Close();
+    // Delete static data from CenRep stub
+    CRepository::iStaticWriteAvcKeysToStaticData = EFalse;
+    CRepository::DeleteStubAvcConfigKeys();
+    CRepository::ResetStubGlobal();
+    CRepository::iForceFailWithCode = KErrNone;
     }
 
 
 
 // TEST CASES
 
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_LcSessionStateL()
+    {
+    // No MCE session -> MLcSession::EUninitialized
+    EUNIT_ASSERT_EQUALS( MLcSession::EUninitialized, 
+                         iLiveSession->LcSessionState() )
+                         
+    // MLcSession::EOpen
+    ESTABLISH_OUT_SESSION( iLiveSession )
+    EUNIT_ASSERT_EQUALS( TInt( CMceSession::EEstablished ),
+                         TInt( iLiveSession->iSession->iState ) )  
+    EUNIT_ASSERT_EQUALS( TInt( MLcSession::EOpen ), 
+                         TInt( iLiveSession->LcSessionState() ) )
+
+    // MLcSession::EInitialized
+    iLiveSession->iSession->iState = CMceSession::EIdle;
+    EUNIT_ASSERT_EQUALS( TInt( MLcSession::EInitialized ), 
+                         TInt( iLiveSession->LcSessionState() ) )
+
+    // MLcSession::EReceived
+    iLiveSession->iSession->iState = CMceSession::EIncoming;
+    EUNIT_ASSERT_EQUALS( TInt( MLcSession::EReceived ),
+                         TInt( iLiveSession->LcSessionState() ) )
+
+    iLiveSession->iSession->iState = CMceSession::EProceeding; 
+    EUNIT_ASSERT_EQUALS( TInt( MLcSession::EReceived ), 
+                         TInt( iLiveSession->LcSessionState() ) )
+    
+    iLiveSession->iSession->iState = CMceSession::EReserving; 
+    EUNIT_ASSERT_EQUALS( TInt( MLcSession::EReceived ), 
+                         TInt( iLiveSession->LcSessionState() ) )   
+    
+    // MLcSession::EOpening
+    iLiveSession->iSession->iState = CMceSession::EOffering;
+    EUNIT_ASSERT_EQUALS( TInt( MLcSession::EOpening ), 
+                         TInt( iLiveSession->LcSessionState() ) )
+    
+    iLiveSession->iSession->iState = CMceSession::EAnswering;
+    EUNIT_ASSERT_EQUALS( TInt( MLcSession::EOpening ), 
+                         TInt( iLiveSession->LcSessionState() ) )
+
+    // MLcSession::EClosing
+    iLiveSession->iSession->iState = CMceSession::ECancelling; 
+    EUNIT_ASSERT_EQUALS( TInt( MLcSession::EClosing ), 
+                         TInt( iLiveSession->LcSessionState() ) )
+    
+    iLiveSession->iSession->iState = CMceSession::ETerminating; 
+    EUNIT_ASSERT_EQUALS( TInt( MLcSession::EClosing ), 
+                         TInt( iLiveSession->LcSessionState() ) )
+    
+    // MLcSession::EClosed
+    iLiveSession->iSession->iState = CMceSession::ETerminated;
+    EUNIT_ASSERT_EQUALS( TInt( MLcSession::EClosed ), 
+                         TInt( iLiveSession->LcSessionState() ) )   
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_RemoteVideoPlayerL()
+    {
+    EUNIT_ASSERT( iLiveSession->CMusEngMceSession::RemoteVideoPlayer() == NULL )
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_LocalVideoPlayerL()
+    {
+    EUNIT_ASSERT( iLiveSession->CMusEngMceSession::LocalVideoPlayer() == NULL )
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_LocalDisplayNameL()
+    {
+    EUNIT_ASSERT_EQUALS( KNullDesC(), iLiveSession->LocalDisplayName() )
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_RemoteDisplayNameL()
+    {
+    // Clear the thread common storage to ensrue its not polluted. 
+    User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid,
+                                   NMusSessionApi::KContactName,
+                                   KNullDesC) );
+    
+    EUNIT_ASSERT_EQUALS( KNullDesC(), iLiveSession->RemoteDisplayName() )
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_RemoteDetailsL()
+    {
+    // Clear the thread common storage to ensrue its not polluted. 
+    User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid,
+                                   NMusSessionApi::KTelNumber,
+                                   KNullDesC) );
+    
+    EUNIT_ASSERT_EQUALS( KNullDesC(), iLiveSession->RemoteDetails() )
+    
+    _LIT( KMusTestDetails, "1222233499" );
+    User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid,
+                                   NMusSessionApi::KTelNumber,
+                                   KMusTestDetails) );
+    EUNIT_ASSERT_EQUALS( KMusTestDetails(), iLiveSession->RemoteDetails() )
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_SetParameterL()
+    {
+    const TInt dummy( 0 );
+    EUNIT_ASSERT_EQUALS( KErrNotSupported, 
+                         iLiveSession->SetParameter( dummy, dummy ) )
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_ParameterValueL()
+    {
+    const TInt dummy( 0 );
+    EUNIT_ASSERT_EQUALS( KErrNotSupported, 
+                         iLiveSession->ParameterValue( dummy ) )
+    }
+
 
 // -----------------------------------------------------------------------------
 //
 // -----------------------------------------------------------------------------
 //
-void UT_CMusEngMceSession::UT_CMusEngMceSession_TerminateLL()
+void UT_CMusEngMceSession::UT_IsLcAudioMutedL()
     {
-    TRAPD( error, iLiveSession->TerminateL() );
-    MUS_TEST_FORWARD_ALLOC_FAILURE( error );
-    EUNIT_ASSERT( error == KErrNotReady );
+    // No MCE session
+    EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->IsLcAudioMutedL(), KErrNotReady )
+    
+    ESTABLISH_OUT_SESSION( iLiveSession )
+    
+    // No audio
+    EUNIT_ASSERT( iLiveSession->IsLcAudioMutedL() )
+    
+    // Contains audio, but explicitly muted
+    CMceAudioStream* audioStream = CMceAudioStream::NewLC();
+    iLiveSession->iSession->AddStreamL( audioStream );
+    CleanupStack::Pop( audioStream );
+    iLiveSession->iExplicitlyMuted = ETrue;
+    EUNIT_ASSERT( iLiveSession->IsLcAudioMutedL() )
     
-    ESTABLISH_OUT_SESSION( iLiveSession );
-    
-    EUNIT_ASSERT( iLiveSession->iSession->iState == CMceSession::EEstablished );
+    // Contains audio, not muted
+    iLiveSession->iExplicitlyMuted = EFalse;
+    EUNIT_ASSERT( !iLiveSession->IsLcAudioMutedL() )
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_MuteLcAudioL()
+    {
+    // No MCE session
+    EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->IsLcAudioMutedL(), KErrNotReady )
     
-    iLiveSession->TerminateL();
+    ESTABLISH_OUT_SESSION( iLiveSession )
     
-    EUNIT_ASSERT( iLiveSession->iSession->iState == CMceSession::ETerminating );
+    // Mute 
+    iLiveSession->MuteLcAudioL( ETrue );
+    EUNIT_ASSERT( iLiveSession->iExplicitlyMuted )
+    EUNIT_ASSERT( iLiveSession->IsLcAudioMutedL() )
     
+    // Unmute
+    iLiveSession->MuteLcAudioL( EFalse );
+    EUNIT_ASSERT( !iLiveSession->iExplicitlyMuted )
     }
 
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_MuteLcMicL()
+    {
+    // Mute
+    iLiveSession->MuteLcMicL( ETrue );
+    User::LeaveIfError( RProperty::Set( KPSUidTelMicrophoneMuteStatus,
+                                        KTelMicrophoneMuteState,
+                                        EPSTelMicMuteOn ) );  
+    EUNIT_ASSERT( iLiveSession->IsLcMicMutedL() )
+    
+    // Unmute
+    iLiveSession->MuteLcMicL( EFalse );
+    User::LeaveIfError( RProperty::Set( KPSUidTelMicrophoneMuteStatus,
+                                        KTelMicrophoneMuteState,
+                                        EPSTelMicMuteOff ) );    
+    EUNIT_ASSERT( !iLiveSession->IsLcMicMutedL() )
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_EnableLcLoudspeakerL()
+    {
+    // Check that enabling the loudspeaker is allowed
+    EUNIT_ASSERT( iLiveSession->IsEnablingLcLoudspeakerAllowed() )
+    
+    // Disable 
+    iLiveSession->EnableLcLoudspeakerL( EFalse );
+    EUNIT_ASSERT( !iLiveSession->IsLcLoudspeakerEnabled() )
+    
+    // Enable
+    iLiveSession->EnableLcLoudspeakerL( ETrue );
+    EUNIT_ASSERT( iLiveSession->IsLcLoudspeakerEnabled() )
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_SetLcVolumeL()
+    {
+    ESTABLISH_OUT_SESSION( iLiveSession )
+    
+    // Set volume
+    const TInt volume( 5 );
+    iLiveSession->SetLcVolumeL( volume );
+    EUNIT_ASSERT_EQUALS( volume, iLiveSession->LcVolumeL() );
+    
+    // Increase volume
+    iLiveSession->IncreaseLcVolumeL();
+    EUNIT_ASSERT_EQUALS( volume+1, iLiveSession->LcVolumeL() );
+    
+    // Decrease volume
+    iLiveSession->DecreaseLcVolumeL();
+    EUNIT_ASSERT_EQUALS( volume, iLiveSession->LcVolumeL() );    
+    }
 
 // -----------------------------------------------------------------------------
 //
 // -----------------------------------------------------------------------------
 //  
-void UT_CMusEngMceSession::UT_CMusEngMceSession_GetSessionTimeL()
+void UT_CMusEngMceSession::UT_GetSessionTimeL()
     {
     EUNIT_ASSERT( iLiveSession->GetSessionTime() < TTimeIntervalSeconds( 0 ) );
     
     // Invite
-    iLiveSession->InviteL( KTestRecipientSipUri );
+    iLiveSession->EstablishLcSessionL();
     
     EUNIT_ASSERT( iLiveSession->GetSessionTime() < TTimeIntervalSeconds( 0 ) );
     
@@ -219,546 +487,68 @@
     TTimeIntervalSeconds sessionTime = iLiveSession->GetSessionTime();
     EUNIT_ASSERT( sessionTime >= TTimeIntervalSeconds( 0 ) );
     }
-    
-void UT_CMusEngMceSession::UT_CMusEngMceSession_IsDisplayEnabledLL()
-    {
-    TRAPD( error, iLiveSession->IsDisplayEnabledL() );
-    MUS_TEST_FORWARD_ALLOC_FAILURE( error );
-    EUNIT_ASSERT( error == KErrNotReady );
-
-    ESTABLISH_OUT_SESSION( iLiveSession );
-     
-    //Enable
-    CMceDisplaySink* display = 
-                    MusEngMceUtils::GetDisplayL( *(iLiveSession->iSession) );
-    display->iIsEnabled = ETrue;
-    EUNIT_ASSERT( iLiveSession->IsDisplayEnabledL() );
-    
-    //Disable
-    display->iIsEnabled = EFalse;
-    EUNIT_ASSERT( !iLiveSession->IsDisplayEnabledL() );
-    
-    // Display is reported as disabled when session state is terminated or idle
-    iLiveSession->iSession->iState = CMceSession::ETerminated;
-    display->iIsEnabled = ETrue;
-    EUNIT_ASSERT( !iLiveSession->IsDisplayEnabledL() );
-    iLiveSession->iSession->iState = CMceSession::EIdle;
-    EUNIT_ASSERT( !iLiveSession->IsDisplayEnabledL() );
-    }
-	
-	
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngMceSession::UT_CMusEngMceSession_ConnectionActiveL()
-    {
-    EUNIT_ASSERT( !iLiveSession->ConnectionActive() );
-    
-    ESTABLISH_OUT_SESSION( iLiveSession );
-    
-    EUNIT_ASSERT( iLiveSession->ConnectionActive() );
-    }
-
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngMceSession::UT_CMusEngMceSession_ContainsAudioLL()
-    {
-    // Try without session, fails
-    EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->ContainsAudioL(), KErrNotReady )
-    
-    // Establish session without audio
-    ESTABLISH_OUT_SESSION( iLiveSession )
-    
-    EUNIT_ASSERT( !iLiveSession->ContainsAudioL() )
-    
-    // Establish session with audio
-    ESTABLISH_OUT_SESSION( iClipSession )
-    
-    EUNIT_ASSERT( iClipSession->ContainsAudioL() )
-    }
-
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngMceSession::UT_CMusEngMceSession_IsMutedLL()
-    {
-    // Try without session, fails
-    EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->IsMutedL(), KErrNotReady )
-    
-    // Establish session without audio
-    ESTABLISH_OUT_SESSION( iLiveSession )
-    
-    EUNIT_ASSERT( iLiveSession->IsMutedL() )
-    
-    // Establish session with audio
-    ESTABLISH_OUT_SESSION( iClipSession )
-    
-    EUNIT_ASSERT( !iClipSession->IsMutedL() )  // Not muted although disabled
-    
-    iClipSession->EnableDisplayL( ETrue ); // Enabled also speaker
-    
-    EUNIT_ASSERT( !iClipSession->IsMutedL() )  // Enabled and not muted
-
-    iClipSession->MuteL();
-    
-    EUNIT_ASSERT( iClipSession->IsMutedL() ) // Explicitly muted
-    
-    iClipSession->UnmuteL();
-    
-    EUNIT_ASSERT( !iClipSession->IsMutedL() ) // Explicitly unmuted
-    }
-
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngMceSession::UT_CMusEngMceSession_OrientationLL()
-    {
-    // Try without session, fails
-    EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->OrientationL(), KErrNotReady )
-    
-    // Establish a session and try all the MCE rotation values
-    ESTABLISH_OUT_SESSION( iLiveSession )
-    
-    CMceDisplaySink* display = 
-                    MusEngMceUtils::GetDisplayL( *iLiveSession->iSession );
-
-    display->iRotation = CMceDisplaySink::ENone;
-    EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), 
-                         CMusEngMceSession::EPortrait )
-    
-    display->iRotation = CMceDisplaySink::EClockwise90Degree;
-    EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), 
-                         CMusEngMceSession::ELandscape )
-    
-    display->iRotation = CMceDisplaySink::EClockwise180Degree;
-    EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), 
-                         CMusEngMceSession::ELandscape )
-    
-    display->iRotation = CMceDisplaySink::EClockwise270Degree;
-    EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), 
-                         CMusEngMceSession::ELandscape )
-            
-    }
-    
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngMceSession::UT_CMusEngMceSession_SetOrientationLL()
-    {
-    // Try without session, fails
-    EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->SetOrientationL( 
-                                                CMusEngMceSession::EPortrait ), 
-                                 KErrNotReady )
-
-    // Establish a session
-    ESTABLISH_OUT_SESSION( iLiveSession )
-    
-    CMceDisplaySink* display = 
-                    MusEngMceUtils::GetDisplayL( *iLiveSession->iSession );
-    
-    // Check the initial state
-    display->iRotation = CMceDisplaySink::ENone;
-    EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), 
-                         CMusEngMceSession::EPortrait )      
-                         
-    // Successfully change orientation
-    
-    iLiveSession->SetOrientationL( CMusEngMceSession::ELandscape );
-    EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), 
-                         CMusEngMceSession::ELandscape )
-    
-    iLiveSession->SetOrientationL( CMusEngMceSession::EPortrait );
-    EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), 
-                         CMusEngMceSession::EPortrait )                     
-                         
-    }
-        
 
 // -----------------------------------------------------------------------------
 //
 // -----------------------------------------------------------------------------
 //
-void UT_CMusEngMceSession::UT_CMusEngMceSession_VolumeUpLL()
-    {    
-    // Try without session, fails
-    TRAPD( error, iLiveSession->VolumeUpL() );
-    MUS_TEST_FORWARD_ALLOC_FAILURE( error );
-    EUNIT_ASSERT( error == KErrNotReady );
-    
-    // Test only usage of CMceSpeaker, phone part is tested in base class
-    
-    // Check that nothing crashes without any speakers    
-    iReceiveSession->VolumeUpL();
-    
-    // Establish session
-    ESTABLISH_OUT_SESSION( iClipSession )
-    
-    TInt initialVolume = iClipSession->VolumeL();
-    
-    iClipSession->VolumeUpL();
-
-    // Check that all speaker volumes are adjusted and store one speaker pointer
-    
-    CMceSpeakerSink* speaker = NULL;
-    
-    CMceSession* session = iClipSession->iSession;
-    
-    for ( TInt i = 0; i < session->Streams().Count(); ++i )
-        {
-        for ( TInt j = 0; j < session->Streams()[i]->Sinks().Count(); ++j )
-            {
-            if ( session->Streams()[i]->Sinks()[j]->Type() == KMceSpeakerSink )
-                {
-                speaker = static_cast<CMceSpeakerSink*>(
-                                            session->Streams()[i]->Sinks()[j] );
-                EUNIT_ASSERT( speaker->VolumeL() == initialVolume + 1 );
-                }
-            }
-        } 
-
-    while ( iClipSession->VolumeL() < speaker->MaxVolumeL() )
-        {
-        iClipSession->VolumeUpL();
-        }
-
-    iClipSession->VolumeUpL(); // Does not do anything to volume
-    
-    EUNIT_ASSERT( iClipSession->VolumeL() == speaker->MaxVolumeL() );
-    
-    }
-
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngMceSession::UT_CMusEngMceSession_VolumeDownLL()
-    {
-        // Try without session, fails
-    TRAPD( error, iLiveSession->VolumeDownL() );
-    MUS_TEST_FORWARD_ALLOC_FAILURE( error );
-    EUNIT_ASSERT( error == KErrNotReady );
-    
-    // Test only usage of CMceSpeaker, phone part is tested in base class
-    
-    // Check that nothing crashes without any speakers    
-    iReceiveSession->VolumeUpL();
-    
-    // Establish session
-    ESTABLISH_OUT_SESSION( iClipSession )
-    
-    TInt initialVolume = iClipSession->VolumeL();
-    
-    iClipSession->VolumeDownL();
-
-    // Check that all speaker volumes are adjusted and store one speaker pointer
-    
-    CMceSpeakerSink* speaker = NULL;
-    
-    CMceSession* session = iClipSession->iSession;
-    
-    for ( TInt i = 0; i < session->Streams().Count(); ++i )
-        {
-        for ( TInt j = 0; j < session->Streams()[i]->Sinks().Count(); ++j )
-            {
-            if ( session->Streams()[i]->Sinks()[j]->Type() == KMceSpeakerSink )
-                {
-                speaker = static_cast<CMceSpeakerSink*>(
-                                            session->Streams()[i]->Sinks()[j] );
-                EUNIT_ASSERT( speaker->VolumeL() == initialVolume - 1 );
-                }
-            }
-        } 
-
-    while ( iClipSession->VolumeL() > 0 )
-        {
-        iClipSession->VolumeDownL();
-        }
+void UT_CMusEngMceSession::UT_HandleTerminationL()
+    { 
+    // Try different values
+    iLiveSession->CMusEngMceSession::HandleTermination( KSipStatusCodeNoCodeSet,
+                                                        KNullDesC8() );
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionStateChanged ) )
+    iLcSessionObserver->Reset();
 
-    iClipSession->VolumeDownL(); // Does not do anything to volume
-    
-    EUNIT_ASSERT_EQUALS( iClipSession->VolumeL(), 0 );
-        
-    }
-
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngMceSession::UT_CMusEngMceSession_SetVolumeLL()
-    {    
-    // Try without session, fails
-    TInt newVolume = KTelephonyVolumeDefaultValue + 1;
-    
-    TRAPD( error, iLiveSession->SetVolumeL( newVolume ) );
-    MUS_TEST_FORWARD_ALLOC_FAILURE( error );
-    EUNIT_ASSERT( error == KErrNotReady );
-    
-    // Test only usage of CMceSpeaker, phone part is tested in base class
-    
-    // Check that nothing crashes without any speakers    
-    iReceiveSession->SetVolumeL( newVolume );
-    
-    // Establish session
-    ESTABLISH_OUT_SESSION( iClipSession )
-    
-    TInt initialVolume = iClipSession->VolumeL();
-    
-    iClipSession->SetVolumeL( newVolume );
-
-    // Check that all speaker volumes are adjusted and store one speaker pointer
-    
-    CMceSpeakerSink* speaker = NULL;
-    
-    CMceSession* session = iClipSession->iSession;
-    
-    for ( TInt i = 0; i < session->Streams().Count(); ++i )
-        {
-        for ( TInt j = 0; j < session->Streams()[i]->Sinks().Count(); ++j )
-            {
-            if ( session->Streams()[i]->Sinks()[j]->Type() == KMceSpeakerSink )
-                {
-                speaker = static_cast<CMceSpeakerSink*>(
-                                            session->Streams()[i]->Sinks()[j] );
-                EUNIT_ASSERT( speaker->VolumeL() == newVolume );
-                }
-            }
-        } 
+    iLiveSession->CMusEngMceSession::HandleTermination( KSipStatusCode200OK,
+                                                        KNullDesC8() );
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionStateChanged ) )
+    iLcSessionObserver->Reset();
 
-    newVolume = speaker->MaxVolumeL() + 1;
-    iClipSession->SetVolumeL( newVolume );
-    EUNIT_ASSERT( iClipSession->VolumeL() == speaker->MaxVolumeL() );
-    
-    newVolume = -1;
-    iClipSession->SetVolumeL( newVolume );
-    EUNIT_ASSERT( iClipSession->VolumeL() == 0 );
-    
-    // Test situation where MCE max volume is bigger than MUS max vol
-    SetMaxVolForSpeakersL(*session, KMusEngMaxVolume * 10);
-    newVolume = 5;
-    iClipSession->SetVolumeL( newVolume );
-    EUNIT_ASSERT( iClipSession->VolumeL() == newVolume );
-    EUNIT_ASSERT( speaker->VolumeL() == newVolume * 10 );
-    newVolume = 1;
-    iClipSession->SetVolumeL( newVolume );
-    EUNIT_ASSERT( iClipSession->VolumeL() == newVolume );
-    EUNIT_ASSERT( speaker->VolumeL() == newVolume * 10 );
-    newVolume = KMusEngMaxVolume;
-    iClipSession->SetVolumeL( newVolume );
-    EUNIT_ASSERT( iClipSession->VolumeL() == newVolume );
-    EUNIT_ASSERT( speaker->VolumeL() == newVolume * 10 );
-    
-    SetMaxVolForSpeakersL(*session, KMusEngMaxVolume * 1000);
-    newVolume = 7;
-    iClipSession->SetVolumeL( newVolume );
-    EUNIT_ASSERT( iClipSession->VolumeL() == newVolume );
-    EUNIT_ASSERT( speaker->VolumeL() == newVolume * 1000 );
-    newVolume = 1;
-    iClipSession->SetVolumeL( newVolume );
-    EUNIT_ASSERT( iClipSession->VolumeL() == newVolume );
-    EUNIT_ASSERT( speaker->VolumeL() == newVolume * 1000 );
-    newVolume = KMusEngMaxVolume;
-    iClipSession->SetVolumeL( newVolume );
-    EUNIT_ASSERT( iClipSession->VolumeL() == newVolume );
-    EUNIT_ASSERT( speaker->VolumeL() == newVolume * 1000 );
-    
-    
-    // Test situation where MCE max volume is smaller than MUS max vol
-    SetMaxVolForSpeakersL(*session, KMusEngMaxVolume / 2);
-    newVolume = 3;
-    iClipSession->SetVolumeL( newVolume );
-    EUNIT_ASSERT( iClipSession->VolumeL() == newVolume );
-    EUNIT_ASSERT( speaker->VolumeL() == newVolume / 2 );
-    newVolume = 1;
-    iClipSession->SetVolumeL( newVolume );
-    EUNIT_ASSERT( iClipSession->VolumeL() == newVolume );
-    EUNIT_ASSERT( speaker->VolumeL() == 1 );
-    newVolume = KMusEngMaxVolume;
-    iClipSession->SetVolumeL( newVolume );
-    EUNIT_ASSERT( iClipSession->VolumeL() == newVolume );
-    EUNIT_ASSERT( speaker->VolumeL() == newVolume / 2 );
+    iLiveSession->CMusEngMceSession::HandleTermination( KSipStatusCodeUnknown,
+                                                        KNullDesC8() );
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionFailed ) )
+    EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, KErrGeneral )
+    iLcSessionObserver->Reset();
     }
 
 // -----------------------------------------------------------------------------
 //
 // -----------------------------------------------------------------------------
 //
-void UT_CMusEngMceSession::UT_CMusEngMceSession_EnableDisplayL()
+void UT_CMusEngMceSession::UT_AdjustVideoCodecL()
     {
-    TRAPD( error, iLiveSession->EnableDisplayL( ETrue ) );
-    MUS_TEST_FORWARD_ALLOC_FAILURE( error );
-    EUNIT_ASSERT( error == KErrNotReady );
-    
-    ESTABLISH_OUT_SESSION( iLiveSession );
-    
-    CMceDisplaySink* display = 
-                    MusEngMceUtils::GetDisplayL( *(iLiveSession->iSession) );
-    
-    // Disable
-    iLiveSession->EnableDisplayL( EFalse );
-    
-    EUNIT_ASSERT( !display->iIsEnabled );
-    
-    // Try to disable again, request should be ignored
+    CRepository::SetStubAvcConfigKeysL( KNullDesC8() );
+        
+    CMceVideoCodec* codecH263 = CMceH263Codec::NewLC( KMceSDPNameH263() );
+    CMceVideoCodec* codecAvc = CMceAvcCodec::NewLC( KMceSDPNameH264() );
+    CMceVideoCodec* codecAvcFromFile = CMceAvcCodec::NewLC( KMceSDPNameH264() );
     
-    iLiveSession->EnableDisplayL( EFalse );
-    
-    EUNIT_ASSERT( !display->iIsEnabled );
+    iLiveSession->CMusEngMceSession::AdjustVideoCodecL( *codecH263,
+                                                        KMceCameraSource );
+    EUNIT_ASSERT( !iLiveSession->iStoreEncoderConfigInfo )
 
-    // Enable
-    
-    iLiveSession->EnableDisplayL( ETrue );
+    iLiveSession->CMusEngMceSession::AdjustVideoCodecL( *codecAvcFromFile,
+                                                        KMceFileSource);  
+    EUNIT_ASSERT( !iLiveSession->iStoreEncoderConfigInfo )
     
-    EUNIT_ASSERT( display->iIsEnabled );
-    
-    // Try to enable again, request should be ignored
+    iLiveSession->CMusEngMceSession::AdjustVideoCodecL( *codecAvc,
+                                                        KMceCameraSource );  
+    EUNIT_ASSERT( iLiveSession->iStoreEncoderConfigInfo )
     
-    iLiveSession->EnableDisplayL( ETrue );
-    
-    EUNIT_ASSERT( display->iIsEnabled );
+    CleanupStack::PopAndDestroy( codecAvcFromFile );
+    CleanupStack::PopAndDestroy( codecAvc );
+    CleanupStack::PopAndDestroy( codecH263 );
     }
 
-
 // -----------------------------------------------------------------------------
 //
 // -----------------------------------------------------------------------------
 //
-void UT_CMusEngMceSession::UT_CMusEngMceSession_MuteLL()
-    {
-    TRAPD( error, iClipSession->MuteL() );
-    MUS_TEST_FORWARD_ALLOC_FAILURE( error );
-    EUNIT_ASSERT( error == KErrNotReady );
-    
-    ESTABLISH_OUT_SESSION_AND_START_STREAMING( iClipSession );
-    
-    const RPointerArray<CMceMediaStream> streams = 
-                                            iClipSession->iSession->Streams();
-    
-    iClipSession->MuteL();
-    
-    // Check that all audio speaker sinks are disabled and only those                                        
-    for ( TInt i = 0; i < streams.Count(); ++i )
-        {
-        for ( TInt j = 0; j < streams[i]->Sinks().Count(); ++j )
-            {
-            CMceMediaSink* sink = streams[i]->Sinks()[j];
-            if ( sink->Type() == KMceSpeakerSink  &&
-                 streams[i]->Type() == KMceAudio )
-                {
-                EUNIT_ASSERT( sink->IsEnabled() == EFalse )
-                }    
-            else
-                {
-                EUNIT_ASSERT( sink->IsEnabled() == ETrue )
-                } 
-            }        
-        }
-    
-    EUNIT_ASSERT( iClipSession->iExplicitlyMuted ) 
-    
-    // Try to mute again, request should be ignored without actions or leaving
-
-    iClipSession->MuteL();
-
-    }
-    
-
-// -----------------------------------------------------------------------------
-// Relies on previous test
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngMceSession::UT_CMusEngMceSession_UnmuteLL()
-    {
-    TRAPD( error, iClipSession->UnmuteL() );
-    MUS_TEST_FORWARD_ALLOC_FAILURE( error );
-    EUNIT_ASSERT( error == KErrNotReady );
-    
-    ESTABLISH_OUT_SESSION( iClipSession );
-    
-    const RPointerArray<CMceMediaStream> streams = 
-                                            iClipSession->iSession->Streams();
-    
-    iClipSession->MuteL();
-    
-    iClipSession->UnmuteL();
-    
-    // Check that all audio speaker sinks are enabled
-                                            
-    for ( TInt i = 0; i < streams.Count(); ++i )
-        {
-        for ( TInt j = 0; j < streams[i]->Sinks().Count(); ++j )
-            {
-            if ( streams[i]->Sinks()[j]->Type() == KMceSpeakerSink )
-                {
-                EUNIT_ASSERT( streams[i]->Sinks()[j]->IsEnabled() == ETrue )
-                }
-            }        
-        }
-    
-    EUNIT_ASSERT( !iClipSession->iExplicitlyMuted ) 
-    
-    // Try to unmute again, request should be ignored without actions or leaving
-
-    iClipSession->UnmuteL();
-    }
-    
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngMceSession::UT_CMusEngMceSession_HandleTerminationL()
-    { 
-    // Try different values
-    iLiveSession->CMusEngMceSession::HandleTermination( KSipStatusCodeNoCodeSet,
-                                                        KNullDesC8() );
-    EUNIT_ASSERT( iObserver->iSessionTerminatedCalled );
-    iObserver->Reset();
-
-    iLiveSession->CMusEngMceSession::HandleTermination( KSipStatusCode200OK,
-                                                        KNullDesC8() );
-    EUNIT_ASSERT( iObserver->iSessionTerminatedCalled );
-    iObserver->Reset();
-
-    iLiveSession->CMusEngMceSession::HandleTermination( KSipStatusCodeUnknown,
-                                                        KNullDesC8() );
-    EUNIT_ASSERT( iObserver->iSessionFailedCalled );
-    iObserver->Reset();
-    
-    }
-
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngMceSession::UT_CMusEngMceSession_AdjustVideoCodecLL()
-    {
-    // CMusEngMceSession::AdjustVideoCodecL does nothing, so NULL test is enough
-    CMceVideoCodec* codec = 
-                iLiveSession->iManager->SupportedVideoCodecs()[0]->CloneL();
-    CleanupStack::PushL( codec );
-    iLiveSession->CMusEngMceSession::AdjustVideoCodecL( *codec );
-    CleanupStack::PopAndDestroy( codec );
-    }
-
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngMceSession::UT_CMusEngMceSession_AdjustAudioCodecLL()
+void UT_CMusEngMceSession::UT_AdjustAudioCodecL()
     {
     CMceAudioCodec* codec = 
                 iLiveSession->iManager->SupportedAudioCodecs()[0]->CloneL();
@@ -769,16 +559,14 @@
     EUNIT_ASSERT( codec->iMMFPriorityPreference == KAudioPrefSwisPlayback )
     
     CleanupStack::PopAndDestroy( codec );
-    }
-        
+    }   
         
 // -----------------------------------------------------------------------------
 //
 // -----------------------------------------------------------------------------
 //
-void UT_CMusEngMceSession::UT_CMusEngMceSession_RectChangedLL()
+void UT_CMusEngMceSession::UT_RectChangedL()
     {
-    
     // Does nothing before session establishment
     
     iLiveSession->RectChangedL();
@@ -791,9 +579,9 @@
     // Display size has been updated
     
     CMceDisplaySink* display = 
-                MusEngMceUtils::GetDisplayL( *( iLiveSession->iSession ) );
+        MusEngMceUtils::GetDisplayL( *( iLiveSession->iSession ) );
     
-    EUNIT_ASSERT( display->DisplayRectL() == iLiveSession->Rect() );
+    EUNIT_ASSERT( display->DisplayRectL() == iLiveSession->Rect() )
     
     // Terminate session and try again, rect must not be changed
     
@@ -804,8 +592,307 @@
     iLiveSession->SetRectL( newRect ); 
     
     EUNIT_ASSERT( display->DisplayRectL() != newRect )
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_SetSessionSdpLinesL()
+    {
+    // set operator variant off
+    iReceiveSession->iOperatorVariant = EFalse;
+    CRepository::SetStubGlobal( MusSettingsKeys::KVideoBandwidth,
+                                128 );
+                     
+    // 1. There is b=AS line at session level
+    // => Xapplication, b=AS and b=TIAS set to session level  
+    CMceInSession* inSession = CMceInSession::NewL( *iReceiveSession->iManager,
+                                                    KTestOriginator );
+    CleanupStack::PushL( inSession );    
+    EUNIT_ASSERT( !inSession->iSessionSDPLines );
+    inSession->iSessionSDPLines = new ( ELeave ) CDesC8ArrayFlat( 1 );
+    inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineBandwidthField() );
+        
+    iReceiveSession->SetSessionSdpLinesL( *inSession, ETrue );
+    
+    MDesC8Array* sdpLines = inSession->iSessionSDPLines;    
+    EUNIT_ASSERT( sdpLines );
+    EUNIT_ASSERT( sdpLines->MdcaCount() == 3 );
+    EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineXApplication() );
+    EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ).Find( 
+            KMusEngSessionSdpLineBandwidthLine() ) == 0 );
+    EUNIT_ASSERT( sdpLines->MdcaPoint( 2 ).Find( 
+            KMusEngSessionSdpLineTiasLine() ) == 0 );
     
     
+    // 2. There are b=TIAS sdp line at session  
+    // => Xapplication, b=AS and b=TIAS set to session level
+    delete inSession->iSessionSDPLines;
+    inSession->iSessionSDPLines = NULL;
+    inSession->iSessionSDPLines = new ( ELeave ) CDesC8ArrayFlat( 1 );
+    inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineTiasLine() );
+        
+    iReceiveSession->SetSessionSdpLinesL( *inSession, ETrue );
+    
+    sdpLines = inSession->iSessionSDPLines;    
+    EUNIT_ASSERT( sdpLines );
+    EUNIT_ASSERT( sdpLines->MdcaCount() == 3 );
+    EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineXApplication() );
+    EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ).Find( 
+            KMusEngSessionSdpLineBandwidthLine() ) == 0 );
+    EUNIT_ASSERT( sdpLines->MdcaPoint( 2 ).Find( 
+            KMusEngSessionSdpLineTiasLine() ) == 0 );
+            
+    // 3. Simulating outcoming session, i.e. 2d param aForceBandwidthLine is EFalse  
+    // => only Xapplication SDP line is set
+    delete inSession->iSessionSDPLines;
+    inSession->iSessionSDPLines = NULL;
+         
+    iReceiveSession->SetSessionSdpLinesL( *inSession, EFalse );
+     
+    sdpLines = inSession->iSessionSDPLines;    
+    EUNIT_ASSERT( sdpLines );
+    EUNIT_ASSERT( sdpLines->MdcaCount() == 1 );
+    EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineXApplication() );
+    
+    // 4. No KVideoBandwidth entry in CenRep => TIAS usage should be disabled
+    // There is AS and TIAS at session level => AS is taken at session level
+    CRepository::iForceFailWithCode = KErrNotFound;
+    delete inSession->iSessionSDPLines;
+    inSession->iSessionSDPLines = NULL;
+    inSession->iSessionSDPLines = new ( ELeave ) CDesC8ArrayFlat( 1 );
+    inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineTiasLine() );
+    inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineBandwidthField() );
+        
+    iReceiveSession->SetSessionSdpLinesL( *inSession, ETrue );
+    
+    sdpLines = inSession->iSessionSDPLines;    
+    EUNIT_ASSERT( sdpLines );
+    EUNIT_ASSERT( sdpLines->MdcaCount() == 2 );
+    EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineXApplication() );
+    EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ) == KMusEngSessionSdpLineBandwidthField() );
+    
+    CleanupStack::PopAndDestroy( inSession );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_SetSessionSdpLines_OperatorL()
+    {
+    // set operator variant
+    iReceiveSession->iOperatorVariant = ETrue;
+
+    // 1. There is b=TIAS sdp line in session => only application and  
+    // type lines are set, no bandwidth related attributes
+    CMceInSession* inSession = CMceInSession::NewL( *iReceiveSession->iManager,
+                                     KTestOriginator );
+    CleanupStack::PushL( inSession );        
+    
+    EUNIT_ASSERT( !inSession->iSessionSDPLines );
+    inSession->iSessionSDPLines = new ( ELeave ) CDesC8ArrayFlat( 1 );
+    inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineTiasLine() );
+        
+    iReceiveSession->SetSessionSdpLinesL( *inSession, ETrue );
+    
+    MDesC8Array* sdpLines = inSession->iSessionSDPLines;    
+    EUNIT_ASSERT( sdpLines );
+    EUNIT_ASSERT( sdpLines->MdcaCount() == 2 );
+    EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineApplication() );
+    EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ) == KMusEngSessionSdpLineType() );    
+
+    // 2. There are b=AS and b=TIAS sdp lines in session => application and  
+    // type SDP lines as well as b=AS bandwidth attributes are set
+    delete inSession->iSessionSDPLines;
+    inSession->iSessionSDPLines = NULL;
+    inSession->iSessionSDPLines = new ( ELeave ) CDesC8ArrayFlat( 2 );
+    inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineBandwidthField() );
+    inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineTiasLine() );
+        
+    iReceiveSession->SetSessionSdpLinesL( *inSession, ETrue );
+    
+    sdpLines = inSession->iSessionSDPLines;    
+    EUNIT_ASSERT( sdpLines );
+    EUNIT_ASSERT( sdpLines->MdcaCount() == 3 );
+    EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineApplication() );
+    EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ) == KMusEngSessionSdpLineType() );
+    EUNIT_ASSERT( sdpLines->MdcaPoint( 2 ) == KMusEngSessionSdpLineBandwidthField() );
+        
+    
+    // 3. Simulating outcoming session, i.e. 2d param aForceBandwidthLine is EFalse  
+    // => only application and type SDP lines are set
+    delete inSession->iSessionSDPLines;
+    inSession->iSessionSDPLines = NULL;
+        
+    iReceiveSession->SetSessionSdpLinesL( *inSession, EFalse );
+    
+    sdpLines = inSession->iSessionSDPLines;    
+    EUNIT_ASSERT( sdpLines );
+    EUNIT_ASSERT( sdpLines->MdcaCount() == 2 );
+    EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineApplication() );
+    EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ) == KMusEngSessionSdpLineType() );
+        
+    CleanupStack::PopAndDestroy( inSession );   
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_SetMediaSdpLinesL()
+    {
+    // set operator variant off
+    iReceiveSession->iOperatorVariant = EFalse;
+    CRepository::SetStubGlobal( MusSettingsKeys::KVideoBandwidth,
+                                128 );
+
+    // 1. There is no b=AS, b=TIAS sdp lines at session level
+    // => b=AS and b=TIAS are taken at media level
+    CMceInSession* inSession = CMceInSession::NewL( *iReceiveSession->iManager,
+                                                    KTestOriginator );
+    CleanupStack::PushL( inSession );
+    
+    CMceVideoStream* videoStream = CMceVideoStream::NewLC();        
+    videoStream->SetSourceL( CMceRtpSource::NewLC() );
+    CleanupStack::Pop(); //rtpSource        
+    videoStream->AddSinkL( CMceDisplaySink::NewLC( *iReceiveSession->iManager ) );
+    CleanupStack::Pop(); //displaySink
+        
+    inSession->AddStreamL( videoStream );
+    CleanupStack::Pop( videoStream );
+
+    iReceiveSession->SetMediaSdpLinesL( *videoStream, ETrue );
+    
+    MDesC8Array* sdpLines = inSession->Streams()[ 0 ]->iMediaSDPLines;
+    EUNIT_ASSERT( sdpLines );
+    EUNIT_ASSERT( sdpLines->MdcaCount() == 2 );
+    EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ).Find( 
+            KMusEngSessionSdpLineBandwidthLine() ) == 0 );
+    EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ).Find( 
+            KMusEngSessionSdpLineTiasLine() ) == 0 );
+    
+    
+    // 2. There is b=AS sdp line at session and media level
+    // => b=AS and b=TIAS are taken at media level
+    delete inSession->iSessionSDPLines;
+    inSession->iSessionSDPLines = NULL;
+    inSession->iSessionSDPLines = new ( ELeave ) CDesC8ArrayFlat( 1 );
+    inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineBandwidthField() );
+    
+    iReceiveSession->SetMediaSdpLinesL( *videoStream, ETrue );
+    
+    sdpLines = inSession->Streams()[ 0 ]->iMediaSDPLines;
+    EUNIT_ASSERT( sdpLines );
+    EUNIT_ASSERT( sdpLines->MdcaCount() == 2 );
+    EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ).Find( 
+            KMusEngSessionSdpLineBandwidthLine() ) == 0 );
+    EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ).Find( 
+            KMusEngSessionSdpLineTiasLine() ) == 0 );
+
+    // 3. Simulating outcoming session, i.e. 2d param aForceBandwidthLine is EFalse
+    // => no bandwidth attributes at media level
+    delete inSession->iSessionSDPLines;
+    inSession->iSessionSDPLines = NULL;
+     
+    delete inSession->Streams()[ 0 ]->iMediaSDPLines;
+    inSession->Streams()[ 0 ]->iMediaSDPLines = NULL;
+     
+    iReceiveSession->SetMediaSdpLinesL( *videoStream, EFalse );
+     
+    sdpLines = inSession->Streams()[ 0 ]->iMediaSDPLines;
+    EUNIT_ASSERT( sdpLines );
+    EUNIT_ASSERT( sdpLines->MdcaCount() == 0 );
+
+    // 4. No KVideoBandwidth entry in CenRep => TIAS usage should be disabled
+    // There is no bandwidth attributes in session => AS is taken at meida level
+    CRepository::iForceFailWithCode = KErrNotFound;
+    delete inSession->iSessionSDPLines;
+    inSession->iSessionSDPLines = NULL;
+        
+    iReceiveSession->SetMediaSdpLinesL( *videoStream, ETrue );
+    
+    sdpLines = inSession->Streams()[ 0 ]->iMediaSDPLines;
+    EUNIT_ASSERT( sdpLines );
+    EUNIT_ASSERT( sdpLines->MdcaCount() == 1 );
+    EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineBandwidthField() );
+
+    CleanupStack::PopAndDestroy( inSession );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_SetMediaSdpLines_OperatorL()
+    {
+    // set operator variant
+    iReceiveSession->iOperatorVariant = ETrue;
+
+    // 1. There is no b=AS sdp line at session level
+    // => b=AS is taken at media level
+    CMceInSession* inSession = CMceInSession::NewL( *iReceiveSession->iManager,
+                                                    KTestOriginator );
+    CleanupStack::PushL( inSession );
+  
+    CMceVideoStream* videoStream = CMceVideoStream::NewLC();        
+    videoStream->SetSourceL( CMceRtpSource::NewLC() );
+    CleanupStack::Pop(); //rtpSource        
+    videoStream->AddSinkL( CMceDisplaySink::NewLC( *iReceiveSession->iManager ) );
+    CleanupStack::Pop(); //displaySink
+        
+    inSession->AddStreamL( videoStream );
+    CleanupStack::Pop( videoStream );
+
+    EUNIT_ASSERT( !inSession->iSessionSDPLines );   
+    inSession->iSessionSDPLines = new ( ELeave ) CDesC8ArrayFlat( 1 );
+    inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineTiasLine() );
+        
+    iReceiveSession->SetMediaSdpLinesL( *videoStream, ETrue );
+    
+    MDesC8Array* sdpLines = inSession->Streams()[ 0 ]->iMediaSDPLines;
+    EUNIT_ASSERT( sdpLines );
+    EUNIT_ASSERT( sdpLines->MdcaCount() == 1 );
+    EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineBandwidthField() );
+    
+    
+    // 2. There is b=AS sdp line at session and media level
+    // => b=AS is not taken at media level
+    delete inSession->iSessionSDPLines;
+    inSession->iSessionSDPLines = NULL;
+    inSession->iSessionSDPLines = new ( ELeave ) CDesC8ArrayFlat( 1 );
+    inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineBandwidthField() );
+    
+    delete inSession->Streams()[ 0 ]->iMediaSDPLines;
+    inSession->Streams()[ 0 ]->iMediaSDPLines = NULL;
+    inSession->Streams()[ 0 ]->iMediaSDPLines =  
+                new ( ELeave ) CDesC8ArrayFlat( 1 ); 
+    inSession->Streams()[ 0 ]->iMediaSDPLines->AppendL( 
+                KMusEngSessionSdpLineBandwidthField() );
+    
+    iReceiveSession->SetMediaSdpLinesL( *videoStream, ETrue );
+    
+    EUNIT_ASSERT( inSession->Streams()[ 0 ]->iMediaSDPLines );
+    EUNIT_ASSERT( inSession->Streams()[ 0 ]->iMediaSDPLines->MdcaCount() == 0 );
+
+
+    // 3. Simulating outcoming session, i.e. 2d param aForceBandwidthLine is EFalse
+    // => b=AS is taken at media level
+    delete inSession->iSessionSDPLines;
+    inSession->iSessionSDPLines = NULL;
+     
+    delete inSession->Streams()[ 0 ]->iMediaSDPLines;
+    inSession->Streams()[ 0 ]->iMediaSDPLines = NULL;
+     
+    iReceiveSession->SetMediaSdpLinesL( *videoStream, EFalse );
+     
+    sdpLines = inSession->Streams()[ 0 ]->iMediaSDPLines;
+    EUNIT_ASSERT( sdpLines );
+    EUNIT_ASSERT( sdpLines->MdcaCount() == 1 );
+    EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineBandwidthField() );
+    
+    CleanupStack::PopAndDestroy( inSession );
     }
 
 
@@ -813,120 +900,7 @@
 //
 // -----------------------------------------------------------------------------
 //
-void UT_CMusEngMceSession::UT_CMusEngMceSession_SetSessionSdpLinesLL()
-    {
-    // set operator variant off
-    MultimediaSharingSettings::SetOperatorVariantSettingL(
-                     MusSettingsKeys::EStandard );
-                     
-    // There is no sdp lines in session, right one is added
-
-    CMceInSession* inSession = CMceInSession::NewL( *iReceiveSession->iManager,
-                                                    KTestOriginator );
-    CleanupStack::PushL( inSession );
-    
-    iReceiveSession->SetSessionSdpLinesL( *inSession );
-    
-    MDesC8Array* sdpLines = inSession->SessionSDPLinesL();
-    CleanupDeletePushL( sdpLines );
-    
-    EUNIT_ASSERT( sdpLines );
-    EUNIT_ASSERT( sdpLines->MdcaCount() == 1 );
-    EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineXApplication() );
-    
-    CleanupStack::PopAndDestroy(); // sdplines
-
-    // There is one line ready, replace it with right one
-    CDesC8Array* newSdpLines = new ( ELeave ) CDesC8ArrayFlat( 3 );
-    CleanupStack::PushL( newSdpLines );
-    newSdpLines->AppendL( KTestRecipientRandomText8() );
-    inSession->SetSessionSDPLinesL( newSdpLines );
-    CleanupStack::Pop( newSdpLines );
-    
-    iReceiveSession->SetSessionSdpLinesL( *inSession );
-    
-    sdpLines = inSession->SessionSDPLinesL();
-    CleanupDeletePushL( sdpLines );
-      
-    EUNIT_ASSERT( sdpLines );
-    EUNIT_ASSERT( sdpLines->MdcaCount() == 1 );
-    EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineXApplication() );
-    
-    CleanupStack::PopAndDestroy(); // sdplines
-    
-
-    CleanupStack::PopAndDestroy( inSession );
-
-    // for operator variant testing
-    // set operator variant
-    iReceiveSession->iOperatorVariant = ETrue;
-
-    // There is no sdp lines in session, right ones are added to session and media level
-    inSession = CMceInSession::NewL( *iReceiveSession->iManager,
-                                                    KTestOriginator );
-    CleanupStack::PushL( inSession );
-    
-    iReceiveSession->SetSessionSdpLinesL( *inSession );
-    
-    sdpLines = inSession->SessionSDPLinesL();
-    CleanupDeletePushL( sdpLines );
-    
-    EUNIT_ASSERT( sdpLines );
-    EUNIT_ASSERT( sdpLines->MdcaCount() == 2 );
-    EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineApplication() );
-    EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ) == KMusEngSessionSdpLineType() );
-    
-    CleanupStack::PopAndDestroy(); // sdplines
-    
-    MDesC8Array* mediaSdpLines = 
-        iReceiveSession->iSession->Streams()[ 0 ]->MediaAttributeLinesL();
-    CleanupDeletePushL( mediaSdpLines );
-    TBool bandwidthFoundFromMediaLevel = EFalse;
-    for ( TInt i = 0; mediaSdpLines && i < mediaSdpLines->MdcaCount(); i++ )
-        {
-        if ( mediaSdpLines->MdcaPoint( i ).Compare( 
-                KMusEngSessionSdpLineBandwidthField() ) == 0 )
-            {
-            bandwidthFoundFromMediaLevel = ETrue;
-            }
-        }
-    EUNIT_ASSERT( bandwidthFoundFromMediaLevel );
-    CleanupStack::PopAndDestroy( mediaSdpLines );
-
-    // There is one line ready, replace it with right ones
-    newSdpLines = new ( ELeave ) CDesC8ArrayFlat( 3 );
-    CleanupStack::PushL( newSdpLines );
-    newSdpLines->AppendL( KTestRecipientRandomText8() );
-    inSession->SetSessionSDPLinesL( newSdpLines );
-    CleanupStack::Pop( newSdpLines );
-    
-    iReceiveSession->SetSessionSdpLinesL( *inSession );
-    
-    sdpLines = inSession->SessionSDPLinesL();
-    CleanupDeletePushL( sdpLines );
-      
-    EUNIT_ASSERT( sdpLines );
-    EUNIT_ASSERT( sdpLines->MdcaCount() == 2 );
-    EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineApplication() );
-    EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ) == KMusEngSessionSdpLineType() );
-    
-    CleanupStack::PopAndDestroy(); // sdplines
-    
-
-    CleanupStack::PopAndDestroy( inSession );
-
-
-    // set operator variant off
-    MultimediaSharingSettings::SetOperatorVariantSettingL(
-                     MusSettingsKeys::EStandard );
-    }
-
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngMceSession::UT_CMusEngMceSession_AdjustStreamsAndCodecsLL()
+void UT_CMusEngMceSession::UT_AdjustStreamsAndCodecsL()
     {
     // Check that function cannot be called before creating the session
     TRAPD( error, iClipSession->AdjustStreamsAndCodecsL() );
@@ -1031,46 +1005,6 @@
         EUNIT_ASSERT( 
             videoStream->Codecs()[ i ]->MaxBitRate() == 128000 );
         }
-    
-    // Test for Configuration based codec removal. Magic uid not set.    
-    CMceVideoCodec* codecAvc = CMceAvcCodec::NewLC( KMceSDPNameH264() );    
-    videoStream->AddCodecL( codecAvc );
-    CleanupStack::Pop( codecAvc );         
-    iClipSession->AdjustStreamsAndCodecsL();   
-    TBool avcCodecFound(EFalse);
-    for ( TInt i = 0; i < videoStream->Codecs().Count(); i++ )
-      {      
-      if( !videoStream->Codecs()[ i ]->SdpName().CompareF( KMceSDPNameH264 ) )
-        {
-        avcCodecFound = ETrue;
-        }      
-      }
-    // AVC should present
-    EUNIT_ASSERT(avcCodecFound);
-    
-    // Test for Configuration based codec removal. Magic uid set.
-    // Store the real value and revert back later , so that other tests will not be affected.
-    TUid uid = MultimediaSharingSettings::EncodingDeviceL();    
-    TInt32 KMusDisableAVC = 0x0fffffff;
-    MultimediaSharingSettings::SetPropertyValueL( MusSettingsKeys::KEncodingDevice,KMusDisableAVC);
-    codecAvc = CMceAvcCodec::NewLC( KMceSDPNameH264() );    
-    videoStream->AddCodecL( codecAvc );
-    CleanupStack::Pop( codecAvc );  
-    codecH2632000 = CMceH263Codec::NewLC( KMceSDPNameH2632000() );
-    videoStream->AddCodecL( codecH2632000 );
-    CleanupStack::Pop( codecH2632000 );
-    iClipSession->AdjustStreamsAndCodecsL();    
-    for ( TInt i = 0; i < videoStream->Codecs().Count(); i++ )
-       {
-       // H264 ( AVC ) codec should be removed
-       EUNIT_ASSERT( 
-                   videoStream->Codecs()[ i ]->SdpName().CompareF( KMceSDPNameH264 ) );
-       }
-    
-    
-    MultimediaSharingSettings::SetPropertyValueL( MusSettingsKeys::KEncodingDevice,uid.iUid);
-    
-    
     }
 
 
@@ -1078,7 +1012,7 @@
 //
 // -----------------------------------------------------------------------------
 //  
-void UT_CMusEngMceSession::UT_CMusEngMceSession_IncomingSessionL()
+void UT_CMusEngMceSession::UT_IncomingSessionL()
     {
     // New session should get rejected and deleted in any case, first failure
     CMceInSession* inSession = CMceInSession::NewL( 
@@ -1100,7 +1034,7 @@
 //
 // -----------------------------------------------------------------------------
 //  
-void UT_CMusEngMceSession::UT_CMusEngMceSession_IncomingUpdateL()
+void UT_CMusEngMceSession::UT_IncomingUpdateL()
     {
     CMceInSession* inSession = CMceInSession::NewL( 
                                       *iLiveSession->iManager, KNullDesC8 );
@@ -1138,7 +1072,7 @@
 //
 // -----------------------------------------------------------------------------
 //  
-void UT_CMusEngMceSession::UT_CMusEngMceSession_StreamStateChangedL()
+void UT_CMusEngMceSession::UT_StreamStateChangedL()
     {
     // Try without a session, nothing happens
     CMceAudioStream* audioStream = CMceAudioStream::NewLC();
@@ -1146,7 +1080,7 @@
     CleanupStack::PopAndDestroy( audioStream );
     
     // Simulate sending invite
-    iLiveSession->InviteL( KTestRecipientSipUri() );
+    iLiveSession->EstablishLcSessionL();
     
     // No observer set, so expect nothing to be done, cannot be asserted
     CMceMediaStream* changedStream = iLiveSession->iSession->Streams()[0];
@@ -1156,55 +1090,56 @@
     // EUninitialized, stream is created, unexpected change, nothing happens
     changedStream->iState = CMceMediaStream::EUninitialized;
     iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream );
-    EUNIT_ASSERT( iObserver->IsReseted() );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     // EInitialized, stream is initialized
     changedStream->iState = CMceMediaStream::EInitialized;
     iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream );
-    EUNIT_ASSERT( iObserver->IsReseted() );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     // EBuffering, stream is buffering
     changedStream->iState = CMceMediaStream::EBuffering;
     iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream );
-    EUNIT_ASSERT( iObserver->IsReseted() );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     // EIdle, stream is not receiving RTP
     changedStream->iState = CMceMediaStream::EIdle;
     iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream );
-    EUNIT_ASSERT( iObserver->iStreamIdleCalled );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     // EStreaming, stream is streaming
     changedStream->iState = CMceMediaStream::EStreaming;
     iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream );
-    EUNIT_ASSERT( iObserver->iStreamStreamingCalled );
-    iObserver->Reset();
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::EPlayerStateChanged ) )
+    iLcSessionObserver->Reset();
     
     // EStreaming, stream is streaming, other than video out- or instream
     changedStream->iState = CMceMediaStream::EStreaming;
     iLiveSession->CMusEngMceSession::StreamStateChanged( 
                                 *iLiveSession->iSession->Streams()[1] );
-    EUNIT_ASSERT( iObserver->IsReseted() );
-    iObserver->Reset();
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
+    iLcSessionObserver->Reset();
     
     // EDisabled, stream is explicitly disabled
     changedStream->iState = CMceMediaStream::EDisabled;
     iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream );
-    EUNIT_ASSERT( iObserver->IsReseted() );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     // ENoResources, stream has no needed resources to stream
     changedStream->iState = CMceMediaStream::ENoResources;
     iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream );
-    EUNIT_ASSERT( iObserver->IsReseted() );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     // ETranscodingRequired, stream requires non-realtime transcoding
     changedStream->iState = CMceMediaStream::ETranscodingRequired;
     iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream );
-    EUNIT_ASSERT( iObserver->IsReseted() );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     // ETranscoding, stream is transcoding in non-realtime
     changedStream->iState = CMceMediaStream::ETranscoding;
     iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream );
-    EUNIT_ASSERT( iObserver->IsReseted() );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     }
     
@@ -1214,7 +1149,7 @@
 // when function is changed
 // -----------------------------------------------------------------------------
 //  
-void UT_CMusEngMceSession::UT_CMusEngMceSession_StreamStateChangedWithSourceL()
+void UT_CMusEngMceSession::UT_StreamStateChangedWithSourceL()
     {
     // Try without a session, nothing happens
     iLiveSession->CMusEngMceSession::StreamStateChanged( 
@@ -1225,7 +1160,7 @@
     CleanupStack::PopAndDestroy(); // audiostream
     
     // Simulate sending invite
-    iLiveSession->InviteL( KTestRecipientSipUri() );
+    iLiveSession->EstablishLcSessionL();
     
     // Try all the stream states
     CMceMediaStream* changedStream = iLiveSession->iSession->Streams()[0];
@@ -1233,48 +1168,49 @@
     // EUninitialized, stream is created, unexpected change, nothing happens
     changedStream->iState = CMceMediaStream::EUninitialized;
     iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream );
-    EUNIT_ASSERT( iObserver->IsReseted() );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     // EInitialized, stream is initialized
     changedStream->iState = CMceMediaStream::EInitialized;
     iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream );
-    EUNIT_ASSERT( iObserver->IsReseted() );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     // EBuffering, stream is buffering
     changedStream->iState = CMceMediaStream::EBuffering;
     iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream );
-    EUNIT_ASSERT( iObserver->IsReseted() );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     // EIdle, stream is not receiving RTP
     changedStream->iState = CMceMediaStream::EIdle;
     iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream );
-    EUNIT_ASSERT( iObserver->iStreamIdleCalled );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     // EStreaming, stream is streaming
     changedStream->iState = CMceMediaStream::EStreaming;
     iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream );
-    EUNIT_ASSERT( iObserver->iStreamStreamingCalled );
-    iObserver->Reset();
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::EPlayerStateChanged ) )
+    iLcSessionObserver->Reset();
     
     // EDisabled, stream is explicitly disabled
     changedStream->iState = CMceMediaStream::EDisabled;
     iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream );
-    EUNIT_ASSERT( iObserver->IsReseted() );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     // ENoResources, stream has no needed resources to stream
     changedStream->iState = CMceMediaStream::ENoResources;
     iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream );
-    EUNIT_ASSERT( iObserver->IsReseted() );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     // ETranscodingRequired, stream requires non-realtime transcoding
     changedStream->iState = CMceMediaStream::ETranscodingRequired;
     iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream );
-    EUNIT_ASSERT( iObserver->IsReseted() );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     // ETranscoding, stream is transcoding in non-realtime
     changedStream->iState = CMceMediaStream::ETranscoding;
     iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream );
-    EUNIT_ASSERT( iObserver->IsReseted() );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     }
 
@@ -1284,7 +1220,7 @@
 // when function is changed
 // -----------------------------------------------------------------------------
 //  
-void UT_CMusEngMceSession::UT_CMusEngMceSession_StreamStateChangedWithSinkL()
+void UT_CMusEngMceSession::UT_StreamStateChangedWithSinkL()
     {
     // Try without a session, nothing happens
     CMceAudioStream* audioStream = CMceAudioStream::NewLC();
@@ -1292,7 +1228,7 @@
     CleanupStack::PopAndDestroy( audioStream );
     
     // Simulate sending invite
-    iLiveSession->InviteL( KTestRecipientSipUri() );
+    iLiveSession->EstablishLcSessionL();
     
     // Try all the stream states
     CMceMediaStream* changedStream = iLiveSession->iSession->Streams()[0];
@@ -1300,48 +1236,49 @@
     // EUninitialized, stream is created, unexpected change, nothing happens
     changedStream->iState = CMceMediaStream::EUninitialized;
     iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream );
-    EUNIT_ASSERT( iObserver->IsReseted() );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     // EInitialized, stream is initialized
     changedStream->iState = CMceMediaStream::EInitialized;
     iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream );
-    EUNIT_ASSERT( iObserver->IsReseted() );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     // EBuffering, stream is buffering
     changedStream->iState = CMceMediaStream::EBuffering;
     iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream );
-    EUNIT_ASSERT( iObserver->IsReseted() );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     // EIdle, stream is not receiving RTP
     changedStream->iState = CMceMediaStream::EIdle;
     iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream );
-    EUNIT_ASSERT( iObserver->iStreamIdleCalled );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     // EStreaming, stream is streaming
     changedStream->iState = CMceMediaStream::EStreaming;
     iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream );
-    EUNIT_ASSERT( iObserver->iStreamStreamingCalled );
-    iObserver->Reset();
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::EPlayerStateChanged ) )
+    iLcSessionObserver->Reset();
     
     // EDisabled, stream is explicitly disabled
     changedStream->iState = CMceMediaStream::EDisabled;
     iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream );
-    EUNIT_ASSERT( iObserver->IsReseted() );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     // ENoResources, stream has no needed resources to stream
     changedStream->iState = CMceMediaStream::ENoResources;
     iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream );
-    EUNIT_ASSERT( iObserver->IsReseted() );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     // ETranscodingRequired, stream requires non-realtime transcoding
     changedStream->iState = CMceMediaStream::ETranscodingRequired;
     iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream );
-    EUNIT_ASSERT( iObserver->IsReseted() );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     // ETranscoding, stream is transcoding in non-realtime
     changedStream->iState = CMceMediaStream::ETranscoding;
     iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream );
-    EUNIT_ASSERT( iObserver->IsReseted() );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     }        
 
@@ -1350,22 +1287,24 @@
 //
 // -----------------------------------------------------------------------------
 //    
-void UT_CMusEngMceSession::UT_CMusEngMceSession_SessionStateChangedL()
+void UT_CMusEngMceSession::UT_SessionStateChangedL()
     {
     // Simulate sending invite
-    iLiveSession->InviteL( KTestRecipientSipUri() );   
+    iLiveSession->EstablishLcSessionL();   
 
     // No container, so expect to be handled as internal error
     iLiveSession->SessionStateChanged( *iLiveSession->iSession, NULL );
-    EUNIT_ASSERT( iObserver->iSessionFailedCalled );
-    iObserver->Reset();    
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionFailed ) )
+    EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, KErrGeneral )
+    iLcSessionObserver->Reset();    
     
     // Try to tell session about some other session's state transition
     
     TMceTransactionDataContainer container;
  
     iLiveSession->SessionStateChanged( *iSomeOtherSession->iSession, &container );
-    EUNIT_ASSERT( iObserver->IsReseted() );    
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );    
       
     // Try all the normal cases:
     
@@ -1377,8 +1316,10 @@
     container.SetReasonPhrase( anyReasonPhrase );
     iLiveSession->SessionStateChanged( *iLiveSession->iSession, 
                                        &container );
-    EUNIT_ASSERT( iObserver->iSessionFailedCalled );
-    iObserver->Reset();
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionFailed ) )
+    EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, KErrGeneral )
+    iLcSessionObserver->Reset();
     container.Clear();
     
     // EOffering
@@ -1386,44 +1327,47 @@
     container.SetStatusCode( KSipStatusCodeNoCodeSet );
     iLiveSession->SessionStateChanged( *iLiveSession->iSession, 
                                        &container );
-    EUNIT_ASSERT( iObserver->IsReseted() );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     // EIncoming
     iLiveSession->iSession->iState = CMceSession::EIncoming;
     container.SetStatusCode( KSipStatusCodeNoCodeSet );
     iLiveSession->SessionStateChanged( *iLiveSession->iSession, 
                                        &container );
-    EUNIT_ASSERT( iObserver->iSessionFailedCalled );
-    iObserver->Reset();
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionFailed ) )
+    EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, KErrGeneral )
+    iLcSessionObserver->Reset();
     
     // EReserving
     iLiveSession->iSession->iState = CMceSession::EReserving;
     container.SetStatusCode( KSipStatusCodeNoCodeSet );
     iLiveSession->SessionStateChanged( *iLiveSession->iSession, 
                                        &container );
-    EUNIT_ASSERT( iObserver->IsReseted() );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     // EAnswering
     iLiveSession->iSession->iState = CMceSession::EAnswering;
     container.SetStatusCode( KSipStatusCodeNoCodeSet );
     iLiveSession->SessionStateChanged( *iLiveSession->iSession, 
                                        &container );
-    EUNIT_ASSERT( iObserver->IsReseted() );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     // EProceeding
     iLiveSession->iSession->iState = CMceSession::EProceeding;
     container.SetStatusCode( KSipStatusCodeNoCodeSet );
     iLiveSession->SessionStateChanged( *iLiveSession->iSession, 
                                        &container );
-    EUNIT_ASSERT( iObserver->IsReseted() );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     // EEstablished
     iLiveSession->iSession->iState = CMceSession::EEstablished;
     container.SetStatusCode( KSipStatusCode200OK );
     iLiveSession->SessionStateChanged( *iLiveSession->iSession, 
                                        &container );
-    EUNIT_ASSERT( iObserver->iSessionEstablishedCalled );
-    iObserver->Reset();
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionStateChanged ) )
+    iLcSessionObserver->Reset();
     
     // EEstablished again (meaning expiration of session timer 
     // and refresment of session )
@@ -1431,38 +1375,136 @@
     container.SetStatusCode( KSipStatusCode200OK );
     iLiveSession->SessionStateChanged( *iLiveSession->iSession, 
                                        &container );
-    EUNIT_ASSERT( iObserver->IsReseted() );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
     
     // ECancelling
     iLiveSession->iSession->iState = CMceSession::ECancelling;
     container.SetStatusCode( KSipStatusCodeNoCodeSet );
     iLiveSession->SessionStateChanged( *iLiveSession->iSession, 
                                        &container );
-    EUNIT_ASSERT( iObserver->IsReseted() );
-    iObserver->Reset();
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
+    iLcSessionObserver->Reset();
     
     // ETerminating
     iLiveSession->iSession->iState = CMceSession::ETerminating;
     container.SetStatusCode( KSipStatusCodeNoCodeSet );
     iLiveSession->SessionStateChanged( *iLiveSession->iSession, 
                                        &container );
-    EUNIT_ASSERT( iObserver->IsReseted() );
-    iObserver->Reset();
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
+    iLcSessionObserver->Reset();
     
     // ETerminated
     iLiveSession->iSession->iState = CMceSession::ETerminated;
     container.SetStatusCode( KSipStatusCode200OK );
     iLiveSession->SessionStateChanged( *iLiveSession->iSession, 
                                        &container );
-    EUNIT_ASSERT( iObserver->iSessionTerminatedCalled );
-    iObserver->Reset();
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionStateChanged ) )
+    iLcSessionObserver->Reset();
     
     // Default case
     iLiveSession->iSession->iState = static_cast<CMceSession::TState>( 10 );
     container.SetStatusCode( KSipStatusCodeNoCodeSet );
     iLiveSession->SessionStateChanged( *iLiveSession->iSession, &container );
-    EUNIT_ASSERT( iObserver->IsReseted() );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() );
+
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//     
+void UT_CMusEngMceSession::UT_HandleSessionStateChanged_EncoderKeyStoringL()
+    {
+    // Make repository empty, config keys must be written
+    CRepository::SetStubAvcConfigKeysL( KNullDesC8() );
+    
+    // Invite    
+    iLiveSession->EstablishLcSessionL();
+    iLiveSession->iSession->iState = CMceSession::EEstablished;
+    
+    // Force failure on CenRep
+    CRepository::iForceFailWithCode = KErrNoMemory;
+    
+    // Simulate session state transition notification
+    iLiveSession->HandleSessionStateChanged( 
+        *iLiveSession->iSession, 200, KNullDesC8() );
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionFailed ) )
+    EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, KErrNoMemory )    
+    
+    // Normal case, something will be written to CenRep    
+    iClipSession->EstablishLcSessionL();
+    iClipSession->iSession->iState = CMceSession::EEstablished;
+    iClipSession->HandleSessionStateChanged( 
+                            *iClipSession->iSession, 200, KNullDesC8() );  
+    HBufC8* info = MultimediaSharingSettings::EncoderConfigInfoLC();
+    EUNIT_ASSERT_NOT_EQUALS( *info, KMusAvcBitrateLevel_1b_ConfigKey() )
+    CleanupStack::PopAndDestroy( info );
+    }
 
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//     
+void UT_CMusEngMceSession::UT_SessionConnectionStateChangedL()
+    {
+    
+    // Try to tell session about another session's connection state change
+    
+    iLiveSession->SessionConnectionStateChanged( *iSomeOtherSession->iSession, 
+                                                 ETrue );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // No session yet, nothing happened
+    
+    // Simulate sending invite
+    iLiveSession->EstablishLcSessionL();
+    
+    // Now try again to notify session about session connection state change
+    // of an another session
+    iLiveSession->SessionConnectionStateChanged( *iSomeOtherSession->iSession, 
+                                                 ETrue );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // Wrong session, nothing happened
+    
+    // Try tell session connection state is active
+    iLiveSession->SessionConnectionStateChanged( *iLiveSession->iSession, 
+                                                 ETrue );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // Session active, nothing happened
+    
+    // Try tell session connection state is inactive
+    iLiveSession->SessionConnectionStateChanged( *iLiveSession->iSession, 
+                                                 EFalse );
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionFailed ) )
+    EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError,
+                         TInt( MLcSession::EConnectionLost ) )
+    iLcSessionObserver->Reset();  
+    }
+    
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+// 
+void UT_CMusEngMceSession::UT_FailedL()
+    {
+    // Try to tell session about failure of another session
+
+    iLiveSession->Failed( *iSomeOtherSession->iSession, 0 );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // No session yet, nothing happened
+    
+    // Simulate sending invite
+    iLiveSession->EstablishLcSessionL();
+    
+    // Now try again to notify session about failure of an another session
+    iLiveSession->Failed( *iSomeOtherSession->iSession, 0 );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // Wrong session, nothing happened
+    
+    // Tell session that it has failed
+    iLiveSession->Failed( *iLiveSession->iSession, KErrNotFound );
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionFailed ) )
+    EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, KErrNotFound )
+    iLcSessionObserver->Reset();
     }
     
 
@@ -1470,35 +1512,31 @@
 //
 // -----------------------------------------------------------------------------
 //     
-void UT_CMusEngMceSession::UT_CMusEngMceSession_SessionConnectionStateChangedL()
+void UT_CMusEngMceSession::UT_UpdateFailedL()
     {
-    
-    // Try to tell session about another session's connection state change
-    
-    iLiveSession->SessionConnectionStateChanged( *iSomeOtherSession->iSession, 
-                                                 ETrue );
-    EUNIT_ASSERT( iObserver->IsReseted() ); // No session yet, nothing happened
-    
-    // Simulate sending invite
-    iLiveSession->InviteL( KTestRecipientSipUri() );
+    // Try to tell session about update failure of another session
+    iLiveSession->UpdateFailed( *iSomeOtherSession->iSession, NULL );
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionFailed ) )
+    EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, KErrGeneral )
+    iLcSessionObserver->Reset();
     
-    // Now try again to notify session about session connection state change
-    // of an another session
-    iLiveSession->SessionConnectionStateChanged( *iSomeOtherSession->iSession, 
-                                                 ETrue );
-    EUNIT_ASSERT( iObserver->IsReseted() ); // Wrong session, nothing happened
+    // Try again with container
+    TMceTransactionDataContainer container;
+    iLiveSession->UpdateFailed( *iSomeOtherSession->iSession, &container );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // No session yet, nothing happened
     
-    // Try tell session connection state is active
-    iLiveSession->SessionConnectionStateChanged( *iLiveSession->iSession, 
-                                                 ETrue );
-    EUNIT_ASSERT( iObserver->IsReseted() ); // Session active, nothing happened
+    // Invite and try again.
+    iLiveSession->EstablishLcSessionL();
+    iLiveSession->UpdateFailed( *iSomeOtherSession->iSession, &container );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // Wrong session, nothing happened¨
     
-    // Try tell session connection state is inactive
-    iLiveSession->SessionConnectionStateChanged( *iLiveSession->iSession, 
-                                                 EFalse );
-    EUNIT_ASSERT( iObserver->iSessionConnectionLostCalled );
-    iObserver->Reset();
-    
+    // Try with right session
+    iLiveSession->UpdateFailed( *iLiveSession->iSession, &container );
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionFailed ) )
+    EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, KErrGeneral )
+    iLcSessionObserver->Reset();
     }
     
 
@@ -1506,61 +1544,7 @@
 //
 // -----------------------------------------------------------------------------
 // 
-void UT_CMusEngMceSession::UT_CMusEngMceSession_FailedL()
-    {
-    // Try to tell session about failure of another session
-
-    iLiveSession->Failed( *iSomeOtherSession->iSession, 0 );
-    EUNIT_ASSERT( iObserver->IsReseted() ); // No session yet, nothing happened
-    
-    // Simulate sending invite
-    iLiveSession->InviteL( KTestRecipientSipUri() );
-    
-    // Now try again to notify session about failure of an another session
-    iLiveSession->Failed( *iSomeOtherSession->iSession, 0 );
-    EUNIT_ASSERT( iObserver->IsReseted() ); // Wrong session, nothing happened
-    
-    // Tell session that it has failed
-    iLiveSession->Failed( *iLiveSession->iSession, 0 );
-    EUNIT_ASSERT( iObserver->iSessionFailedCalled );
-    iObserver->Reset();
-    
-    }
-    
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//     
-void UT_CMusEngMceSession::UT_CMusEngMceSession_UpdateFailedL()
-    {
-    // Try to tell session about update failure of another session
-    iLiveSession->UpdateFailed( *iSomeOtherSession->iSession, NULL );
-    EUNIT_ASSERT( iObserver->iSessionFailedCalled ); // No container, internal error
-    iObserver->Reset();
-    
-    // Try again with container
-    TMceTransactionDataContainer container;
-    iLiveSession->UpdateFailed( *iSomeOtherSession->iSession, &container );
-    EUNIT_ASSERT( iObserver->IsReseted() ); // No session yet, nothing happened
-    
-    // Invite and try again.
-    iLiveSession->InviteL( KTestRecipientSipUri() );
-    iLiveSession->UpdateFailed( *iSomeOtherSession->iSession, &container );
-    EUNIT_ASSERT( iObserver->IsReseted() ); // Wrong session, nothing happened¨
-    
-    // Try with right session
-    iLiveSession->UpdateFailed( *iLiveSession->iSession, &container );
-    EUNIT_ASSERT( iObserver->iSessionFailedCalled );
-    iObserver->Reset();
-    }
-    
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-// 
-void UT_CMusEngMceSession::UT_CMusEngMceSession_SRReceivedL()
+void UT_CMusEngMceSession::UT_SRReceivedL()
     {
     EUNIT_ASSERT( iLiveSession->iSecondsFromLastRtcpReport == 0 );
     
@@ -1603,7 +1587,7 @@
 //
 // -----------------------------------------------------------------------------
 //     
-void UT_CMusEngMceSession::UT_CMusEngMceSession_RRReceivedL()
+void UT_CMusEngMceSession::UT_RRReceivedL()
     {
     EUNIT_ASSERT( iLiveSession->iSecondsFromLastRtcpReport == 0 );
     
@@ -1640,45 +1624,12 @@
     EUNIT_ASSERT( iLiveSession->iSecondsFromLastRtcpReport == 0 );    
     }
     
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//      
-void UT_CMusEngMceSession::UT_CMusEngMceSession_InactivityTimeoutL()
-    {    
-    //   Construct an audio stream for this test
-    
-    CMceAudioStream* audioStream = CMceAudioStream::NewLC();
-    
-    CMceRtpSource* rtpSource = CMceRtpSource::NewLC();
-    audioStream->SetSourceL( rtpSource );
-    CleanupStack::Pop( rtpSource );
-    
-    iReceiveSession->InactivityTimeout( *audioStream, *rtpSource );
-    
-    EUNIT_ASSERT( iObserver->IsReseted() )
-    
-    CleanupStack::PopAndDestroy( audioStream );
-    
-    // And now real inactivity timeout
-    
-    iReceiveSession->InactivityTimeout( 
-                *iReceiveSession->iSession->Streams()[0],
-                *static_cast<CMceRtpSource*>
-                        (iReceiveSession->iSession->Streams()[0]->Source()) );
-    
-    EUNIT_ASSERT( iObserver->iStreamIdleCalled )
-    
-    iObserver->Reset();
-    }
-    
     
 // -----------------------------------------------------------------------------
 //
 // -----------------------------------------------------------------------------
 //       
-void UT_CMusEngMceSession::UT_CMusEngMceSession_SsrcAddedL()
+void UT_CMusEngMceSession::UT_SsrcAddedL()
     {
     // As CMusEngMceSession::SsrcAdded is expected to do nothing, just call
     // it to make sure it does not weaken the test coverage
@@ -1697,7 +1648,7 @@
 //
 // -----------------------------------------------------------------------------
 //  
-void UT_CMusEngMceSession::UT_CMusEngMceSession_SsrcRemovedL()
+void UT_CMusEngMceSession::UT_SsrcRemovedL()
     {
     // As CMusEngMceSession::SsrcRemoved is expected to do nothing, just call
     // it to make sure it does not weaken the test coverage
@@ -1716,21 +1667,25 @@
 //
 // -----------------------------------------------------------------------------
 //  
-void UT_CMusEngMceSession::UT_CMusEngMceSession_UpdateTimerEventL()
+void UT_CMusEngMceSession::UT_UpdateTimerEventL()
     {
+    iLcSessionObserver->Reset();
     iLiveSession->UpdateTimerEvent();
-    EUNIT_ASSERT( iObserver->iSessionTimeChangedCalled )
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::EUnknown ) )
     EUNIT_ASSERT( iLiveSession->iUpdateTimer->IsActive() )
     iLiveSession->iUpdateTimer->Cancel();
-    iObserver->Reset();
+    iLcSessionObserver->Reset();
     
     iLiveSession->iSecondsFromLastRtcpReport = 25; // >KMusEngRtcpInactivityThreshold
     iLiveSession->UpdateTimerEvent();
-    EUNIT_ASSERT( iObserver->iSessionTimeChangedCalled )
-    EUNIT_ASSERT( iObserver->iInactivityTimeoutCalled );
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionFailed ) )
+    EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError,
+                         TInt( MLcSession::EMediaInactivityTimeout ) )
     EUNIT_ASSERT( iLiveSession->iUpdateTimer->IsActive() )
     iLiveSession->iUpdateTimer->Cancel();
-    iObserver->Reset();
+    iLcSessionObserver->Reset(); 
     }   
 
 
@@ -1738,14 +1693,13 @@
 //
 // -----------------------------------------------------------------------------
 //
-void UT_CMusEngMceSession::UT_CMusEngMceSession_IsRoamingBetweenAPsAllowedL()
+void UT_CMusEngMceSession::UT_IsRoamingBetweenAPsAllowedL()
     {
     // No session
     EUNIT_ASSERT( iLiveSession->IsRoamingBetweenAPsAllowed() )
 
     // Session idle
-    _LIT( KRecipientSipUri, "sip:user@some.where" );
-    iLiveSession->InviteL( KRecipientSipUri );
+    iLiveSession->EstablishLcSessionL();
     iLiveSession->iSession->iState = CMceSession::EIdle;
     EUNIT_ASSERT( iLiveSession->IsRoamingBetweenAPsAllowed() )
     
@@ -1762,55 +1716,249 @@
 //
 // -----------------------------------------------------------------------------
 //
-void UT_CMusEngMceSession::UT_CMusEngMceSession_VolumeChangedL()
-    {
-    // Try without session, nothing happens
-    EUNIT_ASSERT( iObserver->iVolume == 0 );
-    iLiveSession->VolumeChanged( 1, EFalse );
-    EUNIT_ASSERT( !VerifySpeakersVolume(*iLiveSession, 1) )
-    EUNIT_ASSERT( iObserver->iVolume == 0 );
+void UT_CMusEngMceSession::UT_SaveContactL()
+    {     
+    _LIT8( KTestSaveContactAddr, "sip:abc@10.10.10.10");
+    
+    User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid,
+                                        NMusSessionApi::KTelNumber,
+                                        _L("12341234") ) );
+    
+    // Operator variant
+    iLiveSession->iOperatorVariant = ETrue;
+    MUSENG_EUNIT_ASSERT_SPECIFIC_LEAVE( 
+            iLiveSession->SaveContactL( KTestSaveContactAddr ), KErrNotSupported )
+    
+    // No address to save
+    iLiveSession->iOperatorVariant = EFalse;
+    MUSENG_EUNIT_ASSERT_SPECIFIC_LEAVE( 
+               iLiveSession->SaveContactL( KNullDesC8 ), KErrArgument )
 
-    // Establish session
-    ESTABLISH_OUT_SESSION( iClipSession )
+    // Contact id KErrNotSupported (multiple matching contacts)
+    User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid,
+                                     NMusSessionApi::KContactId,
+                                     KErrNotSupported ) );
     
-    // Try without observer
-    iClipSession->VolumeChanged( 2, EFalse );
-    EUNIT_ASSERT( VerifySpeakersVolume(*iClipSession, 2) )
-    EUNIT_ASSERT( iObserver->iVolume == 0 );
-    
+    MUSENG_EUNIT_ASSERT_SPECIFIC_LEAVE( 
+                iLiveSession->SaveContactL( KTestSaveContactAddr ), KErrNotFound )
     
-    // Try with observer set
-    iClipSession->SetVolumeChangeObserver( iObserver );
-    iClipSession->VolumeChanged( 3, EFalse );
-    EUNIT_ASSERT( VerifySpeakersVolume(*iClipSession, 3) )
-    EUNIT_ASSERT( iObserver->iVolume == 3 );
+    // SIP field exists already
+    User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid,
+                                        NMusSessionApi::KContactId,
+                                        2 ) );
+
+    ContactEngineStubHelper::SetSIPFieldFound( ETrue );
+    MUSENG_EUNIT_ASSERT_SPECIFIC_LEAVE( 
+                   iLiveSession->SaveContactL( KTestSaveContactAddr ), KErrAlreadyExists )
+    
+    // No correct field in fields info
+    ContactEngineStubHelper::Reset();
+    ContactEngineStubHelper::SetSIPFieldInfoFound( EFalse );
+    MUSENG_EUNIT_ASSERT_SPECIFIC_LEAVE( 
+                       iLiveSession->SaveContactL( KTestSaveContactAddr ), KErrNotFound )
+    
+    // Success
+    ContactEngineStubHelper::Reset();
+    iLiveSession->SaveContactL( KTestSaveContactAddr );
+    EUNIT_ASSERT( ContactEngineStubHelper::GetCalledFunction() == EContactEngineStubSetText );
     
     }
 
-// HELPERS
-TBool UT_CMusEngMceSession::VerifySpeakersVolume(CMusEngMceSession& aSession, TInt aVolume)
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_RectL()
+    {
+    iLiveSession->SetRectL( TRect( 0, 0, 100, 100 ) );    
+    TRect rect = iLiveSession->Rect();
+    
+    // Initial values
+    EUNIT_ASSERT( rect.iTl.iX == 0 );
+    EUNIT_ASSERT( rect.iTl.iY == 0 );
+    EUNIT_ASSERT( rect.iBr.iX == 100 );
+    EUNIT_ASSERT( rect.iBr.iY == 100 );
+    
+    iLiveSession->iRect.iTl.iX = 100;
+    iLiveSession->iRect.iTl.iY = 200;
+    iLiveSession->iRect.iBr.iX = 300;
+    iLiveSession->iRect.iBr.iY = 400;
+    
+    rect = iLiveSession->Rect();
+    
+    EUNIT_ASSERT( rect.iTl.iX == 100 );
+    EUNIT_ASSERT( rect.iTl.iY == 200 );
+    EUNIT_ASSERT( rect.iBr.iX == 300 );
+    EUNIT_ASSERT( rect.iBr.iY == 400 );  
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_SetRectLL()
     {
-    TBool result = EFalse;
+    TRect rect;
+
+    rect.iTl.iX = 100;
+    rect.iTl.iY = 200;
+    rect.iBr.iX = 300;
+    rect.iBr.iY = 400;
+
+    iLiveSession->SetRectL( rect );
+    
+    EUNIT_ASSERT( iLiveSession->iRect.iTl.iX == 100 );
+    EUNIT_ASSERT( iLiveSession->iRect.iTl.iY == 200 );
+    EUNIT_ASSERT( iLiveSession->iRect.iBr.iX == 300 );
+    EUNIT_ASSERT( iLiveSession->iRect.iBr.iY == 400 );
+
+    ESTABLISH_OUT_SESSION( iLiveSession );
+    
+    CMceDisplaySink* display = 
+                MusEngMceUtils::GetDisplayL( *( iLiveSession->iSession ) );
+    TRect displayRect = display->DisplayRectL();
     
-    CMceSpeakerSink* speaker = NULL;    
-    CMceSession* session = aSession.iSession;
+    EUNIT_ASSERT( displayRect.iTl.iX == 100 );
+    EUNIT_ASSERT( displayRect.iTl.iY == 200 );
+    EUNIT_ASSERT( displayRect.iBr.iX == 300 );
+    EUNIT_ASSERT( displayRect.iBr.iY == 400 );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_SecondaryRectL()
+    {
+    iLiveSession->SetSecondaryRectL( TRect( 0, 0, 100, 100 ) );    
+    TRect rect = iLiveSession->SecondaryRect();
+    
+    // Initial values
+    EUNIT_ASSERT( rect.iTl.iX == 0 );
+    EUNIT_ASSERT( rect.iTl.iY == 0 );
+    EUNIT_ASSERT( rect.iBr.iX == 100 );
+    EUNIT_ASSERT( rect.iBr.iY == 100 );
+    
+    iLiveSession->iRect.iTl.iX = 100;
+    iLiveSession->iRect.iTl.iY = 200;
+    iLiveSession->iRect.iBr.iX = 300;
+    iLiveSession->iRect.iBr.iY = 400;
+    
+    rect = iLiveSession->SecondaryRect();
     
-    if ( session ) 
-        {
-        for ( TInt i = 0; i < session->Streams().Count(); ++i )
-            {
-            for ( TInt j = 0; j < session->Streams()[i]->Sinks().Count(); ++j )
-                {
-                if ( session->Streams()[i]->Sinks()[j]->Type() == KMceSpeakerSink )
-                    {
-                    speaker = static_cast<CMceSpeakerSink*>(
-                                              session->Streams()[i]->Sinks()[j] );
-                    result = ( speaker->VolumeL() == aVolume );
-                    }
-                }
-            } 
-        }
-    return result;
+    EUNIT_ASSERT( rect.iTl.iX == 100 );
+    EUNIT_ASSERT( rect.iTl.iY == 200 );
+    EUNIT_ASSERT( rect.iBr.iX == 300 );
+    EUNIT_ASSERT( rect.iBr.iY == 400 );  
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_SetSecondaryRectLL()
+    {
+    TRect rect;
+
+    rect.iTl.iX = 100;
+    rect.iTl.iY = 200;
+    rect.iBr.iX = 300;
+    rect.iBr.iY = 400;
+
+    iLiveSession->SetSecondaryRectL( rect );
+    
+    EUNIT_ASSERT( iLiveSession->iRect.iTl.iX == 100 );
+    EUNIT_ASSERT( iLiveSession->iRect.iTl.iY == 200 );
+    EUNIT_ASSERT( iLiveSession->iRect.iBr.iX == 300 );
+    EUNIT_ASSERT( iLiveSession->iRect.iBr.iY == 400 );
+
+    ESTABLISH_OUT_SESSION( iLiveSession );
+    
+    CMceDisplaySink* display = 
+                MusEngMceUtils::GetDisplayL( *( iLiveSession->iSession ) );
+    TRect displayRect = display->DisplayRectL();
+    
+    EUNIT_ASSERT( displayRect.iTl.iX == 100 );
+    EUNIT_ASSERT( displayRect.iTl.iY == 200 );
+    EUNIT_ASSERT( displayRect.iBr.iX == 300 );
+    EUNIT_ASSERT( displayRect.iBr.iY == 400 );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_EnableDisplayLL()
+    {
+    TRAPD( error, iLiveSession->EnableDisplayL( ETrue ) );
+    MUS_TEST_FORWARD_ALLOC_FAILURE( error );
+    EUNIT_ASSERT( error == KErrNotReady );
+    
+    ESTABLISH_OUT_SESSION( iLiveSession );
+    
+    CMceDisplaySink* display = 
+                    MusEngMceUtils::GetDisplayL( *(iLiveSession->iSession) );
+    
+    // Disable
+    iLiveSession->EnableDisplayL( EFalse );
+    
+    EUNIT_ASSERT( !display->iIsEnabled );
+    
+    // Try to disable again, request should be ignored
+    
+    iLiveSession->EnableDisplayL( EFalse );
+    
+    EUNIT_ASSERT( !display->iIsEnabled );
+
+    // Enable
+    
+    iLiveSession->EnableDisplayL( ETrue );
+    
+    EUNIT_ASSERT( display->iIsEnabled );
+    
+    // Try to enable again, request should be ignored
+    
+    iLiveSession->EnableDisplayL( ETrue );
+    
+    EUNIT_ASSERT( display->iIsEnabled );
+    
+    EUNIT_ASSERT( iLiveSession->IsDisplayEnabled() )
+    EUNIT_ASSERT( iLiveSession->IsDisplayActive() )
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_CMusEngMceSession_SetOrientationLL()
+    {
+    // Try without session, fails
+    EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->SetOrientationL( 
+                                                CMusEngMceSession::EPortrait ), 
+                                 KErrNotReady )
+
+    // Establish a session
+    ESTABLISH_OUT_SESSION( iLiveSession )
+    
+    CMceDisplaySink* display = 
+                    MusEngMceUtils::GetDisplayL( *iLiveSession->iSession );
+    
+    // Check the initial state
+    display->iRotation = CMceDisplaySink::ENone;
+    EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), 
+                         CMusEngMceSession::EPortrait )      
+                         
+    // Successfully change orientation
+    
+    iLiveSession->SetOrientationL( CMusEngMceSession::ELandscape );
+    EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), 
+                         CMusEngMceSession::ELandscape )
+    
+    iLiveSession->SetOrientationL( CMusEngMceSession::EPortrait );
+    EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), 
+                         CMusEngMceSession::EPortrait )
     }
 
 
@@ -1818,22 +1966,510 @@
 //
 // -----------------------------------------------------------------------------
 //
-void UT_CMusEngMceSession::SetMaxVolForSpeakersL(CMceSession& aSession, TInt aMaxVol)
+void UT_CMusEngMceSession::UT_SetEncodingDeviceLL()
+    {
+    CMceAvcCodec* codec = CMceAvcCodec::NewLC( KMceSDPNameH264() );
+    
+    // Generic error in CenRep, leave expected
+    CRepository::iForceFailWithCode = KErrNotReady;
+    EUNIT_ASSERT_LEAVE( iLiveSession->SetEncodingDeviceL( *codec ) )
+    EUNIT_ASSERT_EQUALS( codec->iEncodingDecodingDevice, TUid::Uid( 0 ) )
+    
+    // No entry in CenRep, default value expected
+    CRepository::iForceFailWithCode = KErrNotFound;
+    const TUid KDefaultEncodingDevice( TUid::Uid( 0x20001C13 ) );
+    iLiveSession->SetEncodingDeviceL( *codec );
+    EUNIT_ASSERT_EQUALS( codec->iEncodingDecodingDevice, 
+                         KDefaultEncodingDevice )
+    
+    // Entry in CenRep
+    const TInt KSomeEncodingDevice( 0x20001C15 );
+    CRepository::iStaticEncoderUid = KSomeEncodingDevice;
+    iLiveSession->SetEncodingDeviceL( *codec );
+    EUNIT_ASSERT_EQUALS( codec->iEncodingDecodingDevice, 
+                         TUid::Uid( KSomeEncodingDevice ) )
+                                             
+    CleanupStack::PopAndDestroy( codec );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_SetCodecConfigKeyLL()
+    {
+    CMceAvcCodec* codec = CMceAvcCodec::NewLC( KMceSDPNameH264() );
+    codec->SetAllowedBitrates( KMceAvcBitrateLevel1b );
+
+    // Generic error in CenRep, leave expected
+    CRepository::iForceFailWithCode = KErrNotReady;
+    EUNIT_ASSERT_LEAVE( iLiveSession->SetCodecConfigKeyL( *codec ) );
+    EUNIT_ASSERT( !codec->iConfigKey )
+    EUNIT_ASSERT( !iLiveSession->iStoreEncoderConfigInfo )
+    CRepository::iForceFailWithCode = KErrNone;
+    
+    // No entry in CenRep, nothing happens
+    iLiveSession->SetCodecConfigKeyL( *codec );
+    EUNIT_ASSERT( !codec->iConfigKey )
+    EUNIT_ASSERT( !iLiveSession->iStoreEncoderConfigInfo )
+    
+    // Empty entry in CenRep
+    CRepository::SetStubAvcConfigKeysL( KNullDesC8() );
+    iLiveSession->SetCodecConfigKeyL( *codec );
+    EUNIT_ASSERT( !codec->iConfigKey )
+    EUNIT_ASSERT( iLiveSession->iStoreEncoderConfigInfo )
+    iLiveSession->iStoreEncoderConfigInfo = EFalse; // emulate original situation
+    
+    // Entry in CenRep
+    CRepository::SetStubAvcConfigKeysL( KMusAvcBitrateLevel_1b_ConfigKey );
+    iLiveSession->SetCodecConfigKeyL( *codec );
+    EUNIT_ASSERT( codec->iConfigKey )
+    HBufC8* key = codec->ConfigKeyL();
+    CleanupStack::PushL( key );
+    EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1bTestText() )
+    CleanupStack::PopAndDestroy( key );
+    EUNIT_ASSERT( !iLiveSession->iStoreEncoderConfigInfo )
+    
+    CleanupStack::PopAndDestroy( codec );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_ReadCodecConfigKeyLL()
+    {
+    HBufC8* key( NULL );
+    
+    // Try with H263, leave expected
+    CMceVideoCodec* codecH263 = CMceH263Codec::NewLC( KMceSDPNameH263() );  
+    EUNIT_ASSERT_LEAVE( key = iLiveSession->ReadCodecConfigKeyL( *codecH263 ) )
+    CleanupStack::PopAndDestroy( codecH263 );
+    
+    // Try without an entry in CenRep, leave expected
+    CMceVideoCodec* codec = CMceAvcCodec::NewLC( KMceSDPNameH264() );
+    codec->SetAllowedBitrates( 0 | KMceAvcBitrateLevel1 );
+    EUNIT_ASSERT_LEAVE( key = iLiveSession->ReadCodecConfigKeyL( *codec ) )
+
+    // Create CenRep entry which does not include wanted bitrate, NULL value
+    // expected
+    CRepository::SetStubAvcConfigKeysL( KMusAvcBitrateLevel1bTestText() );
+    key = iLiveSession->ReadCodecConfigKeyL( *codec );
+    EUNIT_ASSERT( !key )
+    
+    // Create entry with all AVC keys and try with all the values
+    CRepository::SetStubAvcConfigKeysL( KMusAvcAllLevelsConcatenation() );                           
+    
+    // KMceAvcBitrateLevel1
+    key = iLiveSession->ReadCodecConfigKeyL( *codec );
+    EUNIT_ASSERT( key );
+    CleanupStack::PushL( key );
+    EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1TestText );
+    CleanupStack::PopAndDestroy( key );
+    
+    // KMceAvcBitrateLevel1b
+    codec->SetAllowedBitrates( KMceAvcBitrateLevel1b );
+    key = iLiveSession->ReadCodecConfigKeyL( *codec );
+    EUNIT_ASSERT( key );
+    CleanupStack::PushL( key );
+    EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1bTestText );
+    CleanupStack::PopAndDestroy( key );
+    
+    // KMceAvcBitrateLevel1_1
+    codec->SetAllowedBitrates( KMceAvcBitrateLevel1_1 );
+    key = iLiveSession->ReadCodecConfigKeyL( *codec );
+    EUNIT_ASSERT( key );
+    CleanupStack::PushL( key );
+    EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1_1TestText );
+    CleanupStack::PopAndDestroy( key );
+    
+    // KMceAvcBitrateLevel1_2
+    codec->SetAllowedBitrates( KMceAvcBitrateLevel1_2 );
+    key = iLiveSession->ReadCodecConfigKeyL( *codec );
+    EUNIT_ASSERT( key );
+    CleanupStack::PushL( key );
+    EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1_2TestText );
+    CleanupStack::PopAndDestroy( key );
+    
+    // KMceAvcBitrateLevel1_3
+    codec->SetAllowedBitrates( KMceAvcBitrateLevel1_3 );
+    key = iLiveSession->ReadCodecConfigKeyL( *codec );
+    EUNIT_ASSERT( key );
+    CleanupStack::PushL( key );
+    EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1_3TestText );
+    CleanupStack::PopAndDestroy( key );
+    
+    // KMceAvcBitrateLevel2
+    codec->SetAllowedBitrates( KMceAvcBitrateLevel2 );
+    key = iLiveSession->ReadCodecConfigKeyL( *codec );
+    EUNIT_ASSERT( key );
+    CleanupStack::PushL( key );
+    EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel2TestText );
+    CleanupStack::PopAndDestroy( key );
+   
+    CleanupStack::PopAndDestroy( codec );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_StoreEncoderConfigInfoLL()
+    {
+    CRepository::iStaticWriteAvcKeysToStaticData = ETrue;
+    
+    // Try with clean CenRep
+    MultimediaSharingSettings::SetEncoderConfigInfoL( KNullDesC8() );   
+    
+    ESTABLISH_OUT_SESSION( iLiveSession ) // calls StoreEncoderConfigInfoL
+    // If StoreEncoderConfigInfoL leaves with KErrNoMemory,
+    // MMusEngSessionObserver::SessionFailed will be called.
+    if ( iLcSessionObserver->iCalledFunction == CLcSessionObserverStub::ESessionFailed )
+        {
+        User::Leave( KErrNoMemory );
+        }
+
+    HBufC8* keys = MultimediaSharingSettings::EncoderConfigInfoLC();    
+    EUNIT_ASSERT_EQUALS( *keys, KMusAvcBitrateLevel_1b_ConfigKey() )
+    CleanupStack::PopAndDestroy( keys );
+    
+    // Try without a clean CenRep 
+    MultimediaSharingSettings::SetEncoderConfigInfoL(
+                                        KMusAvcBitrateLevel_1_1_ConfigKey() );   
+    
+    delete iLiveSession;
+    iLiveSession = NULL;
+    iLiveSession = CMusEngLiveSession::NewL();
+    iLiveSession->SetLcSessionObserver( iLcSessionObserver );
+    iLiveSession->SetLcUiProvider( iLcUiProvider );
+    
+    ESTABLISH_OUT_SESSION( iLiveSession ) // calls StoreEncoderConfigInfoL
+    // If StoreEncoderConfigInfoL leaves with KErrNoMemory,
+    // MMusEngSessionObserver::SessionFailed will be called.
+    if ( iLcSessionObserver->iCalledFunction == CLcSessionObserverStub::ESessionFailed )
+        {
+        User::Leave( KErrNoMemory );
+        }
+                     
+    keys = MultimediaSharingSettings::EncoderConfigInfoLC();
+    EUNIT_ASSERT_EQUALS( *keys, 
+                         KMusAvcBitrateLevels_1_1_And_1b_ConfigKeys() )
+    CleanupStack::PopAndDestroy( keys );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_StreamStreamingL()
     {
-    for ( TInt i = 0; i < aSession.Streams().Count(); ++i )
-            {
-            for ( TInt j = 0; j < aSession.Streams()[i]->Sinks().Count(); ++j )
-                {
-                if ( aSession.Streams()[i]->Sinks()[j]->Type() == KMceSpeakerSink )
-                    {
-                    CMceSpeakerSink* speaker = static_cast<CMceSpeakerSink*>(
-                                                aSession.Streams()[i]->Sinks()[j] );
-                    speaker->iMaxVolume = aMaxVol;
-                    }
-                }
-            } 
+    // Wrong stream type, no callbacks to MLcSessionObserver
+    CMceAudioStream* audioStream = CMceAudioStream::NewLC();
+    iLiveSession->StreamStreaming( *audioStream );
+    CleanupStack::PopAndDestroy( audioStream );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() )
+    
+    // Wrong state, no callbacks to MLcSessionObserver
+    CMceVideoStream* videoStream = CMceVideoStream::NewLC();
+    videoStream->iState = CMceMediaStream::EIdle;
+    iLiveSession->StreamStreaming( *videoStream );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() )
+    
+    // Receive session, RTP source and remote player present
+    iLcSessionObserver->Reset();
+    videoStream->iState = CMceMediaStream::EStreaming;
+    CMceRtpSource* rtpSource = CMceRtpSource::NewLC();
+    videoStream->SetSourceL( rtpSource );
+    CleanupStack::Pop( rtpSource );
+    iReceiveSession->StreamStreaming( *videoStream );
+    EUNIT_ASSERT_EQUALS( 
+        TInt( CLcSessionObserverStub::EPlayerStateChanged ),
+        iLcSessionObserver->iCalledFunction )
+    EUNIT_ASSERT_EQUALS( 
+        iReceiveSession->RemoteVideoPlayer(),
+        iLcSessionObserver->iCurrentPlayer )
+    
+    // Live session, RTP sink and local player present
+    iLcSessionObserver->Reset();
+    videoStream->SetSourceL( NULL );
+    CMceRtpSink* rtpSink = CMceRtpSink::NewLC();
+    videoStream->AddSinkL( rtpSink );
+    CleanupStack::Pop( rtpSink );
+    iLiveSession->StreamStreaming( *videoStream );
+    EUNIT_ASSERT_EQUALS( 
+        TInt( CLcSessionObserverStub::EPlayerStateChanged ),
+        iLcSessionObserver->iCalledFunction )
+    EUNIT_ASSERT_EQUALS( 
+        iLiveSession->LocalVideoPlayer(),
+        iLcSessionObserver->iCurrentPlayer )
+
+    // Live session, RTP sink present, but no local player
+    iLcSessionObserver->Reset();
+    delete iLiveSession->iLiveVideoPlayer;
+    iLiveSession->iLiveVideoPlayer = NULL;
+    iLiveSession->StreamStreaming( *videoStream );
+    EUNIT_ASSERT( iLcSessionObserver->IsReseted() )
+        
+    CleanupStack::PopAndDestroy( videoStream );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_InformObserverAboutSessionStateChangeL()
+    {
+    // Observer does not exist
+    iLiveSession->SetLcSessionObserver( NULL );
+    iLiveSession->InformObserverAboutSessionStateChange();
+    EUNIT_ASSERT_EQUALS( 
+        CLcSessionObserverStub::EUnknown, 
+        iLcSessionObserver->iCalledFunction )
+    
+    // Observer exists
+    iLiveSession->SetLcSessionObserver( iLcSessionObserver );
+    iLiveSession->InformObserverAboutSessionStateChange();
+    EUNIT_ASSERT_EQUALS( 
+        CLcSessionObserverStub::ESessionStateChanged, 
+        iLcSessionObserver->iCalledFunction )  
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_InformObserverAboutSessionUpdateL()
+    {
+    // Observer does not exist
+    iLiveSession->SetLcSessionObserver( NULL );
+    iLiveSession->InformObserverAboutSessionUpdate();
+    EUNIT_ASSERT_EQUALS( 
+        CLcSessionObserverStub::EUnknown, 
+        iLcSessionObserver->iCalledFunction )    
+       
+    // Observer exists
+    iLiveSession->SetLcSessionObserver( iLcSessionObserver );
+    iLiveSession->InformObserverAboutSessionUpdate();
+    EUNIT_ASSERT_EQUALS( 
+        CLcSessionObserverStub::ESessionUpdated, 
+        iLcSessionObserver->iCalledFunction )
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_InformObserverAboutSessionFailureL()
+    {
+    // Observer does not exist
+    iLiveSession->SetLcSessionObserver( NULL );
+    iLiveSession->InformObserverAboutSessionFailure( KErrGeneral );
+    EUNIT_ASSERT_EQUALS( 
+        CLcSessionObserverStub::EUnknown, 
+        iLcSessionObserver->iCalledFunction )
+    EUNIT_ASSERT_EQUALS( KErrNone, iLcSessionObserver->iError )    
+    
+    // Observer exists
+    iLiveSession->SetLcSessionObserver( iLcSessionObserver );
+    iLiveSession->InformObserverAboutSessionFailure( KErrGeneral );
+    EUNIT_ASSERT_EQUALS( 
+        CLcSessionObserverStub::ESessionFailed, 
+        iLcSessionObserver->iCalledFunction )
+    EUNIT_ASSERT_EQUALS( KErrGeneral, iLcSessionObserver->iError )
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_InformObserverAboutPlayerStateChangeL()
+    {
+    // Observer does not exist
+    iLiveSession->SetLcSessionObserver( NULL );
+    iLiveSession->InformObserverAboutPlayerStateChange( NULL );
+    EUNIT_ASSERT_EQUALS( 
+        CLcSessionObserverStub::EUnknown, 
+        iLcSessionObserver->iCalledFunction )    
+    
+    // Observer exists, but the player is NULL
+    iLiveSession->SetLcSessionObserver( iLcSessionObserver );
+    iLiveSession->InformObserverAboutPlayerStateChange( NULL );
+    EUNIT_ASSERT_EQUALS( 
+        CLcSessionObserverStub::EUnknown, 
+        iLcSessionObserver->iCalledFunction )    
+    
+    // Both observer and player exist
+    iLiveSession->InformObserverAboutPlayerStateChange( 
+        iLiveSession->LocalVideoPlayer() );
+    EUNIT_ASSERT_EQUALS( 
+        CLcSessionObserverStub::EPlayerStateChanged, 
+        iLcSessionObserver->iCalledFunction )
     }
- 
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_InformObserverAboutPlayerUpdateL()
+    {
+    // Observer does not exist
+    iLiveSession->SetLcSessionObserver( NULL );
+    iLiveSession->InformObserverAboutPlayerUpdate( NULL );
+    EUNIT_ASSERT_EQUALS( 
+        CLcSessionObserverStub::EUnknown, 
+        iLcSessionObserver->iCalledFunction )    
+    
+    // Observer exists, but the player is NULL
+    iLiveSession->SetLcSessionObserver( iLcSessionObserver );
+    iLiveSession->InformObserverAboutPlayerUpdate( NULL );
+    EUNIT_ASSERT_EQUALS( 
+        CLcSessionObserverStub::EUnknown, 
+        iLcSessionObserver->iCalledFunction )    
+    
+    // Both observer and player exist
+    iLiveSession->InformObserverAboutPlayerUpdate( 
+        iLiveSession->LocalVideoPlayer() );
+    EUNIT_ASSERT_EQUALS( 
+        CLcSessionObserverStub::EPlayerUpdated, 
+        iLcSessionObserver->iCalledFunction )
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_InformObserverAboutPlayerFailureL()
+    {
+    // Observer does not exist
+    iLiveSession->SetLcSessionObserver( NULL );
+    iLiveSession->InformObserverAboutPlayerFailure( NULL, KErrGeneral );
+    EUNIT_ASSERT_EQUALS( 
+        CLcSessionObserverStub::EUnknown, 
+        iLcSessionObserver->iCalledFunction )
+    EUNIT_ASSERT_EQUALS( KErrNone, iLcSessionObserver->iError )
+    
+    // Observer exists, but the player is NULL
+    iLiveSession->SetLcSessionObserver( iLcSessionObserver );
+    iLiveSession->InformObserverAboutPlayerFailure( NULL, KErrGeneral );
+    EUNIT_ASSERT_EQUALS( 
+        CLcSessionObserverStub::EUnknown, 
+        iLcSessionObserver->iCalledFunction )
+    EUNIT_ASSERT_EQUALS( KErrNone, iLcSessionObserver->iError )
+    
+    // Both observer and player exist
+    iLiveSession->InformObserverAboutPlayerFailure( 
+        iLiveSession->LocalVideoPlayer(), KErrGeneral );
+    EUNIT_ASSERT_EQUALS( 
+        CLcSessionObserverStub::EPlayerFailed, 
+        iLcSessionObserver->iCalledFunction )
+    EUNIT_ASSERT_EQUALS( KErrGeneral, iLcSessionObserver->iError )
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_LcUiProviderL()
+    {
+    // Provider does not exist 
+    iLiveSession->SetLcUiProvider( NULL );
+    EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->LcUiProviderL(), KErrNotReady )
+    
+    // Provider exists
+    iLiveSession->SetLcUiProvider( iLcUiProvider  );
+    EUNIT_ASSERT( &iLiveSession->LcUiProviderL() == iLcUiProvider )
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UI_IsBackgroundStartupL()
+    {
+    // fast mode is not defined
+    EUNIT_ASSERT( !iLiveSession->IsBackgroundStartup() )
+    
+    // fast mode is Off
+    User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid,
+                                        NMusSessionApi::KFastMode,
+                                        1 ) );
+
+    EUNIT_ASSERT( !iLiveSession->IsBackgroundStartup() )
+
+    // fast mode is On
+    // Bg value would be set to true at session contruct phase if property
+    // is set to EFastModeOn at that time.
+    iLiveSession->iBackground = ETrue;
+    User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid,
+                                        NMusSessionApi::KFastMode,
+                                        0 ) );
+
+    EUNIT_ASSERT( iLiveSession->IsBackgroundStartup() )    
+    
+    // Ensure after session recreation fast mode is off 
+    delete iLiveSession;
+    iLiveSession = NULL;
+    iLiveSession = CMusEngLiveSession::NewL();
+    EUNIT_ASSERT( !iLiveSession->IsBackgroundStartup() ) 
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_InformUiProviderAboutReceivingStartL()
+    {
+    // Observer does not exist
+    iLiveSession->SetLcUiProvider( NULL );
+    iLiveSession->InformUiProviderAboutReceivingStart();
+    EUNIT_ASSERT_EQUALS( TInt( CLcUiProviderStub::EUnknown ), 
+                         iLcUiProvider->iCalledFunction )
+    
+    // Observer exists, but we are on foreground (fast mode is off)
+    iLiveSession->SetLcUiProvider( iLcUiProvider );
+    iLiveSession->InformUiProviderAboutReceivingStart();
+    EUNIT_ASSERT_EQUALS( TInt( CLcUiProviderStub::EUnknown ), 
+                         iLcUiProvider->iCalledFunction )
+    
+    // Observer exists, we are on background
+    iLiveSession->iBackground = ETrue;
+    EUNIT_ASSERT( !iLcUiProvider->iForeground )
+    iLiveSession->InformUiProviderAboutReceivingStart();
+    EUNIT_ASSERT_EQUALS( TInt( CLcUiProviderStub::EHandleForegroundStatus ),
+                         iLcUiProvider->iCalledFunction )
+    EUNIT_ASSERT( iLcUiProvider->iForeground ) 
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_SetForegroundStatusL()
+    {
+    iLiveSession->iBackground = ETrue;
+    EUNIT_ASSERT( iLiveSession->SetForegroundStatus( ETrue ) == KErrNone );
+    EUNIT_ASSERT( !iLiveSession->iBackground );
+    EUNIT_ASSERT( iLiveSession->SetForegroundStatus( EFalse ) == KErrNone );
+    EUNIT_ASSERT( !iLiveSession->iBackground ); // Still bg
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngMceSession::UT_UpdateLcSessionLL()
+    {
+    // No MCE session
+    EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->UpdateLcSessionL(), KErrNotReady )
+        
+    ESTABLISH_OUT_SESSION( iLiveSession );
+    
+    iLiveSession->UpdateLcSessionL();
+    
+    }
+
 //  TEST TABLE
 
 EUNIT_BEGIN_TEST_TABLE(
@@ -1842,264 +2478,442 @@
     "UNIT" )
 
 EUNIT_TEST(
-    "TerminateL - test ",
+    "LcSessionState - test ",
+    "CMusEngMceSession",
+    "LcSessionState",
+    "FUNCTIONALITY",
+    SetupL, UT_LcSessionStateL, Teardown)
+        
+EUNIT_TEST(
+    "RemoteVideoPlayer - test ",
+    "CMusEngMceSession",
+    "RemoteVideoPlayer",
+    "FUNCTIONALITY",
+    SetupL, UT_RemoteVideoPlayerL, Teardown)
+        
+EUNIT_TEST(
+    "LocalVideoPlayer - test ",
+    "CMusEngMceSession",
+    "LocalVideoPlayer",
+    "FUNCTIONALITY",
+    SetupL, UT_LocalVideoPlayerL, Teardown) 
+        
+EUNIT_TEST(
+    "LocalDisplayNameL - test ",
+    "CMusEngMceSession",
+    "LocalDisplayNameL",
+    "FUNCTIONALITY",
+    SetupL, UT_LocalDisplayNameL, Teardown)
+
+EUNIT_TEST(
+    "RemoteDisplayName - test ",
+    "CMusEngMceSession",
+    "RemoteDisplayName",
+    "FUNCTIONALITY",
+    SetupL, UT_RemoteDisplayNameL, Teardown)
+    
+EUNIT_TEST(
+    "RemoteDetails - test ",
+    "CMusEngMceSession",
+    "RemoteDetails",
+    "FUNCTIONALITY",
+    SetupL, UT_RemoteDetailsL, Teardown)
+
+EUNIT_TEST(
+    "SetParameter - test ",
     "CMusEngMceSession",
-    "TerminateL",
+    "SetParameter",
+    "FUNCTIONALITY",
+    SetupL, UT_SetParameterL, Teardown)
+        
+EUNIT_TEST(
+    "ParameterValue - test ",
+    "CMusEngMceSession",
+    "ParameterValue",
+    "FUNCTIONALITY",
+    SetupL, UT_ParameterValueL, Teardown)    
+        
+EUNIT_TEST(
+    "IsLcAudioMutedL - test ",
+    "CMusEngMceSession",
+    "IsLcAudioMutedL",
+    "FUNCTIONALITY",
+    SetupL, UT_IsLcAudioMutedL, Teardown)
+        
+EUNIT_TEST(
+    "MuteLcAudioL - test ",
+    "CMusEngMceSession",
+    "MuteLcAudioL",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_TerminateLL, Teardown)
+    SetupL, UT_MuteLcAudioL, Teardown)    
+
+EUNIT_TEST(
+    "MuteLcMicL - test ",
+    "CMusEngMceSession",
+    "MuteLcMicL",
+    "FUNCTIONALITY",
+    SetupL, UT_MuteLcMicL, Teardown)
+        
+EUNIT_TEST(
+    "EnableLcLoudspeakerL - test ",
+    "CMusEngMceSession",
+    "EnableLcLoudspeakerL",
+    "FUNCTIONALITY",
+    SetupL, UT_EnableLcLoudspeakerL, Teardown)
+        
+EUNIT_TEST(
+    "SetLcVolumeL - test ",
+    "CMusEngMceSession",
+    "SetLcVolumeL",
+    "FUNCTIONALITY",
+    SetupL, UT_SetLcVolumeL, Teardown)
 
 EUNIT_TEST(
     "GetSessionTime - test ",
     "CMusEngMceSession",
     "GetSessionTime",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_GetSessionTimeL, Teardown)
-
-EUNIT_TEST(
-    "ConnectionActive - test ",
-    "CMusEngMceSession",
-    "ConnectionActive",
-    "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_ConnectionActiveL, Teardown) 
-
-EUNIT_TEST(
-    "ContainsAudioL - test ",
-    "CMusEngMceSession",
-    "ContainsAudioL",
-    "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_ContainsAudioLL, Teardown) 
-
-EUNIT_TEST(
-    "IsMutedL - test ",
-    "CMusEngMceSession",
-    "IsMutedL",
-    "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_IsMutedLL, Teardown) 
-
-EUNIT_TEST(
-    "OrientationL - test ",
-    "CMusEngMceSession",
-    "OrientationL",
-    "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_OrientationLL, Teardown) 
-
-EUNIT_TEST(
-    "SetOrientationL - test ",
-    "CMusEngMceSession",
-    "SetOrientationL",
-    "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_SetOrientationLL, Teardown) 
-    
-EUNIT_TEST(
-    "VolumeUpL - test ",
-    "CMusEngMceSession",
-    "VolumeUpL",
-    "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_VolumeUpLL, Teardown) 
-
-EUNIT_TEST(
-    "VolumeDownL - test ",
-    "CMusEngMceSession",
-    "VolumeDownL",
-    "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_VolumeDownLL, Teardown) 
-
-EUNIT_TEST(
-    "SetVolumeL - test ",
-    "CMusEngMceSession",
-    "SetVolumeL",
-    "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_SetVolumeLL, Teardown)
-    
-EUNIT_TEST(
-    "EnableDisplay - test ",
-    "CMusEngMceSession",
-    "EnableDisplay",
-    "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_EnableDisplayL, Teardown)   
-
-EUNIT_TEST(
-    "MuteL - test ",
-    "CMusEngMceSession",
-    "MuteL",
-    "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_MuteLL, Teardown)   
-
-EUNIT_TEST(
-    "UnmuteL - test ",
-    "CMusEngMceSession",
-    "UnmuteL",
-    "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_UnmuteLL, Teardown)   
+    SetupL, UT_GetSessionTimeL, Teardown)   
 
 EUNIT_TEST(
     "HandleTermination - test ",
     "CMusEngMceSession",
     "HandleTermination",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_HandleTerminationL, Teardown)   
+    SetupL, UT_HandleTerminationL, Teardown)   
 
 EUNIT_TEST(
     "AdjustVideoCodecL - test ",
     "CMusEngMceSession",
     "AdjustVideoCodecL",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_AdjustVideoCodecLL, Teardown) 
+    SetupL, UT_AdjustVideoCodecL, Teardown) 
 
 EUNIT_TEST(
     "AdjustAudioCodecL - test ",
     "CMusEngMceSession",
     "AdjustAudioCodecL",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_AdjustAudioCodecLL, Teardown) 
+    SetupL, UT_AdjustAudioCodecL, Teardown) 
     
 EUNIT_TEST(
     "RectChangedL - test ",
     "CMusEngMceSession",
     "RectChangedL",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_RectChangedLL, Teardown) 
+    SetupL, UT_RectChangedL, Teardown) 
 
 EUNIT_TEST(
     "SetSessionSdpLinesL - test ",
     "CMusEngMceSession",
     "SetSessionSdpLinesL",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_SetSessionSdpLinesLL, Teardown) 
+    SetupL, UT_SetSessionSdpLinesL, Teardown) 
 
 EUNIT_TEST(
+    "SetSessionSdpLinesL - operator variant test ",
+    "CMusEngMceSession",
+    "SetSessionSdpLinesL",
+    "FUNCTIONALITY",
+    SetupL, UT_SetSessionSdpLines_OperatorL, Teardown)
+    
+EUNIT_TEST(
+    "SetMediaSdpLinesL - test ",
+    "CMusEngMceSession",
+    "SetMediaSdpLinesL",
+    "FUNCTIONALITY",
+    SetupL, UT_SetMediaSdpLinesL, Teardown) 
+
+EUNIT_TEST(
+    "SetMediaSdpLinesL - operator variant test ",
+    "CMusEngMceSession",
+    "SetMediaSdpLinesL",
+    "FUNCTIONALITY",
+    SetupL, UT_SetMediaSdpLines_OperatorL, Teardown) 
+    
+EUNIT_TEST(
     "AdjustStreamsAndCodecsL - test ",
     "CMusEngMceSession",
     "AdjustStreamsAndCodecsL",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_AdjustStreamsAndCodecsLL, Teardown)
+    SetupL, UT_AdjustStreamsAndCodecsL, Teardown)
 
 EUNIT_TEST(
     "IncomingSession - test ",
     "CMusEngMceSession",
     "IncomingSession",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_IncomingSessionL, Teardown)          
+    SetupL, UT_IncomingSessionL, Teardown)          
 
 EUNIT_TEST(
     "IncomingUpdate - test ",
     "CMusEngMceSession",
     "IncomingUpdate",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_IncomingUpdateL, Teardown)      
+    SetupL, UT_IncomingUpdateL, Teardown)      
 
 EUNIT_TEST(
     "StreamStateChangedL( source ) - test ",
     "CMusEngMceSession",
     "StreamStateChangedL( source )",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_StreamStateChangedWithSourceL, Teardown)          
+    SetupL, UT_StreamStateChangedWithSourceL, Teardown)          
 
 EUNIT_TEST(
     "SessionStateChanged - test ",
     "CMusEngMceSession",
     "SessionStateChanged",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_SessionStateChangedL, Teardown) 
+    SetupL, UT_SessionStateChangedL, Teardown)
+    
+EUNIT_TEST(
+    "HandleSessionStateChanged - encoder key storing ",
+    "CMusEngMceSession",
+    "HandleSessionStateChanged",
+    "FUNCTIONALITY",
+    SetupL, UT_HandleSessionStateChanged_EncoderKeyStoringL, Teardown)
     
 EUNIT_TEST(
     "SessionConnectionStateChanged - test ",
     "CMusEngMceSession",
     "SessionConnectionStateChanged",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_SessionConnectionStateChangedL, Teardown) 
+    SetupL, UT_SessionConnectionStateChangedL, Teardown) 
 
 EUNIT_TEST(
     "Failed - test ",
     "CMusEngMceSession",
     "Failed",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_FailedL, Teardown)     
+    SetupL, UT_FailedL, Teardown)     
 
 EUNIT_TEST(
     "UpdateFailed - test ",
     "CMusEngMceSession",
     "UpdateFailed",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_UpdateFailedL, Teardown) 
+    SetupL, UT_UpdateFailedL, Teardown) 
 
 EUNIT_TEST(
     "StreamStateChanged - test ",
     "CMusEngMceSession",
     "StreamStateChanged",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_StreamStateChangedL, Teardown)             
+    SetupL, UT_StreamStateChangedL, Teardown)             
 
 EUNIT_TEST(
     "StreamStateChangedL (sink ) - test ",
     "CMusEngMceSession",
     "StreamStateChangedL( sink )",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_StreamStateChangedWithSinkL, Teardown) 
+    SetupL, UT_StreamStateChangedWithSinkL, Teardown) 
 
 EUNIT_TEST(
     "SRReceived - test ",
     "CMusEngMceSession",
     "SRReceived",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_SRReceivedL, Teardown)     
+    SetupL, UT_SRReceivedL, Teardown)     
 
 EUNIT_TEST(
     "RRReceived - test ",
     "CMusEngMceSession",
     "RRReceived",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_RRReceivedL, Teardown) 
-
-EUNIT_TEST(
-    "InactivityTimeout - test ",
-    "CMusEngMceSession",
-    "InactivityTimeout",
-    "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_InactivityTimeoutL, Teardown)     
+    SetupL, UT_RRReceivedL, Teardown) 
 
 EUNIT_TEST(
     "SsrcAdded - test ",
     "CMusEngMceSession",
     "SsrcAdded",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_SsrcAddedL, Teardown) 
+    SetupL, UT_SsrcAddedL, Teardown) 
 
 EUNIT_TEST(
     "SsrcRemoved - test ",
     "CMusEngMceSession",
     "SsrcRemoved",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_SsrcRemovedL, Teardown)         
-EUNIT_TEST(
-    "IsDisplayEnabledL - test ",
-    "CMusEngMceSession",
-    "IsDisplayEnabledL",
-    "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_IsDisplayEnabledLL, Teardown)  	
+    SetupL, UT_SsrcRemovedL, Teardown)         
 
 EUNIT_TEST(
     "UpdateTimerEvent - test ",
     "CMusEngMceSession",
     "UpdateTimerEvent",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_UpdateTimerEventL, Teardown)              
+    SetupL, UT_UpdateTimerEventL, Teardown)              
 
 EUNIT_TEST(
     "IsRoamingBetweenAPsAllowed - test ",
     "CMusEngMceSession",
     "IsRoamingBetweenAPsAllowed",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_IsRoamingBetweenAPsAllowedL, Teardown)
-        
+    SetupL, UT_IsRoamingBetweenAPsAllowedL, Teardown)
+
+EUNIT_TEST(
+    "SaveContactL - test ",
+    "CMusEngMceSession",
+    "SaveContactL",
+    "FUNCTIONALITY",
+    SetupL, UT_SaveContactL, Teardown)    
+
+EUNIT_TEST(
+    "Rect - test ",
+    "CMusEngMceSession",
+    "Rect",
+    "FUNCTIONALITY",
+    SetupL, UT_RectL, Teardown)
+
+EUNIT_TEST(
+    "SetRectL - test ",
+    "CMusEngMceSession",
+    "SetRectL",
+    "FUNCTIONALITY",
+    SetupL, UT_SetRectLL, Teardown)
+
+EUNIT_TEST(
+    "SecondaryRect - test ",
+    "CMusEngMceSession",
+    "SecondaryRect",
+    "FUNCTIONALITY",
+    SetupL, UT_SecondaryRectL, Teardown)
+
+EUNIT_TEST(
+    "SetSecondaryRectL - test ",
+    "CMusEngMceSession",
+    "SetSecondaryRectL",
+    "FUNCTIONALITY",
+    SetupL, UT_SetSecondaryRectLL, Teardown)
+
 EUNIT_TEST(
-    "VolumeChanged - test ",
+    "EnableDisplayL - test ",
+    "CMusEngMceSession",
+    "EnableDisplayL",
+    "FUNCTIONALITY",
+    SetupL, UT_EnableDisplayLL, Teardown)
+    
+EUNIT_TEST(
+    "SetOrientationL - test ",
+    "CMusEngMceSession",
+    "SetOrientationL",
+    "FUNCTIONALITY",
+    SetupL, UT_CMusEngMceSession_SetOrientationLL, Teardown) 
+
+EUNIT_TEST(
+    "SetEncodingDeviceL - test ",
+    "CMusEngMceSession",
+    "SetEncodingDeviceL",
+    "FUNCTIONALITY",
+    SetupL, UT_SetEncodingDeviceLL, Teardown)   
+
+EUNIT_TEST(
+    "SetCodecConfigKeyL - test ",
+    "CMusEngMceSession",
+    "SetCodecConfigKeyL",
+    "FUNCTIONALITY",
+    SetupL, UT_SetCodecConfigKeyLL, Teardown)    
+
+EUNIT_TEST(
+    "ReadCodecConfigKeyL - test ",
+    "CMusEngMceSession",
+    "ReadCodecConfigKeyL",
+    "FUNCTIONALITY",
+    SetupL, UT_ReadCodecConfigKeyLL, Teardown)        
+
+EUNIT_TEST(
+    "StoreEncoderConfigInfoL - test ",
+    "CMusEngMceSession",
+    "StoreEncoderConfigInfoL",
+    "FUNCTIONALITY",
+    SetupL, UT_StoreEncoderConfigInfoLL, Teardown)   
+
+EUNIT_TEST(
+    "StreamStreaming - test ",
     "CMusEngMceSession",
-    "VolumeChanged",
+    "StreamStreaming",
+    "FUNCTIONALITY",
+    SetupL, UT_StreamStreamingL, Teardown)   
+   
+EUNIT_TEST(
+    "InformObserverAboutSessionStateChange - test ",
+    "CMusEngMceSession",
+    "InformObserverAboutSessionStateChange",
+    "FUNCTIONALITY",
+    SetupL, UT_InformObserverAboutSessionStateChangeL, Teardown)
+
+EUNIT_TEST(
+    "InformObserverAboutSessionUpdate - test ",
+    "CMusEngMceSession",
+    "InformObserverAboutSessionUpdate",
+    "FUNCTIONALITY",
+    SetupL, UT_InformObserverAboutSessionUpdateL, Teardown)
+
+EUNIT_TEST(
+    "InformObserverAboutSessionFailure - test ",
+    "CMusEngMceSession",
+    "InformObserverAboutSessionFailure",
+    "FUNCTIONALITY",
+    SetupL, UT_InformObserverAboutSessionFailureL, Teardown)
+
+EUNIT_TEST(
+    "InformObserverAboutPlayerStateChange - test ",
+    "CMusEngMceSession",
+    "InformObserverAboutPlayerStateChange",
+    "FUNCTIONALITY",
+    SetupL, UT_InformObserverAboutPlayerStateChangeL, Teardown)
+
+EUNIT_TEST(
+    "InformObserverAboutPlayerUpdate - test ",
+    "CMusEngMceSession",
+    "InformObserverAboutPlayerUpdate",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngMceSession_VolumeChangedL, Teardown)
+    SetupL, UT_InformObserverAboutPlayerUpdateL, Teardown)
+
+EUNIT_TEST(
+    "InformObserverAboutPlayerFailure - test ",
+    "CMusEngMceSession",
+    "InformObserverAboutPlayerFailure",
+    "FUNCTIONALITY",
+    SetupL, UT_InformObserverAboutPlayerFailureL, Teardown)
     
+EUNIT_TEST(
+    "LcUiProviderL - test ",
+    "CMusEngMceSession",
+    "LcUiProviderL",
+    "FUNCTIONALITY",
+    SetupL, UT_LcUiProviderL, Teardown)
 
+EUNIT_TEST(
+    "IsBackgroundStartup - test ",
+    "CMusEngMceSession",
+    "IsBackgroundStartup",
+    "FUNCTIONALITY",
+    SetupL, UI_IsBackgroundStartupL, Teardown)
+
+EUNIT_TEST(
+    "InformUiProviderAboutReceivingStart - test ",
+    "CMusEngMceSession",
+    "InformUiProviderAboutReceivingStart",
+    "FUNCTIONALITY",
+    SetupL, UT_InformUiProviderAboutReceivingStartL, Teardown)
+
+EUNIT_TEST(
+    "SetForegroundStatus - test ",
+    "CMusEngMceSession",
+    "SetForegroundStatus",
+    "FUNCTIONALITY",
+    SetupL, UT_SetForegroundStatusL, Teardown)
+    
+EUNIT_TEST(
+    "UpdateLcSessionL - test ",
+    "CMusEngMceSession",
+    "UpdateL",
+    "FUNCTIONALITY",
+    SetupL, UT_UpdateLcSessionLL, Teardown)
+
+    
 EUNIT_END_TEST_TABLE
 
 //  END OF FILE
+
+