Revision: 201015 RCL_3 PDK_3.0.i
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 27 Apr 2010 16:34:37 +0300
branchRCL_3
changeset 21 a1247965635c
parent 18 c54d95799c80
child 26 70a8526f03f2
Revision: 201015 Kit: 201017
mpxmusicplayer/app/inc/mpxappui.h
mpxmusicplayer/app/src/mpxPDcommandhandler.cpp
mpxmusicplayer/app/src/mpxappui.cpp
mpxmusicplayer/commonui/inc/mpxfilenamequerydlg.h
mpxmusicplayer/commonui/src/mpxcommonuihelper.cpp
mpxmusicplayer/commonui/src/mpxfilenamequerydlg.cpp
mpxmusicplayer/mediakeyhandler/src/mpxmediakeyhandlerimp.cpp
mpxplugins/serviceplugins/collectionplugins/inc/mpxdbmanager.h
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/src/mpxdbmanager.cpp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbabstractalbum.h
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbhandler.h
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbmusic.h
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbpluginqueries.h
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbabstractalbum.cpp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbcategory.cpp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbhandler.cpp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbmusic.cpp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbplugin.cpp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitepodcastdbplugin/inc/mpxdbpodcast.h
mpxplugins/serviceplugins/collectionplugins/mpxsqlitepodcastdbplugin/src/mpxdbpodcast.cpp
mpxplugins/serviceplugins/collectionplugins/mpxsqlitepodcastdbplugin/src/mpxpodcastdbhandler.cpp
mpxplugins/serviceplugins/playbackplugins/localaudio/src/mpxlocalaudioplayback.cpp
mpxplugins/serviceplugins/playbackplugins/progressdownloadsb/inc/mpxprogressdownloadsb.h
mpxplugins/serviceplugins/playbackplugins/progressdownloadsb/src/mpxprogressdownloadsb.cpp
mpxplugins/viewplugins/inc/mpxcommonplaybackviewimp.h
mpxplugins/viewplugins/inc/mpxupnpplaybackdialog.h
mpxplugins/viewplugins/views/collectionview/src/mpxcollectionviewcontainer.cpp
mpxplugins/viewplugins/views/collectionview/src/mpxcollectionviewimp.cpp
mpxplugins/viewplugins/views/collectionviewhg/data/mpxcollectionviewhg.rss
mpxplugins/viewplugins/views/collectionviewhg/group/mpxcollectionviewhg.mmp
mpxplugins/viewplugins/views/collectionviewhg/inc/mpxcollectionviewhgimp.h
mpxplugins/viewplugins/views/collectionviewhg/inc/mpxcollectionviewhgswitchbuffer.h
mpxplugins/viewplugins/views/collectionviewhg/inc/mpxcollectionviewhgtnloader.h
mpxplugins/viewplugins/views/collectionviewhg/inc/mpxselectedalbumhandler.h
mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgcontainer.cpp
mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgimp.cpp
mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgswitchbuffer.cpp
mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgtnloader.cpp
mpxplugins/viewplugins/views/commoncontainer/inc/mpxcommoncontaineravkonimp.h
mpxplugins/viewplugins/views/commoncontainer/inc/mpxcommoncontainerhgimp.h
mpxplugins/viewplugins/views/commoncontainer/src/mpxcommoncontaineravkonimp.cpp
mpxplugins/viewplugins/views/commoncontainer/src/mpxcommoncontainerhgimp.cpp
mpxplugins/viewplugins/views/commoncontainer/src/mpxcommoncontainermediahelper.cpp
mpxplugins/viewplugins/views/commonplaybackview/bwinscw/mpxcommonplaybackviewU.DEF
mpxplugins/viewplugins/views/commonplaybackview/data/mpxcommonplaybackview.rss
mpxplugins/viewplugins/views/commonplaybackview/eabi/mpxcommonplaybackviewU.DEF
mpxplugins/viewplugins/views/commonplaybackview/inc/mpxbuttonmanager.h
mpxplugins/viewplugins/views/commonplaybackview/src/mpxbuttonmanager.cpp
mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewimp.cpp
mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewlayout.cpp
mpxplugins/viewplugins/views/embeddedplaybackview/src/mpxembeddedplaybackviewimp.cpp
mpxplugins/viewplugins/views/embeddedplaybackview/src/mpxembeddedplaybackviewlayout.cpp
mpxplugins/viewplugins/views/inc/mpxcommoncontainer.h
mpxplugins/viewplugins/views/inc/mpxcommonplaybackviewlayout.h
mpxplugins/viewplugins/views/pdplaybackview/inc/mpxpdplaybackviewimp.h
mpxplugins/viewplugins/views/pdplaybackview/src/mpxpdplaybackviewimp.cpp
mpxplugins/viewplugins/views/pdplaybackview/src/mpxpdplaybackviewlayout.cpp
mpxplugins/viewplugins/views/pdsbplaybackview/inc/mpxpdsbplaybackviewimp.h
mpxplugins/viewplugins/views/pdsbplaybackview/src/mpxpdsbplaybackviewimp.cpp
mpxplugins/viewplugins/views/pdsbplaybackview/src/mpxpdsbplaybackviewlayout.cpp
mpxplugins/viewplugins/views/playbackview/src/mpxplaybackviewimp.cpp
mpxplugins/viewplugins/views/playbackview/src/mpxplaybackviewlayout.cpp
mpxplugins/viewplugins/views/podcastplaybackview/inc/mpxpodcastplaybackviewimp.h
mpxplugins/viewplugins/views/podcastplaybackview/src/mpxpodcastplaybackviewimp.cpp
mpxplugins/viewplugins/views/podcastplaybackview/src/mpxpodcastplaybackviewlayout.cpp
mpxplugins/viewplugins/views/podcastview/inc/mpxpodcastcollectionviewimp.h
mpxplugins/viewplugins/views/podcastview/src/mpxpodcastcollectionviewcontainer.cpp
mpxplugins/viewplugins/views/podcastview/src/mpxpodcastcollectionviewimp.cpp
mpxplugins/viewplugins/views/upnpplaybackdialog/src/mpxupnpplaybackdialog.cpp
mpxplugins/viewplugins/views/upnpplaybackdialog/src/mpxupnpplaybackdialoglayout.cpp
mpxplugins/viewplugins/views/upnpplaybackview/src/mpxupnpplaybackviewimp.cpp
mpxplugins/viewplugins/views/upnpplaybackview/src/mpxupnpplaybackviewlayout.cpp
mpxplugins/viewplugins/views/waitnotedialog/inc/mpxscanningdialog.h
mpxplugins/viewplugins/views/waitnotedialog/src/mpxscanningdialog.cpp
mpxplugins/viewplugins/views/waitnotedialog/src/mpxwaitnotedialog.cpp
musichomescreen_multiview/mcpmusicplayer/group/mcpmusicplayer.mmp
musichomescreen_multiview/mcpmusicplayer/inc/mcpmusicplayer.h
musichomescreen_multiview/mcpmusicplayer/src/mcpmusicplayer.cpp
musichomescreen_multiview/musiccontentpublisher/src/musiccontentpublisher.cpp
musicplayer_plat/mpx_music_player_app_api/inc/mpxconstants.h
--- a/mpxmusicplayer/app/inc/mpxappui.h	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxmusicplayer/app/inc/mpxappui.h	Tue Apr 27 16:34:37 2010 +0300
@@ -307,7 +307,7 @@
      *
      * @param aParameter AIW parameter passed in by other applications
      */
-    TBool IsBrowserClosed(const TDesC8& aParameter);
+    TBool IsBrowserClosedL(const TDesC8& aParameter);
 
     /**
      * Brings the browser to the foreground.
@@ -658,17 +658,17 @@
      *
      *  @param aVolume volume value.
      */
-    void SetVolume( const TInt aVolume );
+    void SetVolumeL( const TInt aVolume );
 
     /**
      *  Mutes the playback volume.
      */
-    void MuteVolume();
+    void MuteVolumeL();
 
     /**
      *  Unmutes the playback volume.
      */
-    void UnMuteVolume();
+    void UnMuteVolumeL();
 
     /**
      *  Translates Playback commands to MPX commands
@@ -681,7 +681,7 @@
     *
     *  @param music player need memory
     */
-    void CheckAvailableMemory( TInt aNeedMemory );
+    void CheckAvailableMemoryL( TInt aNeedMemory );
 
 #ifdef FF_OOM_MONITOR2_COMPONENT
     /**
--- a/mpxmusicplayer/app/src/mpxPDcommandhandler.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxmusicplayer/app/src/mpxPDcommandhandler.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -102,7 +102,7 @@
         TRAP_IGNORE( iPdPlaybackUtility->RemoveObserverL( *this ) );
         TRAP_IGNORE( iPdPlaybackUtility->CommandL( EPbCmdStop ) );
         TRAP_IGNORE( iPdPlaybackUtility->CommandL( EPbCmdClose ) );
-        iPdPlaybackUtility->PlayerManager().ClearSelectPlayersL();
+        TRAP_IGNORE( iPdPlaybackUtility->PlayerManager().ClearSelectPlayersL() );
         iPdPlaybackUtility->Close();
         }
     if ( iViewUtility )
--- a/mpxmusicplayer/app/src/mpxappui.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxmusicplayer/app/src/mpxappui.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -259,7 +259,7 @@
 #ifdef FF_OOM_MONITOR2_COMPONENT
     CheckAvailableMemoryByOomL( KLowestMemoryNeeded );
 #else
-    CheckAvailableMemory( KLowestMemoryNeeded );
+    CheckAvailableMemoryL( KLowestMemoryNeeded );
 #endif    //FF_OOM_MONITOR2_COMPONENT
 
     if ( !IsEmbedded() )
@@ -383,7 +383,7 @@
     {
     MPX_DEBUG1( "-->CMPXAppUi::~CMPXAppUi()" );
 #ifdef FF_OOM_MONITOR2_COMPONENT
-    SetMpxOomPriorityL( ROomMonitorSession::EOomPriorityNormal );
+    TRAP_IGNORE( SetMpxOomPriorityL( ROomMonitorSession::EOomPriorityNormal ) );
 #endif //FF_OOM_MONITOR2_COMPONENT
 
     if ( !IsEmbedded() )
@@ -749,6 +749,7 @@
         {
         case EPbCmdSetVolume:
             {
+            TRAP_IGNORE(
             TMPXPlaybackState playerState( EPbStateNotInitialised );
             playerState = iPlaybackUtility->StateL();
             if ( !MPXUser::IsCallOngoing( KMPXCallTypeGenericVoice ) ||
@@ -769,16 +770,18 @@
                     {
 					if ( aData != iCurrentVolume )
                         {
-                        SetVolume( aData );
+                        SetVolumeL( aData );
                         }
                     // popup volume control even if volume didn't change
                     HandlePopupL( EPbCmdSetVolume );
                     }
                 }
+            );
             break;
             }
         case EPbCmdMuteVolume:
             {
+            TRAP_IGNORE(
             TMPXPlaybackState playerState( EPbStateNotInitialised );
             playerState = iPlaybackUtility->StateL();
             if ( !MPXUser::IsCallOngoing( KMPXCallTypeGenericVoice ) ||
@@ -796,14 +799,16 @@
                 // or if we're actively playing during call
                 if ( IsForeground() || EPbStatePlaying == playerState || EPbStatePlaying == pdPlayerState )
                     {
-                    MuteVolume();
+                    MuteVolumeL();
                     HandlePopupL( EPbCmdMuteVolume );
                     }
                 }
+            );
             break;
             }
         case EPbCmdUnMuteVolume:
             {
+            TRAP_IGNORE(
             TMPXPlaybackState playerState( EPbStateNotInitialised );
             playerState = iPlaybackUtility->StateL();
             if ( !MPXUser::IsCallOngoing( KMPXCallTypeGenericVoice ) ||
@@ -821,10 +826,11 @@
                     }
                 if ( IsForeground() || EPbStatePlaying == playerState || EPbStatePlaying == pdPlayerState )
                     {
-                    UnMuteVolume();
+                    UnMuteVolumeL();
                     HandlePopupL( EPbCmdUnMuteVolume );
                     }
                 }
+            );
             break;
             }
         default:
@@ -838,15 +844,15 @@
                 // music is foreground app and not displaying
                 // dialogs or the options menu
                 if ( iView )
-                    {
-                    MPX_DEBUG2( "CMPXAppUi::HandleMediaKeyCommand sending command %d to view", MPXCmdForPbCmd(aCommand) );
-                    iView->HandleCommandL( MPXCmdForPbCmd(aCommand) );
+                    {                    
+                    MPX_TRAPD( err, iView->HandleCommandL( MPXCmdForPbCmd(aCommand) ) );
+                    MPX_DEBUG3( "CMPXAppUi::HandleMediaKeyCommand sending command %d to view err%d", MPXCmdForPbCmd(aCommand), err );
                     }
                 }
             else
                 {
                 TMPXPlaybackState playerState( EPbStateNotInitialised );
-                playerState = iPlaybackUtility->StateL();
+                MPX_TRAPD( err, playerState = iPlaybackUtility->StateL() );
                 if ( foregroundApp && IsDisplayingDialog() )
                     {
                     // displaying dialog in the foreground
@@ -859,13 +865,13 @@
                         {
                         // In playing/paused state, all media keys are active.
                         // Now playing view is not bring to foreground.
-                        // Seeking forward/backwards is also "playing"
-                        MPX_DEBUG2( "CMPXAppUi::HandleMediaKeyCommand Dialog displaying, sending command %d to DoHandleMediaKeyCommandL", aCommand );
-                        DoHandleMediaKeyCommandL( aCommand );
+                        // Seeking forward/backwards is also "playing"                       
+                        MPX_TRAP( err, DoHandleMediaKeyCommandL( aCommand ) );
+                        MPX_DEBUG3( "CMPXAppUi::HandleMediaKeyCommand Dialog displaying, sending command %d to DoHandleMediaKeyCommandL err%d", aCommand, err );
                         }
                     else
                         {
-                        MPX_DEBUG2( "CMPXAppUi::HandleMediaKeyCommand Dialog displaying, inactive state, command %d ignored", aCommand );
+                        MPX_DEBUG3( "CMPXAppUi::HandleMediaKeyCommand Dialog displaying, inactive state, command %d, err%d ignored", aCommand , err );
                         }
                     }
                 else
@@ -876,21 +882,21 @@
                         EPbStateSeekingForward == playerState ||
                         EPbStateSeekingBackward == playerState )
                         {
-                        MPX_DEBUG2( "CMPXAppUi::HandleMediaKeyCommand Menu displaying/not foreground, sending command %d to DoHandleMediaKeyCommandL", aCommand );
-                        DoHandleMediaKeyCommandL( aCommand );
+                        MPX_TRAP( err, DoHandleMediaKeyCommandL( aCommand ) );
+                        MPX_DEBUG3( "CMPXAppUi::HandleMediaKeyCommand Menu displaying/not foreground, sending command %d to DoHandleMediaKeyCommandL err%d", aCommand, err );
                         }
                     else if ( ( aCommand == EPbCmdPlay || aCommand == EPbCmdPlayPause ) && iView )
                         {
                         if ( !foregroundApp )
-                            {
-                            MPX_DEBUG2( "CMPXAppUi::HandleMediaKeyCommand Menu displaying/not foreground, active idle foreground, sending command %d to DoHandleMediaKeyCommandL", aCommand );
+                            {                
                             // not foreground, play without loading playback view
-                            DoHandleMediaKeyCommandL( aCommand );
+                            MPX_TRAP( err, DoHandleMediaKeyCommandL( aCommand ) );
+                            MPX_DEBUG3( "CMPXAppUi::HandleMediaKeyCommand Menu displaying/not foreground, active idle foreground, sending command %d to DoHandleMediaKeyCommandL err%d", aCommand, err );
                             }
                         else
-                            {
-                            MPX_DEBUG2( "CMPXAppUi::HandleMediaKeyCommand Menu displaying/not foreground, sending command %d to view", aCommand );
-                            iView->HandleCommandL( MPXCmdForPbCmd(aCommand) );
+                            {                           
+                            MPX_TRAP( err, iView->HandleCommandL( MPXCmdForPbCmd(aCommand) ) );
+                            MPX_DEBUG3( "CMPXAppUi::HandleMediaKeyCommand Menu displaying/not foreground, sending command %d to view err%d", aCommand, err );
                             }
                         }
                     else if ( aCommand == EPbCmdPlay || aCommand == EPbCmdPlayPause )
@@ -2012,32 +2018,28 @@
         }
     else if ( op == EMcMsgDiskRemoved )
         {
-        if ( !IsEmbedded() )
+        TBool usbDiskRemovalEvent( EFalse );
+        if ( (op == EMcMsgDiskRemoved) && iIsUsbOnGoing )
             {
-            TBool usbDiskRemovalEvent(EFalse);
-            if ( (op == EMcMsgDiskRemoved) && iIsUsbOnGoing )
-                {
-                usbDiskRemovalEvent = ETrue;
-                }
-            else
-                {
-                MPX_DEBUG1( "CMPXAppUi::HandleBroadcastMessageL. MMC ejected and the application needs to close." );
-                RunAppShutter();
-				return;
-                }
+            usbDiskRemovalEvent = ETrue;
+            }
+        else
+            {
+            MPX_DEBUG1( "CMPXAppUi::HandleBroadcastMessageL. MMC ejected and the application needs to close." );
+            RunAppShutter();
+            return;
+            }
 
             CMPXCollectionPath* cPath = iCollectionUtility->Collection().PathL ( );
             CleanupStack::PushL ( cPath );
             if ( cPath->Levels ( )> 1 && !iFormattingOnGoing && !usbDiskRemovalEvent &&
                  iCurrentViewType.iUid != KMPXPluginTypePlaybackUid )
                 {
-
-                    cPath->Back ( );
-                    iCollectionUtility->Collection().OpenL ( *cPath );
-                    
-                }
-            CleanupStack::PopAndDestroy ( cPath );
+            cPath->Back();
+            iCollectionUtility->Collection().OpenL( *cPath );
+
             }
+        CleanupStack::PopAndDestroy( cPath );
         }
     // Re-open the collection view after a refresh
     // and after album art or metadata dialog or add songs editor dialog closes
@@ -3939,7 +3941,7 @@
         ASSERT(!IsEmbedded());////browser should not send messages to music player if it is not RootApp.
         if ( aMessageParameters.Length() )
             {
-            if ( IsBrowserClosed(aMessageParameters) )
+            if ( IsBrowserClosedL(aMessageParameters) )
                 {
                 if ( iAppStartedByBrowser )
                     {
@@ -4016,7 +4018,7 @@
                 // Convert param to 8-bit.
                 HBufC8* param8 = HBufC8::NewLC( param.Length() );
                 param8->Des().Copy( param );
-                if ( IsBrowserClosed(*param8) )
+                if ( IsBrowserClosedL(*param8) )
                     {
                     Exit();
                     }
@@ -4284,10 +4286,10 @@
     }
 #ifdef RD_BROWSER_PROGRESSIVE_DOWNLOAD
 // -----------------------------------------------------------------------------
-// CMPXAppUi::IsBrowserClosed
+// CMPXAppUi::IsBrowserClosedL
 // -----------------------------------------------------------------------------
 //
-TBool CMPXAppUi::IsBrowserClosed(
+TBool CMPXAppUi::IsBrowserClosedL(
     const TDesC8& aParams )
     {
     TBool ret(EFalse);
@@ -4353,10 +4355,10 @@
     }
 
 // -----------------------------------------------------------------------------
-// CMPXAppUi::SetVolume
+// CMPXAppUi::SetVolumeL
 // -----------------------------------------------------------------------------
 //
-void CMPXAppUi::SetVolume( const TInt aVolume )
+void CMPXAppUi::SetVolumeL( const TInt aVolume )
     {
     CMPXCommand* cmd( CMPXCommand::NewL() );
     CleanupStack::PushL( cmd );
@@ -4375,10 +4377,10 @@
     }
 
 // -----------------------------------------------------------------------------
-// CMPXAppUi::MuteVolume
+// CMPXAppUi::MuteVolumeL
 // -----------------------------------------------------------------------------
 //
-void CMPXAppUi::MuteVolume()
+void CMPXAppUi::MuteVolumeL()
     {
     CMPXCommand* cmd( CMPXCommand::NewL() );
     CleanupStack::PushL( cmd );
@@ -4396,10 +4398,10 @@
     }
 
 // -----------------------------------------------------------------------------
-// CMPXAppUi::UnMuteVolume
+// CMPXAppUi::UnMuteVolumeL
 // -----------------------------------------------------------------------------
 //
-void CMPXAppUi::UnMuteVolume()
+void CMPXAppUi::UnMuteVolumeL()
     {
     CMPXCommand* cmd( CMPXCommand::NewL() );
     CleanupStack::PushL( cmd );
@@ -4482,10 +4484,10 @@
     }
 
 // -----------------------------------------------------------------------------
-// CMPXAppUi::CheckAvailableMemory
+// CMPXAppUi::CheckAvailableMemoryL
 // -----------------------------------------------------------------------------
 //
-void CMPXAppUi::CheckAvailableMemory( TInt aNeedMemory )
+void CMPXAppUi::CheckAvailableMemoryL( TInt aNeedMemory )
     {
     TMemoryInfoV1Buf info;
     UserHal::MemoryInfo(info);
--- a/mpxmusicplayer/commonui/inc/mpxfilenamequerydlg.h	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxmusicplayer/commonui/inc/mpxfilenamequerydlg.h	Tue Apr 27 16:34:37 2010 +0300
@@ -60,6 +60,11 @@
          * @see CAknTextQueryDialog
          */
     	TBool OkToExitL( TInt aButtonId );
+    	
+    	/**
+    	 * @see CAknTextQueryDialog
+    	 */
+    	TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ); 
 
 	private:
         /**
--- a/mpxmusicplayer/commonui/src/mpxcommonuihelper.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxmusicplayer/commonui/src/mpxcommonuihelper.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -1364,6 +1364,26 @@
             usingGlobalNote = ETrue;
             break;
             }
+        case KMPXErrorExpiredRights:
+            {
+            // if cannot retrieve value from aMedia, use invalid_group error	
+			if( !aMedia )
+			    {
+			    errorText = StringLoader::LoadLC( R_MPX_INVALID_GROUP_TEXT );
+			    }	
+			else
+				{
+				if ( aMedia->IsSupported( KMPXMediaGeneralTitle ) )
+				    {
+            		const TDesC& trackTitle( aMedia->ValueText( 
+            			                           KMPXMediaGeneralTitle ) );
+            	    errorText = StringLoader::LoadLC( 
+            		                            R_MPX_DRM_EXPIRED_PLAYBACK, 
+            			  	                    trackTitle );
+            	    }
+                }
+            break;
+            }
         case KErrLocked:
             errorText = StringLoader::LoadLC( R_MPX_CANNOT_PROCEED_WITH_OPERATION );
             break;
--- a/mpxmusicplayer/commonui/src/mpxfilenamequerydlg.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxmusicplayer/commonui/src/mpxfilenamequerydlg.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -228,6 +228,26 @@
     }
 
 // -----------------------------------------------------------------------------
+// CMPXFileNameQueryDlg::OfferKeyEventL
+// 
+// -----------------------------------------------------------------------------
+// 
+TKeyResponse CMPXFileNameQueryDlg::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ) 
+    { 
+    TKeyResponse response = EKeyWasNotConsumed;
+    // consume 'enter' so it won't acknowledge the dialog
+    if ( aType == EEventKey && aKeyEvent.iCode == EKeyEnter ) 
+        { 
+        response = EKeyWasConsumed;
+        } 
+    else
+        {
+        response = CAknTextQueryDialog::OfferKeyEventL(aKeyEvent, aType); 
+        }
+    return response;
+    }
+
+// -----------------------------------------------------------------------------
 // CMPXFileNameQueryDlg::IsValidName
 // -----------------------------------------------------------------------------
 //
--- a/mpxmusicplayer/mediakeyhandler/src/mpxmediakeyhandlerimp.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxmusicplayer/mediakeyhandler/src/mpxmediakeyhandlerimp.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -472,7 +472,7 @@
                         	}
                         }
 
-					if( iMuted && aValue > 0 ) // unmute
+					if( !iMuted && aValue > 0 ) // unmute
 			            {
 			            iMuted = EFalse;
 			            iCurrentVol = aValue;
@@ -1107,15 +1107,18 @@
         case ERemConCoreApiVolumeDown:
             {
             iTimer->Cancel();
-            
-            MMPXPlaybackUtility* pbUtil = MMPXPlaybackUtility::UtilityL( KPbModeActivePlayer );
-            CleanupClosePushL(*pbUtil);
-                
+            MMPXPlaybackUtility* pbUtil( NULL );
+            MPX_TRAPD( err, pbUtil = MMPXPlaybackUtility::UtilityL( KPbModeActivePlayer ));
+            if( err != KErrNone )
+                {
+                MPX_DEBUG2( "CMPXMediaKeyHandlerImp::MrccatoCommand ERemConCoreApiVolumeDown leave err%d", err );
+                break;
+                }
             TMPXPlaybackState playerState( EPbStateNotInitialised );
-            playerState = pbUtil->StateL();
-                    
-            CleanupStack::PopAndDestroy(pbUtil);
-            
+            TRAP_IGNORE( playerState = pbUtil->StateL());
+            pbUtil->Close();
+            pbUtil = NULL;
+
             if( playerState == EPbStatePlaying || IsAppForeground() )
                 {
                 iIncreaseVol = (aOperationId == ERemConCoreApiVolumeUp ? ETrue: EFalse);
--- a/mpxplugins/serviceplugins/collectionplugins/inc/mpxdbmanager.h	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/serviceplugins/collectionplugins/inc/mpxdbmanager.h	Tue Apr 27 16:34:37 2010 +0300
@@ -391,7 +391,7 @@
          * @param aSize - On return, the total size of the databases on the RAM drive.
          * @return TInt System error.
          */
-        TInt GetTotalRamDatabasesSize(TInt& aSize);
+        TInt GetTotalRamDatabasesSizeL(TInt& aSize);
 
         /**
         * Remove dummy file
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/src/mpxdbmanager.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbcommon/src/mpxdbmanager.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -777,11 +777,19 @@
             {
             if (iDatabaseHandles[i].iDrive == aDrive)
                 {
+                TBool inTransaction = InTransaction();
                 TInt transactionCount = iTransactionCount;
-                if (iTransactionCount > 0) 
+                iTransactionCount = 0;								
+								
+                if (inTransaction) //if the transaction is ongoing, try committing
                     {
-                    iTransactionCount = 0;
-                    DoCommitL();
+                    //if transaction committing fails, try roll-back	
+                    TInt error = iDatabase.Exec( KCommitTransaction );
+                    if ( error != KErrNone )
+                        {
+                        //The error is ignored since we can't do nothing about it
+                        iDatabase.Exec( KRollbackTransaction ); 
+                        }
                     }
                 	
 #ifdef __RAMDISK_PERF_ENABLE                	
@@ -811,8 +819,9 @@
                     MPX_DEBUG2("CMPXDbManager::CloseDatabaseL found %d", aDrive);
                     CloseDatabaseAtIndexL( i );
                     }
-                    
-                if (transactionCount > 0) 
+                
+                //Let MTP handle the transcation if there is any 
+                if ( inTransaction ) 
                     {
                     DoBeginL();
                     iTransactionCount = transactionCount;
@@ -2806,7 +2815,7 @@
         else
             {
             TInt size=0;
-            TInt err = GetTotalRamDatabasesSize(size);
+            TInt err = GetTotalRamDatabasesSizeL(size);
             if ( err || (size > iMaximumAllowedRAMDiskSpaceToCopy) )
                 {
                 // Databases using too much RAM space, copy back to normal drive and continue to harvest.
@@ -2965,7 +2974,7 @@
 // CMPXDbManager::GetTotalRamDatabasesSize
 // ---------------------------------------------------------------------------
 //
-TInt CMPXDbManager::GetTotalRamDatabasesSize(TInt& aSize)
+TInt CMPXDbManager::GetTotalRamDatabasesSizeL(TInt& aSize)
     {
     MPX_FUNC("CMPXDbManager::GetTotalRamDatabasesSize");
     TInt err = KErrNotSupported;
@@ -2993,21 +3002,21 @@
         filename.Format(KSecurePath, User::Identity().iUid, temp);
         CleanupStack::PopAndDestroy(temp);
         dbFilename.Append(filename);
-        MPX_DEBUG2("CMPXDbManager::GetTotalRamDatabasesSize - Database name = %S", &dbFilename);
+        MPX_DEBUG2("CMPXDbManager::GetTotalRamDatabasesSizeL - Database name = %S", &dbFilename);
         TEntry entry;
         err = iFs.Entry( dbFilename, entry );
         if ( (err != KErrNone) && (err != KErrNotFound) )
             {
             break;
             }
-        MPX_DEBUG3("CMPXDbManager::GetTotalRamDatabasesSize - Size of Db %S = %d", &dbFilename, entry.iSize);
+        MPX_DEBUG3("CMPXDbManager::GetTotalRamDatabasesSizeL - Size of Db %S = %d", &dbFilename, entry.iSize);
         // sum up size
         size += entry.iSize;
         }
     aSize = size;
-    MPX_DEBUG2("CMPXDbManager::GetTotalRamDatabasesSize - Total Size of Dbs = %d", size);
+    MPX_DEBUG2("CMPXDbManager::GetTotalRamDatabasesSizeL - Total Size of Dbs = %d", size);
 #endif //__RAMDISK_PERF_ENABLE    
-    MPX_DEBUG2("CMPXDbManager::GetTotalRamDatabasesSize - Return err = %d", err);
+    MPX_DEBUG2("CMPXDbManager::GetTotalRamDatabasesSizeL - Return err = %d", err);
     return err;
     }
 
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbabstractalbum.h	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbabstractalbum.h	Tue Apr 27 16:34:37 2010 +0300
@@ -50,7 +50,7 @@
         * @return New CMPXDbCategory instance.
         */
         static CMPXDbAbstractAlbum* NewL(CMPXDbManager& aDbManager,
-            TMPXGeneralCategory aCategory);
+            TMPXGeneralCategory aCategory, RFs& aFs);
 
         /**
         * Two-phased constructor.
@@ -59,7 +59,7 @@
         * @return New CMPXDbCategory instance on the cleanup stack.
         */
         static CMPXDbAbstractAlbum* NewLC(CMPXDbManager& aDbManager,
-            TMPXGeneralCategory aCategory);
+            TMPXGeneralCategory aCategory, RFs& aFs);
 
         /**
         * Destructor
@@ -84,9 +84,17 @@
         *        into consideration when generating the unique row id
         * @return The unique id of the row added.
         */
-        TUint32 AddItemL( const TDesC& aName, const TDesC& aAlbumArtist, const TDesC& aGenre, TInt aDriveId, TBool& aNewRecord,
-            TBool aCaseSensitive = ETrue);
-        
+        TUint32 AddItemL( const TDesC& aUri, const TDesC& aName, const TDesC& aAlbumArtist, TInt aDriveId, TBool& aNewRecord,
+            TBool aCaseSensitive = EFalse);
+
+        /**
+        *  Add existing item to table with same entry fields values except new Uri.
+        * @param aOldId: existing item Id
+        * @param newUri: new Uri
+        * @return The unique id of the row added.
+        */      
+        TUint32 AddUpdatedItemL(TUint32 aOldId, const TDesC& newUri);
+
         /**
         * Decrement the number of songs for the item. If the count gets to 0, remove
         * the item.
@@ -103,13 +111,17 @@
         */
         void DecrementSongsForCategoryL(TUint32 aId, TInt aDriveId,
             CMPXMessageArray* aItemChangedMessages, TBool& aItemExist, TBool aMtpInUse);
-  
+        
         /**
-        * Remove a abstractalbum and return its URI
-        * @param aAbstractAlbumId identifies the abstractalbum
-        * @return HBufC containing the URI. Ownership is transferred.
+        * Remove a abstractalbum, remove entry from AbstractAlbum table, 
+        * Thumbnail table, corresponding alb from file system
+        * @param aAbstractAlbumId ID of the abstractalbum to remove
+        * @param aItemChangedMessages a list of change events as a result of the
+        *        abstractalbum removal
+        * @param aFileDeleted indicate if alb file already deleted from file system
         */
-        HBufC* DeleteAbstractAlbumL(TUint32 aAbstractAlbumId, TInt aDriveId = 0);
+        void RemoveAbstractAlbumL(TUint32 aAbstractalbumId, 
+            CMPXMessageArray& aItemChangedMessages, TBool aFileDeleted);
         
         /**
         * Update a category item.
@@ -120,6 +132,29 @@
         *        category was updated
         */
         void UpdateItemL(TUint32 aId, const CMPXMedia& aMedia, TInt aDriveId, CMPXMessageArray* aItemChangedMessages);
+          
+        /**
+        * Delete or Rename Thumbnail from TN DB by calling Thumbnail manager
+        * Rename Thumbnail if aNewPath is not NULL, otherwise Delete Thumbnail
+        * @param aOldPath: old Uri
+        * @param aNewPath: new Uri
+        * @param aPriority: priority pass to Thumbnail manager
+        */
+        void HandleTNL( const TDesC& aOldPath, const TDesC& aNewPath = KNullDesC, TInt aPriority =0 );
+
+        /**
+        * Get the uri field for a given ID.
+        * @param aId identifies the abstractalbum item
+        * @return uri that matches aId. Ownership is abandoned.
+        */
+        HBufC* GetUriL(TUint32 aId);
+
+        /**
+        * Get Ids of albstractalbum with no song associated.
+        * Rename Thumbnail if aNewPath is not NULL, otherwise Delete Thumbnail
+        * @param aItemsIds: array of Ids for abstractalbums which have no song associated.
+        */
+        void GetAllItemsWithNoSongL(RArray<TUint32>& aItemsIds);
 
     private:
 
@@ -142,35 +177,37 @@
         */
         void GenerateAbstractAlbumFieldsValuesL(const CMPXMedia& aMedia,
             CDesCArray& aFields, CDesCArray& aValues);
-
+        
+        /**
+        * Remove a abstractalbum from AbstractAlbum table
+        * @param aAbstractAlbumId identifies the abstractalbum
+        * @param aDriveId drive Id
+        */
+        void DeleteAbstractAlbumEntryL(TUint32 aAbstractAlbumId,  TInt aDriveId = 0);
+        
 
         /**
         * @see MMPXTable
         */
         virtual void CreateTableL(RSqlDatabase& aDatabase, TBool aCorruptTable);
 
-
-        
         /**
         * @see MMPXTable
         */
         virtual TBool CheckTableL(RSqlDatabase& aDatabase);
-        
-        
-    
+
         /**
         * C++ constructor.
         * @param aDbManager database manager to use for database interactions
         * @param aCategory identifies the category
         */
-        CMPXDbAbstractAlbum(CMPXDbManager& aDbManager, TMPXGeneralCategory aCategory);
+        CMPXDbAbstractAlbum(CMPXDbManager& aDbManager, TMPXGeneralCategory aCategory, RFs& aFs);
 
         /**
         * Second phase constructor.
         */
         void ConstructL();
-        
-        
+
         /**
         * MThumbnailManagerObserver
         */
@@ -180,7 +217,7 @@
         * MThumbnailManagerObserver
         */
         void ThumbnailReady(
-            TInt aError, 
+            TInt aError,
             MThumbnailData& aThumbnail, TThumbnailRequestId aId );
 
     public:
@@ -191,9 +228,9 @@
         enum TAbstractAlbumColumns
             {
             EAbstractAlbumUniqueId = KMPXTableDefaultIndex,
+            EAbstractAlbumUri,
             EAbstractAlbumName,
             EAbstractAlbumArtist,
-            EAbstractAlbumGenre,
             EAbstractAlbumSongCount,
             EAbstractAlbumVolumeId,
             EAbstractAlbumFieldCount
@@ -201,6 +238,8 @@
 
     private:    // Data
         CThumbnailManager*        iTNManager;
+        TBool                     iRenameTN;
+        RFs&                      iFs;
 
     };
 #endif // MPXDBAbstractAlbum_H
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbhandler.h	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbhandler.h	Tue Apr 27 16:34:37 2010 +0300
@@ -124,12 +124,13 @@
         * @return playlist Id of the playlist
         */
         TUint32 AddSongToPlaylistL(const CMPXMedia& aMedia);
-#ifdef ABSTRACTAUDIOALBUM_INCLUDED        
+#ifdef ABSTRACTAUDIOALBUM_INCLUDED
         /**
         * Add an abstractalbum to the collection
         * @param aMedia abstractalbum media object with URI of the abstractalbum.
+        * @param aMessageArray change event message to notify client of the changes
         * @return abstractalbum Id of the abstractalbum created
-        */  
+        */
         TUint32 AddAbstractAlbumL(const CMPXMedia& aMedia, CMPXMessageArray* aMessageArray=NULL);
 #endif // ABSTRACTAUDIOALBUM_INCLUDED
         /**
@@ -142,19 +143,30 @@
         */
         CMPXDbActiveTask::TChangeVisibility UpdateSongL(const CMPXMedia& aMedia,
             CMPXMessageArray& aItemChangedMessages);
-#ifdef ABSTRACTAUDIOALBUM_INCLUDED        
+#ifdef ABSTRACTAUDIOALBUM_INCLUDED
         /**
-        * Update songs info for songs associated with abstractalbum
+        * Update abstractalbum info to AbstractAlbum table and Songs associated with abstractalbum
         *           in the music collection database
-        * @param aMedia songDetails object  which contains file path,
+        * @param aMedia media object         
+        * @param aItemChangedMessages a list of change events as a result of the
+        *           song update
+        * @return ETrue if UI visible change else EFalse
+        */
+        CMPXDbActiveTask::TChangeVisibility UpdateAbstractAlbumL(const CMPXMedia& aMedia,
+            CMPXMessageArray& aItemChangedMessages);
+
+        /**
+        * Update all songs which associate with AbstractAlbum to new AbstractAlbum info 
+        * in the collection
+        * @param aMedia media object  which contains file path,
         *           artist, composer, name(title), track, etc...
         * @param aItemChangedMessages a list of change events as a result of the
         *           song update
         * @return ETrue if UI visible change else EFalse
-        */       
-        CMPXDbActiveTask::TChangeVisibility UpdateAbstractAlbumSongsL(const CMPXMedia& aMedia,
+        */
+        CMPXDbActiveTask::TChangeVisibility UpdateSongsAbstractAlbumInfoL(const CMPXMedia& aMedia,
             CMPXMessageArray& aItemChangedMessages);
-#endif // ABSTRACTAUDIOALBUM_INCLUDED      
+#endif // ABSTRACTAUDIOALBUM_INCLUDED
         /**
         * Update playlist info in the music collection database
         * @param aMedia playlist details object which contains file path,
@@ -241,15 +253,16 @@
             CMPXMessageArray& aItemChangedMessages);
 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
         /**
-        * Remove a abstractalbum This will remove all the songs from the abstractalbum
+        * Remove a abstractalbum, remove entry from AbstractAlbum table, 
+        * Thumbnail table, corresponding alb from file system
         * @param aAbstractAlbumId ID of the abstractalbum to remove
-        * @param aUriArray a descriptor array to contain the URI of the deleted file
         * @param aItemChangedMessages a list of change events as a result of the
         *        abstractalbum removal
+        * @param aFileDeleted indicate if alb file already deleted from file system
         */
-        void RemoveAbstractAlbumL(TUint32 aAbstractAlbumId, CDesCArray& aUriArray,
-            CMPXMessageArray& aItemChangedMessages);
-#endif // ABSTRACTAUDIOALBUM_INCLUDED         
+        void RemoveAbstractAlbumL(TUint32 aAbstractAlbumId,
+            CMPXMessageArray& aItemChangedMessages, TBool aFileDeleted); 
+#endif // ABSTRACTAUDIOALBUM_INCLUDED
 
         /**
         * Remove a song from the specified playlist.
@@ -878,17 +891,8 @@
         */
         void DoRemovePlaylistL(TUint32 aPlaylistId, CDesCArray& aUriArray,
             CMPXMessageArray& aItemChangedMessages);
-#ifdef ABSTRACTAUDIOALBUM_INCLUDED        
-        /**
-        * Deletes a specified abstractalbum.
-        * @param aAbstractAlbumId the abstractalbum to be deleted.
-        * @param aUriArray on return contains the URIs of the items deleted.
-        * @param aItemChangedMessages on return contains changed messages for all
-        *        affected items
-        */
-        void DoRemoveAbstractAlbumL(TUint32 aAbstractalbumId, CDesCArray& aUriArray,
-            CMPXMessageArray& aItemChangedMessages);
-#endif // ABSTRACTAUDIOALBUM_INCLUDED
+
+
         /**
         * Deletes a song from a playlist.
         * @param aPlaylistId identifies the playlist.
@@ -901,6 +905,22 @@
         void DoRemoveSongFromPlaylistL(TUint32 aPlaylistId, const TMPXItemId& aSongId,
             TInt aOrdinal, CMPXMessageArray& aItemChangedMessages);
 
+#ifdef ABSTRACTAUDIOALBUM_INCLUDED  
+        /**
+        * Remove all abstractalbum items with no songs associated,
+        * TN and .alb files also removed.
+        *
+        */
+        void RemoveAbstractAlbumsWithNoSongL();
+        
+          /**
+        /* When refresh library, Remove .alb entry from AbstractAlnum table, TN table if .alb files deleted 
+        /* from file manager 
+        */
+        void AbstractAlbumCleanUpL();
+       
+#endif // ABSTRACTAUDIOALBUM_INCLUDED
+
         /**
         * Deletes all song records marked as deleted.
         */
@@ -1008,10 +1028,11 @@
         * @see MMPXDbMusicObserver
         */
         virtual TUint32 AddCategoryItemL(TMPXGeneralCategory aCategory,
-            const TDesC& aName, TInt aDriveId,
+            const TDesC& aName,
+            TInt aDriveId,
             CMPXMessageArray* aItemChangedMessages, TBool& aItemExist,
-            const TDesC& aAlbumArtist=KNullDesC,
-            const TDesC& aGenre=KNullDesC);
+            const TDesC& aUri,
+            const TDesC& aAlbumArtist=KNullDesC);
 #else
 
         /**
@@ -1045,7 +1066,7 @@
         * @see MMPXDbMusicObserver
         */
         virtual void HandlePlaybackTimeModifiedL(CMPXMessageArray& aItemChangedMessages);
-#ifdef ABSTRACTAUDIOALBUM_INCLUDED      
+#ifdef ABSTRACTAUDIOALBUM_INCLUDED
         /**
         * @see MMPXDbMusicObserver
         */
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbmusic.h	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbmusic.h	Tue Apr 27 16:34:37 2010 +0300
@@ -421,14 +421,13 @@
 
 
 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
-	    /**
+        /**
         * Returns all songs for a given abstractalbum.
-        * @param aDrive drive ID AbstractAlbum stored
         * @param aAbstractAlbumId abstractalbum to get the songs for
         * @param aAttrs attributes to be retrieved
         * @param aMediaArray returns the song attributes.
         */
-        void GetAllSongsForAbstractAlbumL(TInt aDrive, TInt aAbstractAlbumId,
+        void GetAllSongsForAbstractAlbumL(TUint aAbstractAlbumId,
             const TArray<TMPXAttribute>& aAttrs, CMPXMediaArray& aMediaArray);
 #endif // ABSTRACTAUDIOALBUM_INCLUDED
         /**
@@ -679,8 +678,8 @@
             CMPXMessageArray* aItemChangedMessages, TUint32& aItemId);
 
         TBool UpdateCategoryFieldL(TMPXGeneralCategory aCategory, const CMPXMedia& aMedia,
-        	const TMPXAttribute& aAttribute, TUint32 aOldId, TInt aDriveId,
-         	CMPXMessageArray* aItemChangedMessages, TUint32& aItemId, TUint32 aArtistId);
+          const TMPXAttribute& aAttribute, TUint32 aOldId, TInt aDriveId,
+          CMPXMessageArray* aItemChangedMessages, TUint32& aItemId, TUint32 aArtistId);
         /**
         * Checks if extra attributes are required. The "standard attribute set includes:
         * EMPXMediaGeneralId, EMPXMediaGeneralType, EMPXMediaGeneralCategory,
@@ -696,7 +695,7 @@
         * @return ETrue if the media contains one or more supported attribute;
         *  otherwise EFalse.
         */
-		TBool IsSupported(const CMPXMedia& aMedia);
+        TBool IsSupported(const CMPXMedia& aMedia);
 
     private:    // from MMPXTable
 
@@ -734,8 +733,8 @@
         * Column indexes in the music table
         */
         enum TMusicColumns
-        	{
-        	EMusicUniqueId = KMPXTableDefaultIndex,
+            {
+            EMusicUniqueId = KMPXTableDefaultIndex,
             EMusicDbFlag,
             EMusicVolumeId,
             EMusicTitle,
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbpluginqueries.h	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbpluginqueries.h	Tue Apr 27 16:34:37 2010 +0300
@@ -155,7 +155,7 @@
 _LIT(KQueryMusicGetMostPlayed, "SELECT Music.*,Artist.Name,Album.Name,Genre.Name,Composer.Name FROM :dbname.Music,:dbname.Artist,:dbname.Album,:dbname.Genre,:dbname.Composer WHERE Music.Deleted=0 AND Music.PlayCount<>0 AND Music.Album=Album.UniqueId AND Music.Artist=Artist.UniqueId AND Music.Genre=Genre.UniqueId AND Music.Composer=Composer.UniqueId ORDER BY PlayCount DESC, TimePlayed DESC LIMIT %u");
 _LIT(KQueryMusicGetRecentlyAdded, "SELECT Music.*,Artist.Name,Album.Name,Genre.Name,Composer.Name FROM :dbname.Music,:dbname.Artist,:dbname.Album,:dbname.Genre,:dbname.Composer WHERE Music.Deleted=0 AND (julianday(Music.TimeAdded)>julianday('now','-7 days')) AND Music.Album=Album.UniqueId AND Music.Artist=Artist.UniqueId AND Music.Genre=Genre.UniqueId AND Music.Composer=Composer.UniqueId ORDER BY 11 DESC");
 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
-_LIT(KQueryMusicGetSongsForAbstractAlbum,"SELECT Music.*,AbstractAlbum.Name FROM :dbname.Music,:dbname.AbstractAlbum WHERE Music.Deleted=0 AND Music.AbstractAlbum=AbstractAlbum.UniqueId AND AbstractAlbum.UniqueId=%u");
+_LIT(KQueryMusicGetSongsForAbstractAlbum,"SELECT Music.*,AbstractAlbum.Uri FROM :dbname.Music,:dbname.AbstractAlbum WHERE Music.Deleted=0 AND Music.AbstractAlbum=AbstractAlbum.UniqueId AND AbstractAlbum.UniqueId=%u");
 #endif // ABSTRACTAUDIOALBUM_INCLUDED
 _LIT(KQueryMusicSong, "SELECT UniqueId,DbFlag,VolumeId,Title,0,'',0,Location FROM :dbname.Music WHERE %S");
 _LIT(KQueryMusicFindAll, "SELECT Music.*,Artist.Name,Album.Name,Genre.Name,Composer.Name FROM :dbname.Music,:dbname.Artist,:dbname.Album,:dbname.Genre,:dbname.Composer WHERE %S AND Music.Album=Album.UniqueId AND Music.Artist=Artist.UniqueId AND Music.Genre=Genre.UniqueId AND Music.Composer=Composer.UniqueId %S");
@@ -268,7 +268,7 @@
 _LIT(KAuxiliaryCheckTable, "SELECT Id,Version,TimeRefreshed,TimeSynced,Corrupt,SaveDeletedRecordCount FROM AUXILIARY");
 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
 _LIT(KQueryAuxiliaryInsert, "INSERT INTO Auxiliary(Id,Version,Corrupt) VALUES(0,'6.5.0',%u)");
-#else 
+#else
 _LIT(KQueryAuxiliaryInsert, "INSERT INTO Auxiliary(Id,Version,Corrupt) VALUES(0,'6.4.0',%u)");
 #endif // ABSTRACTAUDIOALBUM_INCLUDED
 _LIT(KQueryAuxiliarySetTime, "UPDATE :dbname.Auxiliary SET TimeRefreshed='%S', Corrupt=0");
@@ -427,7 +427,7 @@
     L"Name TEXT COLLATE NOCASE,"
     L"SongCount INTEGER,"
     L"Artist INTEGER,"
-	L"Art TEXT)");
+    L"Art TEXT)");
 
 _LIT(KAlbumCheckTable,"SELECT UniqueId,Name,SongCount,Artist,Art FROM Album");
 
@@ -458,16 +458,17 @@
 //
 _LIT(KAbstractAlbumCreateTable,"CREATE TABLE AbstractAlbum("
     L"UniqueId INTEGER PRIMARY KEY,"
+    L"Uri TEXT,"
     L"Name TEXT COLLATE NOCASE,"
     L"AlbumArtist TEXT,"
-    L"Genre TEXT,"
     L"SongCount INTEGER,"
     L"VolumeId INTEGER)");
 
-_LIT(KAbstractAlbumCheckTable,"SELECT UniqueId,Name,SongCount,VolumeId FROM AbstractAlbum");
+_LIT(KAbstractAlbumCheckTable,"SELECT UniqueId,Uri,Name,AlbumArtist,SongCount,VolumeId FROM AbstractAlbum");
 _LIT(KCriterionAbstractAlbumVolumeId, "VolumeId=%u");
-_LIT(KQueryAbstractAlbumInsert, "INSERT INTO :dbname.AbstractAlbum(UniqueId,Name,AlbumArtist,Genre,SongCount,VolumeId) VALUES(%u,'%S','%S','%S',%u,%u)");
+_LIT(KQueryAbstractAlbumInsert, "INSERT INTO :dbname.AbstractAlbum(UniqueId,Uri,Name,AlbumArtist,SongCount,VolumeId) VALUES(%u,'%S','%S','%S',%u,%u)");
 _LIT(KQueryAbstractAlbumUpdate, "UPDATE :dbname.AbstractAlbum SET %S WHERE UniqueId=%u");
 _LIT(KCriterionCategoryVolumeId, "SELECT VolumeId FROM :dbname.AbstractAlbum WHERE UniqueId=%u");
+_LIT(KQueryAbstractAlbumsWithNoSong, "SELECT * FROM :dbname.AbstractAlbum WHERE SongCount=0");
 #endif // ABSTRACTAUDIOALBUM_INCLUDED
 #endif // MPXDBPLUGINQUERIES_H
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbabstractalbum.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbabstractalbum.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -37,9 +37,6 @@
 
 // CONSTANTS
 
-
-
-
 // ============================ MEMBER FUNCTIONS ==============================
 
 // ----------------------------------------------------------------------------
@@ -48,11 +45,11 @@
 //
 CMPXDbAbstractAlbum* CMPXDbAbstractAlbum::NewL(
     CMPXDbManager& aDbManager,
-    TMPXGeneralCategory aCategory)
+    TMPXGeneralCategory aCategory, RFs& aFs)
     {
     MPX_FUNC("CMPXDbAbstractAlbum::NewL");
 
-    CMPXDbAbstractAlbum* self = CMPXDbAbstractAlbum::NewLC(aDbManager, aCategory);
+    CMPXDbAbstractAlbum* self = CMPXDbAbstractAlbum::NewLC(aDbManager, aCategory, aFs);
     CleanupStack::Pop(self);
     return self;
     }
@@ -63,11 +60,11 @@
 //
 CMPXDbAbstractAlbum* CMPXDbAbstractAlbum::NewLC(
     CMPXDbManager& aDbManager,
-    TMPXGeneralCategory aCategory)
+    TMPXGeneralCategory aCategory, RFs& aFs)
     {
     MPX_FUNC("CMPXDbAbstractAlbum::NewLC");
 
-    CMPXDbAbstractAlbum* self = new (ELeave) CMPXDbAbstractAlbum(aDbManager, aCategory);
+    CMPXDbAbstractAlbum* self = new (ELeave) CMPXDbAbstractAlbum(aDbManager, aCategory, aFs);
     CleanupStack::PushL(self);
     self->ConstructL();
     return self;
@@ -103,9 +100,9 @@
 // ----------------------------------------------------------------------------
 //
 TUint32 CMPXDbAbstractAlbum::AddItemL(
+    const TDesC& aUri,
     const TDesC& aName,
     const TDesC& aAlbumArtist,
-    const TDesC& aGenre,
     TInt aDriveId,
     TBool& aNewRecord,
     TBool aCaseSensitive)
@@ -113,19 +110,21 @@
     MPX_FUNC("CMPXDbAbstractAlbum::AddItemL");
 
     TUint32 rowId(MPXDbCommonUtil::GenerateUniqueIdL(iDbManager.Fs(), EMPXAbstractAlbum,
-        aName, aCaseSensitive));
-  
+        aUri, aCaseSensitive));
+    aNewRecord = !CategoryItemExistsL(aDriveId, rowId);
+
     if ( aNewRecord )
         {
+        HBufC* uri = MPXDbCommonUtil::ProcessSingleQuotesLC(aUri);
         HBufC* name = MPXDbCommonUtil::ProcessSingleQuotesLC(aName);
         HBufC* albumartist = MPXDbCommonUtil::ProcessSingleQuotesLC(aAlbumArtist);
-        HBufC* genre = MPXDbCommonUtil::ProcessSingleQuotesLC(aGenre);
-        
-        iDbManager.ExecuteQueryL(aDriveId, KQueryAbstractAlbumInsert, rowId, name, albumartist, genre, 0, MPXDbCommonUtil::GetVolIdMatchDriveIdL(iDbManager.Fs(), aDriveId));
-        CleanupStack::PopAndDestroy(3, name);        
+
+        iDbManager.ExecuteQueryL(aDriveId, KQueryAbstractAlbumInsert, rowId, uri, name, albumartist, 0, MPXDbCommonUtil::GetVolIdMatchDriveIdL(iDbManager.Fs(), aDriveId));
+        CleanupStack::PopAndDestroy(3, uri);
         }
     else
         {
+        MPX_DEBUG1("CMPXDbAbstractAlbum::AddItemL, increase song count for abstractalbum");
         // increment the number of songs for the category
         HBufC* query = PreProcessStringLC(KQueryCategoryIncrementSongCount);
         iDbManager.ExecuteQueryL(aDriveId, *query, rowId);
@@ -135,7 +134,36 @@
     return rowId;
     }
 
+// ----------------------------------------------------------------------------
+// CMPXDbAbstractAlbum::AddUpdatedItemL
+// ----------------------------------------------------------------------------
+//
+TUint32 CMPXDbAbstractAlbum::AddUpdatedItemL(TUint32 aOldId, const TDesC& newUri)
+    {
+    MPX_FUNC("CMPXDbAbstractAlbum::AddUpdatedItemL");
+    iRenameTN = ETrue;
+    
+    //get the existing item based on aOldId
+    HBufC* query = NULL;
+    query = PreProcessStringLC(KQueryCategoryItem);
+    RSqlStatement recordset(iDbManager.ExecuteSelectQueryL(*query, aOldId));
+    CleanupStack::PopAndDestroy(query);
+    
+    CleanupClosePushL(recordset);
+    TBool newRecord(ETrue);
+    if (recordset.Next() != KSqlAtRow)
+        {
+        User::Leave(KErrNotFound);
+        }
+    //save the existing entry fields values for renaming purpose
+    const TDesC& name(MPXDbCommonUtil::GetColumnTextL (recordset, EAbstractAlbumName));
+    const TDesC& albumartist(MPXDbCommonUtil::GetColumnTextL (recordset, EAbstractAlbumArtist));
 
+    TUint32 itemId = AddItemL(newUri, name, albumartist, GetDriveIdL(aOldId), newRecord, EFalse);
+    CleanupStack::PopAndDestroy(&recordset);
+
+    return itemId;
+    }
 
 // ----------------------------------------------------------------------------
 // CMPXDbAbstractAlbum::DecrementSongsForCategoryL
@@ -151,8 +179,7 @@
     MPX_FUNC("CMPXDbAbstractAlbum::DecrementSongsForCategoryL");
     
     TInt songCount = GetSongsCountL(aDriveId, aId);
-       // if just one song uses this category. Use <= just in case
-       //while MTP connection, just decrease songCount in DB, do not do deletion.
+    //while MTP connection, just decrease songCount in DB, do not do deletion.
     if ( songCount > 0 )
         {
         aItemExist = ETrue;
@@ -162,74 +189,91 @@
         CleanupStack::PopAndDestroy(query);
         songCount--;
         }
-    
-    if ((songCount == 0) && !aMtpInUse)
+    if (songCount == 0)
         {
-        HBufC* uri = DeleteAbstractAlbumL(aId, aDriveId);
-        MPX_DEBUG1("CMPXDbAbstractAlbum::DeleteAbstractAlbumL,implicitly delete AbstractAlbum Object when it has 0 references");  
-        aItemExist = EFalse;
-        if (aItemChangedMessages)
+        //get uri
+        HBufC* uri = GetUriL(aId);
+        CleanupStack::PushL(uri);
+            
+        if (!aMtpInUse)
+	        {       
+	        DeleteAbstractAlbumEntryL(aId, aDriveId);
+	        MPX_DEBUG1("CMPXDbAbstractAlbum::DecrementSongsForCategoryL,implicitly delete AbstractAlbum Object when it has 0 references");
+	        aItemExist = EFalse;
+	        if (aItemChangedMessages)
+	            {
+	            // add the item changed message
+	            MPXDbCommonUtil::AddItemChangedMessageL(*aItemChangedMessages, aId, EMPXItemDeleted,
+	                EMPXAbstractAlbum, KDBPluginUid);
+	            }
+	        //delete .alb file from file system                
+	        TInt err = BaflUtils::DeleteFile(iFs, *uri);                       
+	        if(KErrNone != err)
+	            {
+	            MPX_DEBUG2("CMPXDbAbstractAlbum::DecrementSongsForCategoryL,File not deleted from file system with err=%d", err);
+	            }   
+	        }
+        if(!iRenameTN)
+	        {
+	        HandleTNL(*uri);
+	        }   
+        CleanupStack::PopAndDestroy(uri);
+        }  
+    }
+
+// ----------------------------------------------------------------------------
+// CMPXDbAbstractAlbum::RemoveAbstractAlbumL
+// ----------------------------------------------------------------------------
+//
+void CMPXDbAbstractAlbum::RemoveAbstractAlbumL(TUint32 aAbstractAlbumId, 
+    CMPXMessageArray& aItemChangedMessages, TBool aFileDeleted)
+    {
+    MPX_FUNC("CMPXDbAbstractAlbum::RemoveAbstractAlbumL");
+    HBufC* uri = GetUriL(aAbstractAlbumId);
+    CleanupStack::PushL(uri);
+    
+    DeleteAbstractAlbumEntryL(aAbstractAlbumId);
+    HandleTNL(*uri);
+    if (!aFileDeleted)
+        {             
+        TInt err = BaflUtils::DeleteFile(iFs, *uri);                       
+        if(KErrNone != err)
             {
-            // add the item changed message
-            MPXDbCommonUtil::AddItemChangedMessageL(*aItemChangedMessages, aId, EMPXItemDeleted,
-                EMPXAbstractAlbum, KDBPluginUid);   
-            }
-        delete uri;
-        }
+            MPX_DEBUG2("CMPXDbAbstractAlbum::RemoveAbstractAlbumL,File not deleted from file system with err=%d", err);
+            }   
+        }   
+    MPXDbCommonUtil::AddItemChangedMessageL(aItemChangedMessages, aAbstractAlbumId, EMPXItemDeleted, EMPXAbstractAlbum, KDBPluginUid);            
+    CleanupStack::PopAndDestroy(uri);
     }
 
 
 // ----------------------------------------------------------------------------
-// CMPXDbAbstractAlbum::DeleteAbstractAlbumL
+// CMPXDbAbstractAlbum::HandleTNL
 // ----------------------------------------------------------------------------
 //
-HBufC* CMPXDbAbstractAlbum::DeleteAbstractAlbumL(
-    TUint32 aAbstractAlbumId, TInt aDriveId)
-    {
-    MPX_FUNC("CMPXDbAbstractAlbum::DeleteAbstractAlbumL");
+void CMPXDbAbstractAlbum::HandleTNL( const TDesC& aOldPath,
+        const TDesC& aNewPath, TInt aPriority )
+  {
+  MPX_FUNC("CMPXDbAbstractAlbum::HandleTNL");
 
-    //before delete category, get the abstract album path
-    HBufC* uri = GetNameL(aAbstractAlbumId);
-    // delete the category
-    if (uri)
-        {
-        CleanupStack::PushL(uri);
-         
-    if (aDriveId)
-        DeleteCategoryL(aAbstractAlbumId, aDriveId);
-    else
-        {
-        TInt drive = MPXDbCommonUtil::GetDriveIdMatchVolIdL(iDbManager.Fs(),
-            ExecuteIntQueryL(KCriterionCategoryVolumeId, aAbstractAlbumId));
-        DeleteCategoryL(aAbstractAlbumId, drive);
-        }
-//delete abstract album .alb from TN table
-#ifdef RD_MPX_TNM_INTEGRATION
-        // remove from thumbnail database table
-        CThumbnailObjectSource* source = CThumbnailObjectSource::NewLC(
-                *uri, KImageFileType );
-        iTNManager->DeleteThumbnails( *source );
-        CleanupStack::PopAndDestroy( source );
-#endif //RD_MPX_TNM_INTEGRATION
-
-       
-        //delete abstract album .alb file from file system
-        RFs rFs;
-        User::LeaveIfError( rFs.Connect() );
-        CleanupClosePushL( rFs );
-
-        TInt err = BaflUtils::DeleteFile(rFs, *uri);
-        if(KErrNone != err)
-            {
-            MPX_DEBUG2("CMPXDbAbstractAlbum::DeleteAbstractAlbumL,File not deleted from file system with err=%d", err);
-            }
-
-        CleanupStack::PopAndDestroy( &rFs );
-        }
-
-    CleanupStack::Pop(uri);
-    return uri;
-    }
+  if (aNewPath.Compare(KNullDesC)==0 && aOldPath.Compare(KNullDesC)!=0)
+      {         
+      // remove from thumbnail database table
+      MPX_DEBUG1("CMPXDbAbstractAlbum::HandleTNL, delete TN");  
+      CThumbnailObjectSource* source = CThumbnailObjectSource::NewLC(
+               aOldPath, KImageFileType );
+      iTNManager->DeleteThumbnails( *source );
+      CleanupStack::PopAndDestroy( source );
+      }
+   else if (aNewPath.Compare(KNullDesC)!=0)
+      {
+      //rename thumbnail
+      MPX_DEBUG1("CMPXDbAbstractAlbum::HandleTNL, rename TN");
+      iTNManager->RenameThumbnailsL( aOldPath,  aNewPath, aPriority );
+      //after rename, reset flag
+      iRenameTN = EFalse;
+      }
+ }
 
 
 // ----------------------------------------------------------------------------
@@ -262,12 +306,34 @@
         MPXDbCommonUtil::AddItemAlbumChangedMessageL(*aItemChangedMessages, aId, EMPXItemModified,
                 EMPXAbstractAlbum, KDBPluginUid, ETrue, 0 );
         }
-
     CleanupStack::PopAndDestroy(setStr);
     CleanupStack::PopAndDestroy(values);
     CleanupStack::PopAndDestroy(fields);
     }
 
+
+// ----------------------------------------------------------------------------
+// CMPXDbAbstractAlbum::GetUriL
+// ----------------------------------------------------------------------------
+//
+HBufC* CMPXDbAbstractAlbum::GetUriL(
+    TUint32 aId)
+    {
+    MPX_FUNC("CMPXDbAbstractAlbum::GetUriL");
+
+    RSqlStatement recordset(GetCategoryRecordL(aId));
+    CleanupClosePushL(recordset);
+
+    if (recordset.Next() != KSqlAtRow)
+        {
+        User::LeaveIfError(KErrNotFound);
+        }
+    HBufC* uri = MPXDbCommonUtil::GetColumnTextL(recordset, EAbstractAlbumUri).AllocL();
+    CleanupStack::PopAndDestroy(&recordset);
+    return uri;
+    }
+
+
 // ----------------------------------------------------------------------------
 // CMPXDbAbstractAlbum::UpdateMediaL
 // ----------------------------------------------------------------------------
@@ -277,41 +343,41 @@
     const TArray<TMPXAttribute>& aAttrs,
     CMPXMedia& aMedia)
     {
-     MPX_FUNC("CMPXDbAbstractAlbum::UpdateMediaL");
+    MPX_FUNC("CMPXDbAbstractAlbum::UpdateMediaL");
 
-       TInt count(aAttrs.Count());
-       for (TInt i = 0; i < count; ++i)
-           {
-           TInt contentId(aAttrs[i].ContentId());
-           TUint attributeId(aAttrs[i].AttributeId());
+    TInt count(aAttrs.Count());
+    for (TInt i = 0; i < count; ++i)
+       {
+       TInt contentId(aAttrs[i].ContentId());
+       TUint attributeId(aAttrs[i].AttributeId());
 
            if (contentId == KMPXMediaIdGeneral)
                {
                if (attributeId & EMPXMediaGeneralId)
                    {
+                   MPX_DEBUG1("    EMPXMediaGeneralId");
                    aMedia.SetTObjectValueL<TMPXItemId>(KMPXMediaGeneralId,
                        aRecord.ColumnInt64(EAbstractAlbumUniqueId));
                    }
                if (attributeId & EMPXMediaGeneralTitle)
                    {
+                   MPX_DEBUG1("    EMPXMediaGeneralTitle");
                    TPtrC title(MPXDbCommonUtil::GetColumnTextL(aRecord, EAbstractAlbumName));
                    aMedia.SetTextValueL(KMPXMediaGeneralTitle, title);
                    MPX_DEBUG2("    AbstractAlbumName[%S]", &title);
-                   }                          
+                   }
                if (attributeId & EMPXMediaGeneralCount)
                    {
+                   MPX_DEBUG1("    EMPXMediaGeneralCount");
                    TInt songCount = GetSongsCountL(KDbManagerAllDrives,
                                 aRecord.ColumnInt64(EAbstractAlbumUniqueId));
                    aMedia.SetTObjectValueL<TInt>(KMPXMediaGeneralCount, songCount );
                    }
-               if (attributeId & EMPXMediaGeneralDrive)
-                   {
+               if (attributeId & EMPXMediaGeneralDrive ||
+                    (attributeId & EMPXMediaGeneralUri))
+                   {                       
                    TUint32 volId(aRecord.ColumnInt64(EAbstractAlbumVolumeId));
                    TInt driveId = MPXDbCommonUtil::GetDriveIdMatchVolIdL(iDbManager.Fs(), volId);
-
-                   // LTAN-7GH6BZ, crash if eject memory card when adding song to existing AbstractAlbum
-                   // due to special timing issue, it is possible drive number is -1 and create a
-                   // panic when use for TDriveUnit
                    MPX_DEBUG3("volId = %d, driveId = %d", volId, driveId);
 
                    // handle possibly delay from framework notification
@@ -321,63 +387,100 @@
                        User::Leave(KErrNotReady);
                        }
                    TDriveUnit driveUnit(driveId);
-
-                   aMedia.SetTextValueL(KMPXMediaGeneralDrive, driveUnit.Name());
+                   if (attributeId & EMPXMediaGeneralUri)
+                       {                              
+                       TPtrC uri(MPXDbCommonUtil::GetColumnTextL(aRecord, EAbstractAlbumUri));
+                       aMedia.SetTextValueL(KMPXMediaGeneralUri, uri);
+                       MPX_DEBUG2("    AbstractAlbum URI[%S]", &uri);
+                       }
+                  if (attributeId & EMPXMediaGeneralDrive)
+                       {
+                       aMedia.SetTextValueL(KMPXMediaGeneralDrive, driveUnit.Name());
+                       }
+                   }
+               } // end if contentId == KMPXMediaIdGeneral
 
-                   }
-               } // end if contentId == KMPXMediaIdGeneral          
            else if ( contentId == KMPXMediaIdMusic)
                {
                if (attributeId & EMPXMediaMusicAlbumArtist)
-                   {         
+                   {
+                   MPX_DEBUG1("    EMPXMediaMusicAlbumArtist");
                    TPtrC albumartist(MPXDbCommonUtil::GetColumnTextL(aRecord, EAbstractAlbumArtist));
                    aMedia.SetTextValueL(KMPXMediaMusicAlbumArtist, albumartist);
-                   
-                  
-                   
                    MPX_DEBUG2("    albumartist[%S]", &albumartist);
-                   } 
-               if (attributeId & EMPXMediaMusicGenre)
-                   {                 
-                   TPtrC genre(MPXDbCommonUtil::GetColumnTextL(aRecord, EAbstractAlbumGenre));
-                   aMedia.SetTextValueL(KMPXMediaMusicGenre, genre);
-                   MPX_DEBUG2("    Genre[%S]", &genre);
                    }
                }
-               
+
            } // end for
        aMedia.SetTObjectValueL<TMPXGeneralType>(KMPXMediaGeneralType, EMPXItem);
        aMedia.SetTObjectValueL<TMPXGeneralCategory>(KMPXMediaGeneralCategory, EMPXAbstractAlbum);
     }
 
+// ----------------------------------------------------------------------------
+// CMPXDbAbstractAlbum::GetAllItemsWithNoSongL
+// ----------------------------------------------------------------------------
+//
+void CMPXDbAbstractAlbum::GetAllItemsWithNoSongL(RArray<TUint32>& aItemsIds)
+    {
+    MPX_FUNC("CMPXDbAbstractAlbum::GetAllItemsWithNoSongL");
+    RSqlStatement recordset(iDbManager.ExecuteSelectQueryL(KQueryAbstractAlbumsWithNoSong));
+    CleanupClosePushL(recordset);
+
+    TInt err(KErrNone);
+    while ((err = recordset.Next()) == KSqlAtRow)
+        {
+        TUint32 uniqueID(recordset.ColumnInt64(EAbstractAlbumUniqueId));
+        aItemsIds.AppendL(uniqueID);
+        }
+    CleanupStack::PopAndDestroy(&recordset);
+    if (err!= KSqlAtEnd)
+        {
+        User::Leave(KErrCorrupt);
+        } 	
+    }
+
 
 // ----------------------------------------------------------------------------
-// CMPXDbAbstractAlbum::GenerateAlbumFieldsValuesL
+// CMPXDbAbstractAlbum::GenerateAbstractAlbumFieldsValuesL
 // ----------------------------------------------------------------------------
 //
 void CMPXDbAbstractAlbum::GenerateAbstractAlbumFieldsValuesL(const CMPXMedia& aMedia, CDesCArray& aFields, CDesCArray& aValues)
     {
     MPX_FUNC("CMPXDbAbstractAlbum::GenerateAbstractAlbumFieldsValuesL");
-//support Winlogo use case
-   if (aMedia.IsSupported(KMPXMediaGeneralTitle))
+    //support Winlogo use case
+    if (aMedia.IsSupported(KMPXMediaGeneralTitle))
         {
         TPtrC truncatedName(aMedia.ValueText(KMPXMediaGeneralTitle).Left(KMCMaxTextLen));
         MPXDbCommonUtil::AppendValueL(aFields, aValues, KMCCategoryName, truncatedName);
         }
-//support Winlogo use case
-   if (aMedia.IsSupported(KMPXMediaMusicAlbumArtist))
+    //support Winlogo use case
+    if (aMedia.IsSupported(KMPXMediaMusicAlbumArtist))
         {
         TPtrC truncatedAlbumArtist(aMedia.ValueText(KMPXMediaMusicAlbumArtist).Left(KMCMaxTextLen));
         MPXDbCommonUtil::AppendValueL(aFields, aValues, KMCMusicAlbumArtist, truncatedAlbumArtist);
         }
-   if (aMedia.IsSupported(KMPXMediaMusicGenre))
+     }
+
+// ----------------------------------------------------------------------------
+// CMPXDbAbstractAlbum::DeleteAbstractAlbumEntryL
+// ----------------------------------------------------------------------------
+//
+void CMPXDbAbstractAlbum::DeleteAbstractAlbumEntryL(
+    TUint32 aAbstractAlbumId, TInt aDriveId)
+    {
+    MPX_FUNC("CMPXDbAbstractAlbum::DeleteAbstractAlbumEntryL");
+
+    //delete entry from table        
+    if (aDriveId)
+        DeleteCategoryL(aAbstractAlbumId, aDriveId);
+    else
         {
-        TPtrC truncatedGenre(aMedia.ValueText(KMPXMediaMusicGenre).Left(KMCMaxTextLen));
-        MPXDbCommonUtil::AppendValueL(aFields, aValues, KMCMusicGenre, truncatedGenre);    
+        TInt drive = MPXDbCommonUtil::GetDriveIdMatchVolIdL(iDbManager.Fs(),
+        ExecuteIntQueryL(KCriterionCategoryVolumeId, aAbstractAlbumId));
+        DeleteCategoryL(aAbstractAlbumId, drive);
         }
     }
 
-
 // ----------------------------------------------------------------------------
 // CMPXDbAlbum::CreateTableL
 // ----------------------------------------------------------------------------
@@ -420,8 +523,9 @@
 //
 CMPXDbAbstractAlbum::CMPXDbAbstractAlbum(
     CMPXDbManager& aDbManager,
-    TMPXGeneralCategory aCategory) :
-    CMPXDbCategory(aDbManager, aCategory)
+    TMPXGeneralCategory aCategory, RFs& aFs) :
+    CMPXDbCategory(aDbManager, aCategory),
+    iFs(aFs)
     {
     MPX_FUNC("CMPXDbAbstractAlbum::CMPXDbAbstractAlbum");
     }
@@ -438,26 +542,27 @@
 #ifdef RD_MPX_TNM_INTEGRATION
     // Create Thumbnail Manager instance. This object is the observer.
     iTNManager = CThumbnailManager::NewL( *this );
+    iRenameTN = EFalse;
 #endif //RD_MPX_TNM_INTEGRATION
     }
 
 
 
 // ---------------------------------------------------------------------------
-// CMPXDbAbstractAlbum::ThumbnailReady 
+// CMPXDbAbstractAlbum::ThumbnailReady
 // Callback but not used here
 // ---------------------------------------------------------------------------
-void CMPXDbAbstractAlbum::ThumbnailPreviewReady( 
+void CMPXDbAbstractAlbum::ThumbnailPreviewReady(
         MThumbnailData& /*aThumbnail*/, TThumbnailRequestId /*aId*/ )
     {
     }
-        
+
 
 // ---------------------------------------------------------------------------
 // CMPXDbAbstractAlbum::ThumbnailReady
 // Callback but not used here
 // ---------------------------------------------------------------------------
-void CMPXDbAbstractAlbum::ThumbnailReady( TInt /*aError*/, 
+void CMPXDbAbstractAlbum::ThumbnailReady( TInt /*aError*/,
         MThumbnailData& /*aThumbnail*/, TThumbnailRequestId /*aId*/ )
     {
     }
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbcategory.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbcategory.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -212,14 +212,19 @@
 #endif //RD_MPX_COLLECTION_CACHE
             }
 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
-          else if (criterion == KMPXMediaGeneralUri)
-                 {  
-                 TUint32 itemId(MPXDbCommonUtil::GenerateUniqueIdL(iDbManager.Fs(), iCategory,
-                       aCriteria.ValueText(KMPXMediaGeneralUri), (iCategory != EMPXGenre)));   
-                   HBufC* critStr = PreProcessStringLC(KCriterionCategoryUniqueId);
-                   MPXDbCommonUtil::AddSqlCriterionL(*criteriaArray, *critStr, itemId);
-             CleanupStack::PopAndDestroy(critStr);
-             }
+        else if (criterion == KMPXMediaGeneralUri)
+            {
+            //only Genre and  AbstractAlbum are not case sensitive
+            TBool caseSensitive = ETrue;            
+            if ((iCategory == EMPXGenre) || (iCategory == EMPXAbstractAlbum))
+                 caseSensitive = EFalse;
+                      
+            TUint32 itemId(MPXDbCommonUtil::GenerateUniqueIdL(iDbManager.Fs(), iCategory,
+                 aCriteria.ValueText(KMPXMediaGeneralUri), caseSensitive));   
+            HBufC* critStr = PreProcessStringLC(KCriterionCategoryUniqueId);
+            MPXDbCommonUtil::AddSqlCriterionL(*criteriaArray, *critStr, itemId);
+            CleanupStack::PopAndDestroy(critStr);
+            }
         else if (criterion == KMPXMediaGeneralDrive)
             {
             const TDesC& drive(aCriteria.ValueText(KMPXMediaGeneralDrive));
@@ -257,8 +262,12 @@
     const TUint32 aId,
     TInt aDriveId,
     CMPXMessageArray* aItemChangedMessages,
-    TBool& aItemExist,
-    TBool /*aMTPInUse*/)
+    TBool& aItemExist
+#ifdef ABSTRACTAUDIOALBUM_INCLUDED
+    ,
+    TBool /*aMTPInUse*/
+#endif //ABSTRACTAUDIOALBUM_INCLUDED
+)
     {
     MPX_FUNC("CMPXDbCategory::DecrementSongsForCategoryL");
 
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbhandler.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbhandler.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -178,9 +178,9 @@
     iDbAlbum = CMPXDbAlbum::NewL(*iDbManager, EMPXAlbum, *this);
     iDbGenre = CMPXDbGenre::NewL(*iDbManager, EMPXGenre);
     iDbComposer = CMPXDbComposer::NewL(*iDbManager, EMPXComposer);
-#ifdef ABSTRACTAUDIOALBUM_INCLUDED  
-    iDbAbstractAlbum = CMPXDbAbstractAlbum::NewL(*iDbManager, EMPXAbstractAlbum);
-#endif // ABSTRACTAUDIOALBUM_INCLUDED 
+#ifdef ABSTRACTAUDIOALBUM_INCLUDED
+    iDbAbstractAlbum = CMPXDbAbstractAlbum::NewL(*iDbManager, EMPXAbstractAlbum, iFs);
+#endif // ABSTRACTAUDIOALBUM_INCLUDED
     iAutoPlaylist = CMPXDbAutoPlaylist::NewL(*iDbManager, iFs, iResource);
     iDbAuxiliary = CMPXDbAuxiliary::NewL(*iDbManager);
 
@@ -315,24 +315,22 @@
     MPX_FUNC("CMPXDbHandler::AddAbstractAlbumL");
 
     BeginTransactionL();
-   // TUint32 abstractAlbumId(0);
     TBool newRecord(EFalse);
     TInt err(KErrNone);
 
     TDriveUnit drive(aMedia.ValueText(KMPXMediaGeneralUri));
-    TPtrC name(aMedia.ValueText(KMPXMediaGeneralUri).Left(KMCMaxTextLen));
+    TPtrC uri(aMedia.ValueText(KMPXMediaGeneralUri).Left(KMCMaxTextLen));
+    TPtrC name(aMedia.ValueText(KMPXMediaGeneralTitle).Left(KMCMaxTextLen));
     TPtrC albumartist(aMedia.ValueText(KMPXMediaMusicAlbumArtist).Left(KMCMaxTextLen));
-    TPtrC genre(aMedia.ValueText(KMPXMediaMusicGenre).Left(KMCMaxTextLen));
-    
-    //only insert to AbstractAlbum table when it is new item  
-     TUint32 abstractAlbumId(MPXDbCommonUtil::GenerateUniqueIdL(iFs, EMPXAbstractAlbum, name, (EMPXAbstractAlbum!=EMPXGenre)));      
-   
+
+    //only insert to AbstractAlbum table when it is new item
+    TUint32 abstractAlbumId(MPXDbCommonUtil::GenerateUniqueIdL(iFs, EMPXAbstractAlbum, uri, EFalse));
+
     newRecord = !iDbAbstractAlbum->CategoryItemExistsL(drive, abstractAlbumId);
-   
-    
-    if (newRecord)   
+
+    if (newRecord)
         {
-        MPX_TRAP(err, abstractAlbumId = iDbAbstractAlbum->AddItemL( name, albumartist, genre, drive, newRecord, (EMPXAbstractAlbum != EMPXGenre)));      
+        MPX_TRAP(err, abstractAlbumId = iDbAbstractAlbum->AddItemL(uri, name, albumartist, drive, newRecord, EFalse));
         if (iOutOfDisk && (err == KErrNotFound))
             {
             err = KErrDiskFull;
@@ -345,57 +343,134 @@
         }
     EndTransactionL(err);
 
-    return abstractAlbumId;  
+    return abstractAlbumId;
     }
 
 // ----------------------------------------------------------------------------
-// Update all songs which associate with AbstractAlbum in the collection
+// Update abstractalbum info to AbstractAlbum table and all songs which associate 
+// with AbstractAlbum in the collection
 // ----------------------------------------------------------------------------
 //
-CMPXDbActiveTask::TChangeVisibility CMPXDbHandler::UpdateAbstractAlbumSongsL(
+CMPXDbActiveTask::TChangeVisibility CMPXDbHandler::UpdateAbstractAlbumL(
     const CMPXMedia& aMedia,
     CMPXMessageArray& aItemChangedMessages)
     {
-    MPX_FUNC("CMPXDbHandler::UpdateAbstractAlbumSongsL");
+    MPX_FUNC("CMPXDbHandler::UpdateAbstractAlbumL");
 
     CMPXDbActiveTask::TChangeVisibility visibleChange(CMPXDbActiveTask::ENotVisibile);
-
+    TUint32 itemId(0);
     if (aMedia.IsSupported(KMPXMediaGeneralUri))
         {
-        const TDesC& art(aMedia.ValueText (KMPXMediaGeneralUri));
-    
-        TBool existRecord(EFalse); 
+        const TDesC& uri(aMedia.ValueText (KMPXMediaGeneralUri));
         TDriveUnit drive(aMedia.ValueText(KMPXMediaGeneralUri));
-        TUint32 rowId(MPXDbCommonUtil::GenerateUniqueIdL(iFs, EMPXAbstractAlbum, art, (EMPXAbstractAlbum != EMPXGenre)));    
-        //check if abstractAlbum in ABSTRACTALBUM table before update songs
-        existRecord = iDbAbstractAlbum->CategoryItemExistsL(drive, rowId);
-         
-        //update songs associated with abstractalbum only when abstractalbum associated already
-        //in the AbstractAlbum table     
-        if (existRecord)
-            {         
-            if (aMedia.IsSupported(KMPXMediaArrayContents))
+
+        //get Id based on new uri
+        itemId = MPXDbCommonUtil::GenerateUniqueIdL(iFs, EMPXAbstractAlbum, uri, EFalse);
+        if (!itemId)
+            {
+            User::Leave(KErrNotSupported);
+            }
+
+        //if updating to new item, need do renaming for AbstractAlbum: delete old one and insert a new entry to AbstractAlbum table
+        //if a new item, need update songs associated and renaming albstractalbum table
+        if (aMedia.IsSupported(KMPXMediaGeneralId))
+            {
+            MPX_DEBUG1("CMPXDbHandler::UpdateAbstractAlbumL, rename case");
+            
+            BeginTransactionL();
+            //get old id, for renaming
+            TInt err(KErrNone);
+            TUint32 oldId = (aMedia.ValueTObjectL<TMPXItemId>(KMPXMediaGeneralId)).iId2;
+            if (oldId && (oldId != itemId) )  //pass the old UID for renaming, do not care if new itemId exist or not
                 {
-
-                CMPXMediaArray* mediaArray = aMedia.Value<CMPXMediaArray>(KMPXMediaArrayContents);
-                User::LeaveIfNull(mediaArray);
+                //get old Uri based on old Id
+                HBufC* oldUri = iDbAbstractAlbum->GetUriL(oldId);
+                CleanupStack::PushL(oldUri);
+
+                //add and update new item to AbstractAlbum table
+                //old existing item field values need to be saved and added when adding new item                        
+                MPX_TRAP(err, itemId = iDbAbstractAlbum->AddUpdatedItemL(oldId, uri ));
+
+                if (iOutOfDisk && (err == KErrNotFound))
+                    {
+                    err = KErrDiskFull;
+                    }
+
+                MPXDbCommonUtil::AddItemChangedMessageL(aItemChangedMessages, itemId, EMPXItemInserted,
+                EMPXAbstractAlbum, KDBPluginUid);
+
+                //find and update all songs associated with oldId
+                RArray<TMPXAttribute> songAttributes;
+                CleanupClosePushL(songAttributes);
+                songAttributes.AppendL(KMPXMediaGeneralId);
+
+                CMPXMediaArray* mediaArray = CMPXMediaArray::NewL();
+                CleanupStack::PushL(mediaArray);
+
+                //get all songs associated
+                MPX_TRAP(err, iDbMusic->GetAllSongsForAbstractAlbumL(oldId, songAttributes.Array(), *mediaArray));
+                if (err == KErrNotFound)
+                    {
+                    // Leave with KErrNotFound
+                    MPX_DEBUG1("CMPXDbHandler::UpdateAbstractAlbumL, leave with not found");
+                    User::Leave(KErrNotFound);
+                    }
+
                 TInt count(mediaArray->Count());
+                MPX_DEBUG2("CMPXDbHandler::UpdateAbstractAlbumL, [%d] songs associated", count);
+                //go through all songs for updating
                 for (TInt i = 0; i < count; i++)
                     {
-                    CMPXMedia* element = mediaArray->AtL(i);
-                    element->SetTextValueL(KMPXMediaMusicAlbumArtFileName, art );
-                    visibleChange = UpdateSongL(*element, aItemChangedMessages);
+                    CMPXMedia* song = mediaArray->AtL(i);
+                    song->SetTextValueL(KMPXMediaMusicAlbumArtFileName, uri );
+                    visibleChange = UpdateSongL(*song, aItemChangedMessages);
                     }
-               }
-            else
-                {
-                iDbAbstractAlbum->UpdateItemL(rowId, aMedia, drive, &aItemChangedMessages);
+                CleanupStack::PopAndDestroy(mediaArray);
+                CleanupStack::PopAndDestroy(&songAttributes);
+
+                //rename TN
+                iDbAbstractAlbum->HandleTNL(*oldUri, uri, 0);
+                CleanupStack::PopAndDestroy(oldUri);
                 }
-          }
+            EndTransactionL(err);
+            }//renaming
+
+        //check if abstractAlbum exist in ABSTRACTALBUM table before update it
+        else if (iDbAbstractAlbum->CategoryItemExistsL(drive, itemId))
+            {
+            //support updating Name, AlbumArtist fields for AbstractAlbum table
+            iDbAbstractAlbum->UpdateItemL(itemId, aMedia, drive, &aItemChangedMessages);
+            }
         }
     return visibleChange;
-}
+    }
+
+// ----------------------------------------------------------------------------
+// Update all songs which associate with AbstractAlbum to new AbstractAlbum info 
+// in the collection
+// ----------------------------------------------------------------------------
+//
+CMPXDbActiveTask::TChangeVisibility CMPXDbHandler::UpdateSongsAbstractAlbumInfoL(
+    const CMPXMedia& aMedia,
+    CMPXMessageArray& aItemChangedMessages)
+    {
+    MPX_FUNC("CMPXDbHandler::UpdateSongsAbstractAlbumInfoL");
+    const TDesC& uri(aMedia.ValueText (KMPXMediaGeneralUri));
+    //need to update songs information to music table
+    CMPXMediaArray* mediaArray = aMedia.Value<CMPXMediaArray>(KMPXMediaArrayContents);
+    User::LeaveIfNull(mediaArray);
+    TInt count(mediaArray->Count());
+    CMPXDbActiveTask::TChangeVisibility visibleChange(CMPXDbActiveTask::ENotVisibile);
+    for (TInt i = 0; i < count; i++)
+        {
+        CMPXMedia* mediaSong = mediaArray->AtL(i);
+        mediaSong->SetTextValueL(KMPXMediaMusicAlbumArtFileName, uri );
+        visibleChange = UpdateSongL(*mediaSong, aItemChangedMessages);
+        }
+    return visibleChange;
+    }
 #endif // ABSTRACTAUDIOALBUM_INCLUDED
+
 // ----------------------------------------------------------------------------
 // Update a song in the collection
 // ----------------------------------------------------------------------------
@@ -589,40 +664,10 @@
 //
 void CMPXDbHandler::RemoveAbstractAlbumL(
     TUint32 aAbstractAlbumId,
-    CDesCArray& aUriArray,
-    CMPXMessageArray& aItemChangedMessages)
+    CMPXMessageArray& aItemChangedMessages, TBool aFileDeleted)
     {
     MPX_FUNC("CMPXDbHandler::RemoveAbstractAlbumL");
-
-    BeginTransactionL();
-    MPX_TRAPD(err, DoRemoveAbstractAlbumL(aAbstractAlbumId, aUriArray, aItemChangedMessages));
-    EndTransactionL(err);
-    }
-
-// ----------------------------------------------------------------------------
-// Remove specified abstractalbum
-// ----------------------------------------------------------------------------
-//
-void CMPXDbHandler::DoRemoveAbstractAlbumL(
-    TUint32 aAbstractAlbumId,
-    CDesCArray& aUriArray,
-    CMPXMessageArray& aItemChangedMessages)
-    {
-    MPX_FUNC("CMPXDbHandler::DoRemoveAbstractAlbumL");
-
-
-    HBufC* uri(iDbAbstractAlbum->DeleteAbstractAlbumL(aAbstractAlbumId));
-    if (uri)
-        {
-        CleanupStack::PushL(uri);
-        aUriArray.AppendL(*uri);
-        CleanupStack::PopAndDestroy(uri);
-        }
-
-    MPXDbCommonUtil::AddItemChangedMessageL(aItemChangedMessages, aAbstractAlbumId, EMPXItemDeleted,
-        EMPXAbstractAlbum, KDBPluginUid);
-
-   
+    iDbAbstractAlbum->RemoveAbstractAlbumL(aAbstractAlbumId, aItemChangedMessages, aFileDeleted);
     }
 #endif // ABSTRACTAUDIOALBUM_INCLUDED
 
@@ -889,7 +934,7 @@
     const TDesC& aUri)
     {
     MPX_FUNC("CMPXDbHandler::GetAbstractAlbumIdMatchingUriL");
-    return MPXDbCommonUtil::GenerateUniqueIdL(iFs, EMPXAbstractAlbum, aUri, ETrue);
+    return MPXDbCommonUtil::GenerateUniqueIdL(iFs, EMPXAbstractAlbum, aUri, EFalse);
     }
 #endif // ABSTRACTAUDIOALBUM_INCLUDED
 
@@ -1501,7 +1546,6 @@
             iOutOfDisk = ETrue;
             }
     }
-    
 #ifdef __RAMDISK_PERF_ENABLE
 	iDbManager->CopyDBsToRamL();
 #endif //__RAMDISK_PERF_ENABLE
@@ -1527,6 +1571,13 @@
         curTime.HomeTime();
         SetLastRefreshedTimeL(curTime);
         }
+
+#ifdef ABSTRACTAUDIOALBUM_INCLUDED
+    //for AbstractAlbum garbage collection
+    //can not leave
+    TRAP_IGNORE( AbstractAlbumCleanUpL() );
+#endif
+   
 #ifdef __RAMDISK_PERF_ENABLE
     iDbManager->CopyDBsFromRamL();
 #endif //__RAMDISK_PERF_ENABLE
@@ -1567,15 +1618,24 @@
     iMtpInUse = EFalse;
     iOpOnDbCount = 0;
     iDbManager->CommitL();
+    TInt err = KErrNone;
+
 
 #ifdef __RAMDISK_PERF_ENABLE
-    TRAPD(err, iDbManager->CopyDBsFromRamL());
+    TRAP(err, iDbManager->CopyDBsFromRamL());
     if ( err != KErrNone )
         {
         MPX_DEBUG2("CMPXDbHandler::MtpEndL error=%d", err);
         }
 #endif //__RAMDISK_PERF_ENABLE
-    
+
+#ifdef ABSTRACTAUDIOALBUM_INCLUDED
+    TRAP(err, RemoveAbstractAlbumsWithNoSongL());
+    if ( err != KErrNone )
+        {
+        MPX_DEBUG2("CMPXDbHandler::MtpEndL error happened when cleanup albstractalbum with no songs association[%d]", err);
+        }
+#endif
     MPX_DEBUG1("<--CMPXDbHandler::MtpEndL");
     }
 
@@ -2302,6 +2362,84 @@
     MPXDbCommonUtil::AddItemChangedMessageL(aItemChangedMessages, aSongId, EMPXItemDeleted,
         EMPXSong, KDBPluginUid);
     }
+    
+#ifdef ABSTRACTAUDIOALBUM_INCLUDED  
+// ----------------------------------------------------------------------------
+// Remove abstractalbums which have no songs associated.
+// ----------------------------------------------------------------------------
+//
+void CMPXDbHandler::RemoveAbstractAlbumsWithNoSongL()
+    {
+    MPX_FUNC("CMPXDbHandler::RemoveAbstractAlbumsWithNoSongL");
+    
+    BeginTransactionL();
+    RArray<TUint32> iItemsIds;
+    CleanupClosePushL(iItemsIds);
+      //get all abstractalbum with no songs associated.
+    iDbAbstractAlbum->GetAllItemsWithNoSongL(iItemsIds);
+    TInt count = iItemsIds.Count();
+    TInt err = KErrNone;
+    if (count)
+        {
+        MPX_DEBUG2("CMPXDbHandler::RemoveAbstractAlbumsWithNoSongL, abstractalbum count[%d] ", iItemsIds.Count());
+        CMPXMessageArray* itemChangedMessages = CMPXMediaArray::NewL();
+        CleanupStack::PushL(itemChangedMessages);
+
+        //go through each one to delete
+        for (TInt i=0; i< count; i++)
+            {
+            TRAP(err, RemoveAbstractAlbumL(iItemsIds[i], *itemChangedMessages, EFalse));
+            if (err != KErrNone)
+                {
+                MPX_DEBUG2("CMPXDbHandler::RemoveAbstractAlbumsWithNoSongL, error happens when delete abstractalbum, err ", err);
+                }
+            }
+       CleanupStack::PopAndDestroy(itemChangedMessages);
+       }
+    CleanupStack::PopAndDestroy(&iItemsIds);
+    EndTransactionL(err); 
+  }
+  
+// ----------------------------------------------------------------------------
+// Remove .alb entry from AbstractAlnum table, TN table if .alb files deleted 
+// from file manager when refresh library
+// ----------------------------------------------------------------------------
+//
+void CMPXDbHandler::AbstractAlbumCleanUpL()
+    {
+    MPX_FUNC("CMPXDbHandler::AbstractAlbumCleanUpL");
+    RArray<TMPXAttribute> attributes;
+    CleanupClosePushL(attributes);
+    attributes.AppendL(KMPXMediaGeneralUri);
+    CMPXMediaArray* mediaArray = CMPXMediaArray::NewL();
+    CleanupStack::PushL(mediaArray);
+    
+    iDbAbstractAlbum->GetAllCategoryItemsL(attributes.Array(), *mediaArray);
+
+    TInt count(mediaArray->Count());
+    if (count)
+        {
+        CMPXMessageArray* itemChangedMessages = CMPXMediaArray::NewL();
+        CleanupStack::PushL(itemChangedMessages);
+        for (TInt i = 0; i < count; i++)
+            {
+            CMPXMedia* element = mediaArray->AtL(i);
+            const TDesC& uri = element->ValueText(KMPXMediaGeneralUri);                                 
+
+            //check if the file exists in file system
+            if (!(BaflUtils::FileExists(iFs, uri)))
+                {
+                //generate abstractalbum UID with the Uri
+                TUint32 abstractAlbumId(MPXDbCommonUtil::GenerateUniqueIdL(iFs, EMPXAbstractAlbum, uri, EFalse));
+                RemoveAbstractAlbumL(abstractAlbumId, *itemChangedMessages, ETrue);             
+                }
+            }
+            CleanupStack::PopAndDestroy(itemChangedMessages);
+        }
+        CleanupStack::PopAndDestroy(mediaArray);       
+        CleanupStack::PopAndDestroy(&attributes);     
+    }
+#endif //ABSTRACTAUDIOALBUM_INCLUDED
 
 // ----------------------------------------------------------------------------
 // CMPXDbHandler::DoCleanupDeletedRecordsL
@@ -2425,8 +2563,7 @@
         TInt attrCount(aAttrs.Count());
         if ( attrCount > 1 || (attrCount == 1 && !(aAttrs[0] == KMPXMediaGeneralId)) )
             {
-            TInt abstractAlbumDrive(iDbAbstractAlbum->GetDriveIdL(abstractAlbumId));
-            MPX_TRAPD(err, iDbMusic->GetAllSongsForAbstractAlbumL(abstractAlbumDrive, abstractAlbumId, aAttrs, aMediaArray));
+            MPX_TRAPD(err, iDbMusic->GetAllSongsForAbstractAlbumL( abstractAlbumId, aAttrs, aMediaArray));
         if (err == KErrNotFound)
             {
             //
@@ -2987,9 +3124,9 @@
     TInt aDriveId,
     CMPXMessageArray* aItemChangedMessages,
     TBool& aItemExist
-#ifdef ABSTRACTAUDIOALBUM_INCLUDED    
-      ,const TDesC& aAlbumArtist,
-    const TDesC& aGenre
+#ifdef ABSTRACTAUDIOALBUM_INCLUDED
+    ,const TDesC& aUri
+    ,const TDesC& aAlbumArtist
 #endif // ABSTRACTAUDIOALBUM_INCLUDED
     )
     {
@@ -2998,21 +3135,28 @@
     MPX_PERF_START(CMPXDbHandler_AddCategoryItemL);
 
     TBool newRecord(EFalse);
-#ifdef ABSTRACTAUDIOALBUM_INCLUDED    
-    TUint32 id(0);   
+#ifdef ABSTRACTAUDIOALBUM_INCLUDED
+    TUint32 id(0);
     //for AbstractAlbum, SetAbstractAlbum, associate songs with abstractalbum.
     //only called with newRecord as EFalse
     //increment songCount if id exist in AbstractAlbum table, otherwise do nothing.
+
+    //only Genre, AbstractAlbum are not case sensitive
+    TBool caseSensitive = ETrue;
+    if ((aCategory == EMPXGenre) || (aCategory == EMPXAbstractAlbum))
+        caseSensitive = EFalse;
+
     if (aCategory == EMPXAbstractAlbum)
-        {     
-        id = iDbAbstractAlbum->AddItemL( aName, aAlbumArtist, aGenre, aDriveId, newRecord, (aCategory != EMPXGenre));     
-        }    
+        {
+        id =  iDbAbstractAlbum->AddItemL(aUri, aName, aAlbumArtist, aDriveId, newRecord, caseSensitive);
+        }
     else
         {
-        id = DbCategoryL(aCategory)->AddItemL(aName, aDriveId, newRecord, (aCategory != EMPXGenre));
-#else 
+        id = DbCategoryL(aCategory)->AddItemL(aName, aDriveId, newRecord, caseSensitive);
+#else
     TUint32 id(DbCategoryL(aCategory)->AddItemL(aName, aDriveId, newRecord, (aCategory != EMPXGenre)));
 #endif // ABSTRACTAUDIOALBUM_INCLUDED
+
     if (newRecord && aItemChangedMessages)
         {
         MPXDbCommonUtil::AddItemChangedMessageL(*aItemChangedMessages, id, EMPXItemInserted,
@@ -3022,7 +3166,7 @@
     // and it is NOT a new record,
     // we should send the item number changed message
     else if ( ( aCategory == EMPXGenre || aCategory == EMPXComposer ) &&
-    		!newRecord && aItemChangedMessages )
+            !newRecord && aItemChangedMessages )
         {
         MPXDbCommonUtil::AddItemChangedMessageL(*aItemChangedMessages, id, EMPXItemModified,
             aCategory, KDBPluginUid);
@@ -3032,7 +3176,6 @@
        }
 #endif // ABSTRACTAUDIOALBUM_INCLUDED
     MPX_PERF_END(CMPXDbHandler_AddCategoryItemL);
-
     return id;
     }
 
@@ -3220,10 +3363,10 @@
 // ----------------------------------------------------------------------------------------------------------
 // CMPXDbHandler::HandleGetAlbumNameForSongL
 // ----------------------------------------------------------------------------------------------------------
-// 
+//
 HBufC* CMPXDbHandler::HandleGetAlbumNameFromIdL(TUint32 aId)
     {
-    return iDbAbstractAlbum->GetNameL(aId);
+    return iDbAbstractAlbum->GetUriL(aId);
     }
 #endif // ABSTRACTAUDIOALBUM_INCLUDED
 // End of file
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbmusic.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbmusic.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -112,7 +112,7 @@
     iObserver(aObserver)
 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
     ,iArtNeedUpdated(ETrue)
-#endif	
+#endif
     {
     MPX_FUNC("CMPXDbMusic::CMPXDbMusic");
     }
@@ -260,19 +260,19 @@
         if(iArtNeedUpdated)
             {
 #endif // ABSTRACTAUDIOALBUM_INCLUDED
-		    // Update Album table
-		    if (aMedia.IsSupported(KMPXMediaMusicAlbumArtFileName) || aMedia.IsSupported(KMPXMediaMusicArtist))
-		        {
-		        TUint32 albumId = recordset.ColumnInt64(EMusicAlbum);
-		        iObserver.UpdateCategoryItemL(EMPXAlbum, albumId, aMedia, driveUnit, aItemChangedMessages);
-		        }
+	        // Update Album table
+	        if (aMedia.IsSupported(KMPXMediaMusicAlbumArtFileName) || aMedia.IsSupported(KMPXMediaMusicArtist))
+	            {
+	            TUint32 albumId = recordset.ColumnInt64(EMusicAlbum);
+	            iObserver.UpdateCategoryItemL(EMPXAlbum, albumId, aMedia, driveUnit, aItemChangedMessages);
+	            }
 
-		    // Update Artist table
-		    if ( aMedia.IsSupported(KMPXMediaMusicAlbumArtFileName) )
-		        {
-		        TUint32 artistId = recordset.ColumnInt64(EMusicArtist);
-		        iObserver.UpdateCategoryItemL(EMPXArtist, artistId, aMedia, driveUnit, aItemChangedMessages);
-		        }
+	        // Update Artist table
+	        if ( aMedia.IsSupported(KMPXMediaMusicAlbumArtFileName) )
+	            {
+	            TUint32 artistId = recordset.ColumnInt64(EMusicArtist);
+	            iObserver.UpdateCategoryItemL(EMPXArtist, artistId, aMedia, driveUnit, aItemChangedMessages);
+	            }
 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
             }
         iArtNeedUpdated = ETrue;  //reset flag
@@ -822,13 +822,12 @@
 // ----------------------------------------------------------------------------
 //
 void CMPXDbMusic::GetAllSongsForAbstractAlbumL(
-    TInt aDrive,
-    TInt aAbstractAlbumId,
+    TUint aAbstractAlbumId,
     const TArray<TMPXAttribute>& aAttrs,
     CMPXMediaArray& aMediaArray)
     {
-    MPX_FUNC("CMPXDbMusic::GetAllSongsL");
-    ExecuteMediaQueryL(aDrive, aAttrs, aMediaArray, KQueryMusicGetSongsForAbstractAlbum(), aAbstractAlbumId);
+    MPX_FUNC("CMPXDbMusic::GetAllSongsForAbstractAlbumL");
+    ExecuteMediaQueryL(aAttrs, aMediaArray, KQueryMusicGetSongsForAbstractAlbum(), aAbstractAlbumId);
     }
 #endif // ABSTRACTAUDIOALBUM_INCLUDED
 
@@ -1866,12 +1865,12 @@
 #ifdef ABSTRACTAUDIOALBUM_INCLUDED 
                     TParsePtrC parse(albumArtFilename);
                     TPtrC ext(parse.Ext());
-					//set flag to false, so .alb will not overwrite art field in album, artist table 
-					// when song with embedded art
-	                if ((ext.CompareF(KAbstractAlbumExt)== 0) && containEmbeddedArt)
-	                    {
-	                    iArtNeedUpdated = EFalse;
-	                    }
+                    //set flag to false, so .alb will not overwrite art field in album, artist table 
+                    // when song with embedded art
+                    if ((ext.CompareF(KAbstractAlbumExt)== 0) && containEmbeddedArt)
+                        {
+                        iArtNeedUpdated = EFalse;
+                        }
                           
                     if ( ((ext.CompareF(KAbstractAlbumExt)== 0) && !containEmbeddedArt) || (ext.CompareF(KAbstractAlbumExt)!= 0))                    
                         {
@@ -2020,7 +2019,7 @@
             } // end switch
         } // end for
 
-    // get the current artist/album/genre/composer
+    // get the current artist/album/genre/composer/abstractalbum
     // this is required because the recordset may be reused by the code below
     TUint32 artistId(0);
     TUint32 albumId(0);
@@ -2267,7 +2266,13 @@
                 {
                 // validate the drive letter, TDriveUnit panics if given drive isn't between
                 // 'A' to 'Z'
-                TDriveUnit driveUnit(aCriteria.ValueText(KMPXMediaGeneralDrive));
+                const TDesC& drive = aCriteria.ValueText(KMPXMediaGeneralDrive);
+                TInt driveInt = 0;
+                if( drive == KNullDesC || RFs::CharToDrive( drive[0], driveInt )!= KErrNone )
+                    {
+                    User::Leave(KErrArgument);
+                    }               
+                TDriveUnit driveUnit(drive);
                 MPXDbCommonUtil::AddSqlCriterionL(*sqlCriteria, KCriterionMusicVolume,
                     MPXDbCommonUtil::GetVolIdMatchDriveIdL(iDbManager.Fs(), driveUnit));
                 volumeAdded = ETrue;
@@ -2389,9 +2394,20 @@
             TPtrC name(aMedia.ValueText(aAttribute).Left(KMCMaxTextLen));
 
             // construct the new ID for the category record
+#ifdef ABSTRACTAUDIOALBUM_INCLUDED
+            // genre and abstractalbum are not case sensitive
+            TBool caseSensitive = ETrue;         
+            if ((aCategory == EMPXGenre) || (aCategory == EMPXAbstractAlbum))
+                caseSensitive = EFalse;
+                      
+            aItemId = MPXDbCommonUtil::GenerateUniqueIdL(iDbManager.Fs(), aCategory,
+                name, caseSensitive);
+
+#else
             // only genre is not case sensitive
             aItemId = MPXDbCommonUtil::GenerateUniqueIdL(iDbManager.Fs(), aCategory,
                 name, (aCategory != EMPXGenre));
+#endif
             if (!aOldId || (aOldId != aItemId))
                 {
                 // only add if the ID changed,
@@ -2401,20 +2417,28 @@
                     {
                     if (aMedia.ValueTObjectL<TMPXGeneralCategory>(KMPXMediaGeneralCategory) == EMPXSong )
                         {
-                        iObserver.AddCategoryItemL(aCategory, name, aDriveId,
-                            aItemChangedMessages, itemAdded, KNullDesC, KNullDesC);                                 
+                        iObserver.AddCategoryItemL(aCategory, KNullDesC, aDriveId,
+                          aItemChangedMessages, itemAdded, name, KNullDesC);                
                         }
                     else
-                        {         
-                        TPtrC albumartist(aMedia.ValueText(KMPXMediaMusicAlbumArtist).Left(KMCMaxTextLen));
-                        //get AlbumArt, Genre for AbstractAlbum
-                        MPX_DEBUG2("    Music albumartist[%S]", &albumartist);            
-                        TPtrC genre(aMedia.ValueText(KMPXMediaMusicGenre).Left(KMCMaxTextLen));                               
-                        MPX_DEBUG2("    Music Genre[%S]", &genre);    
-                           
-                        // ignore the return value
-                        iObserver.AddCategoryItemL(aCategory, name, aDriveId,
-                          aItemChangedMessages, itemAdded, albumartist, genre);    
+                        {     
+                        TPtrC albumartist(KNullDesC);
+                        TPtrC abstractAlbumName(KNullDesC);
+                        if (aMedia.IsSupported(KMPXMediaMusicAlbumArtist) )
+                            {                         
+                            albumartist.Set(aMedia.ValueText(KMPXMediaMusicAlbumArtist).Left(KMCMaxTextLen));
+                            //get AlbumArt AbstractAlbum
+                            MPX_DEBUG2("     albumartist[%S]", &albumartist);
+                             }
+                        if (aMedia.IsSupported(KMPXMediaGeneralTitle) )
+                          {                         
+                          abstractAlbumName.Set(aMedia.ValueText(KMPXMediaGeneralTitle).Left(KMCMaxTextLen));
+                          MPX_DEBUG2("     abstractAlbumName[%S]", &abstractAlbumName);
+                          }                                                     
+                      // ignore the return value 
+                      
+                      iObserver.AddCategoryItemL(aCategory, abstractAlbumName, aDriveId,
+                          aItemChangedMessages, itemAdded, name, albumartist);       
                         }
                     }
                 else
@@ -2429,24 +2453,29 @@
             }
         else
             {
+#ifdef ABSTRACTAUDIOALBUM_INCLUDED
+            // genre and abstractalbum are not case sensitive
+            aItemId = MPXDbCommonUtil::GenerateUniqueIdL(iDbManager.Fs(), aCategory, KNullDesC,
+                (aCategory != EMPXGenre)&&(aCategory != EMPXAbstractAlbum));
+#else
             // only genre is not case sensitive
             aItemId = MPXDbCommonUtil::GenerateUniqueIdL(iDbManager.Fs(), aCategory, KNullDesC,
                 (aCategory != EMPXGenre));
+#endif
             if (!aOldId || (aOldId != aItemId))
                 {
 #ifdef ABSTRACTAUDIOALBUM_INCLUDED                                        
                 if(aCategory == EMPXAbstractAlbum)
-                    {              
-                    //get AlbumArt, Genre for AbstractAlbum
+                    {                         
+                    //get AlbumArt for AbstractAlbum
                     TPtrC albumartist(aMedia.ValueText(KMPXMediaMusicAlbumArtist).Left(KMCMaxTextLen));
-                    MPX_DEBUG2("    Music albumartist[%S]", &albumartist);
-                    TPtrC genre(aMedia.ValueText(KMPXMediaMusicGenre).Left(KMCMaxTextLen));
-                    MPX_DEBUG2("    Music Genre[%S]", &genre);    
-                                           
+                    MPX_DEBUG2("    Music albumartist[%S]", &albumartist);                       
+                    TPtrC abstractAlbumName(aMedia.ValueText(KMPXMediaGeneralTitle).Left(KMCMaxTextLen));
+                    MPX_DEBUG2("    Music abstractAlbumName[%S]", &abstractAlbumName);     
                     // ignore the return value
-                    iObserver.AddCategoryItemL(aCategory, KNullDesC, aDriveId,
-                    aItemChangedMessages, itemAdded, albumartist, genre);      
-                    }
+                    iObserver.AddCategoryItemL(aCategory, abstractAlbumName, aDriveId,
+                       aItemChangedMessages, itemAdded, KNullDesC, albumartist);     
+                    }            
                else
 #endif // ABSTRACTAUDIOALBUM_INCLUDED        
                       {              
@@ -2457,12 +2486,8 @@
                  updated = ETrue;
                  }
             }
-#ifdef ABSTRACTAUDIOALBUM_INCLUDED
-            //no need to delete old item for abstractalbum
-            if (aOldId && (aOldId != aItemId) && (aCategory != EMPXAbstractAlbum))
-#else
-            if (aOldId && (aOldId != aItemId))
-#endif // ABSTRACTAUDIOALBUM_INCLUDED
+
+        if (aOldId && (aOldId != aItemId))
             {
             iObserver.DeleteSongForCategoryL(aCategory, aOldId, aDriveId,
                 aItemChangedMessages, itemNotRemoved);
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbplugin.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/src/mpxdbplugin.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -2590,11 +2590,11 @@
             mediaId = iDbHandler->GetPlaylistIdMatchingUriL(uri);
             iDbHandler->RemovePlaylistL(mediaId, *fp, *itemChangedMessages);
             }
-#ifdef ABSTRACTAUDIOALBUM_INCLUDED            
+#ifdef ABSTRACTAUDIOALBUM_INCLUDED
         else if (category == EMPXAbstractAlbum )
             {
             mediaId = iDbHandler->GetAbstractAlbumIdMatchingUriL(uri);
-            iDbHandler->RemoveAbstractAlbumL(mediaId, *fp, *itemChangedMessages);            
+            iDbHandler->RemoveAbstractAlbumL(mediaId, *itemChangedMessages, EFalse);
             }
 #endif // ABSTRACTAUDIOALBUM_INCLUDED
         else
@@ -3530,18 +3530,14 @@
        case EMPXAbstractAlbum:
             {
             if (aMedia.IsSupported(KMPXMediaGeneralUri))
-                { 
-                   
+                {
+                //add abstractalbum to AbstractAlbum table
                 itemId = iDbHandler->AddAbstractAlbumL(aMedia, &aMessageArray);
-            
+
+                //in case aMedia as mediaArray which contains songs as arrayContents, need to update all songs associated
                 if ( aMedia.IsSupported(KMPXMediaArrayContents))
                     {
-                    //need to update songs information to music table           
-                    CMPXMediaArray* array = aMedia.Value<CMPXMediaArray>(KMPXMediaArrayContents);                        
-                    if (array->Count())            
-                        {                  
-                        iDbHandler->UpdateAbstractAlbumSongsL(aMedia, aMessageArray);
-                        }
+                    iDbHandler->UpdateSongsAbstractAlbumInfoL(aMedia, aMessageArray);
                     }
                 }
             else
@@ -3719,7 +3715,20 @@
 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
         case EMPXAbstractAlbum:
             {
-            visibleChange = iDbHandler->UpdateAbstractAlbumSongsL(aMedia, aMessageArray);
+            //update all songes which associate with ABSTRACTALBUM
+            if (aMedia.IsSupported(KMPXMediaGeneralUri))
+                {
+                //in case aMedia as mediaArray which contains songs as arrayContents, need to update all songs associated
+                if ( aMedia.IsSupported(KMPXMediaArrayContents))
+                    {
+                    iDbHandler->UpdateSongsAbstractAlbumInfoL(aMedia, aMessageArray);
+                    }
+                //only update field values in abstractalbum table, or renaming (change uri) for abstractalbum table
+                else
+                    {
+                    visibleChange = iDbHandler->UpdateAbstractAlbumL(aMedia, aMessageArray);
+                    }
+                }
             }
             break;
 #endif // ABSTRACTAUDIOALBUM_INCLUDED
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitepodcastdbplugin/inc/mpxdbpodcast.h	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitepodcastdbplugin/inc/mpxdbpodcast.h	Tue Apr 27 16:34:37 2010 +0300
@@ -148,13 +148,16 @@
         * @param aEpisodeId the ID of the episode to be removed
         * @param aUriArray on return contains the URI of the deleted episode
         * @param aItemChangedMessages on return contains changed messages
+        * @param IsAdd denotes whether DeleteEpisodeL is called as part of 
+        * adding an episode or deleting an episode ,if called as part of adding
+        * pass ETrue else if part of deletion pass EFalse.
         * @param aDeleteRecord indicates whether the client has explictly requested
         *                to delete the records from the database. If ETrue, records
         *                associated with the media will be deleted from the database;
         *                if EFalse, the record will be marked as deleted only.
         */
         void DeleteEpisodeL(TUint32 aEpisodeId, CDesCArray& aUriArray,
-            CMPXMessageArray& aItemChangedMessages, TBool aDeleteRecord);
+            CMPXMessageArray& aItemChangedMessages, TBool IsAdd, TBool aDeleteRecord);
 
         /**
         * Remove episodes matching a category from the Podcast table
@@ -618,6 +621,8 @@
         * @param aRecordset episode record to be removed
         * @param aUriArray, on return will be filled with all the paths that were removed
         * @param aItemChangedMessages: change events as result of the episode removal
+        * @param IsAdd denotes whether DoDeleteEpisodeL is called as part of 
+        * adding an episode or deleting an episode.
         * @param aDeleteRecord: indicates whether the client has explictly requested
         *                to delete the records from the database. If ETrue, records
         *                associated with the media will be deleted from the database;
@@ -626,7 +631,7 @@
         * @return Error code.
         */
         void DoDeleteEpisodeL(RSqlStatement& aRecordset, CDesCArray& aUriArray,
-            CMPXMessageArray& aItemChangedMessages, TBool aDeleteRecord = EFalse);
+            CMPXMessageArray& aItemChangedMessages, TBool IsAdd, TBool aDeleteRecord = EFalse);
 
         /**
         * Constructs the fields and corresponding values to be written into the Podcast
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitepodcastdbplugin/src/mpxdbpodcast.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitepodcastdbplugin/src/mpxdbpodcast.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -144,7 +144,16 @@
         CMPXMessageArray* itemChangedMessages = CMPXMediaArray::NewL();
         CleanupStack::PushL( itemChangedMessages );
         
-        DeleteEpisodeL( episodeId, *fp, *itemChangedMessages, ETrue );
+		//Isadd is passed as true as its called from AddEpisodeL
+        //IsAdd true means dont decrement  the episode count from tables like
+        //Artist Genere, Album, and Composer , which is not needed when 
+        //DeleteEpisodeL is called as part of Add operation
+        TRAPD( err, DeleteEpisodeL( episodeId, *fp, *itemChangedMessages, ETrue, ETrue ) );
+        
+        if ( err != KErrNone ) // EpisodeExistL has found a record from a previously deleted episode, cleanup it now
+            {
+            iDbManager.ExecuteQueryL( aDrive, KQueryPodcastDelete(), episodeId );
+            }
         
         CleanupStack::PopAndDestroy( itemChangedMessages );
         CleanupStack::PopAndDestroy( fp );
@@ -187,7 +196,7 @@
 void CMPXDbPodcast::DeleteEpisodeL(
     TUint32 aEpisodeId,
     CDesCArray& aUriArray,
-    CMPXMessageArray& aItemChangedMessages,
+    CMPXMessageArray& aItemChangedMessages, TBool IsAdd,
     TBool aDeleteRecord)
     {
     MPX_FUNC("CMPXDbPodcast::DeleteEpisodeL");
@@ -199,7 +208,7 @@
         {
         User::Leave(KErrNotFound);
         }
-    DoDeleteEpisodeL(recordset, aUriArray, aItemChangedMessages, aDeleteRecord);
+    DoDeleteEpisodeL(recordset, aUriArray, aItemChangedMessages, IsAdd, aDeleteRecord);
     CleanupStack::PopAndDestroy(&recordset);
     }
 
@@ -1224,7 +1233,7 @@
 void CMPXDbPodcast::DoDeleteEpisodeL(
     RSqlStatement& aRecordset,
     CDesCArray& aUriArray,
-    CMPXMessageArray& aItemChangedMessages,
+    CMPXMessageArray& aItemChangedMessages, TBool IsAdd ,
     TBool aDeleteRecord)
     {
     MPX_FUNC("CMPXDbPodcast::DoDeleteEpisodeL");
@@ -1235,22 +1244,28 @@
     aUriArray.AppendL(*uri);
     TDriveUnit driveUnit(*uri);
     CleanupStack::PopAndDestroy(uri);
-
-    // process the author
-    iObserver.DeleteEpisodeForCategoryL(EMPXArtist, aRecordset.ColumnInt64(EPodcastArtist),
-        driveUnit, &aItemChangedMessages);
+   
+    //if adding then dont delete episode category 
+    if(!IsAdd)
+        {
+        // process the author
+        iObserver.DeleteEpisodeForCategoryL(EMPXArtist, aRecordset.ColumnInt64(EPodcastArtist),
+            driveUnit, &aItemChangedMessages );
+    
+        // process the title
+        iObserver.DeleteEpisodeForCategoryL(EMPXAlbum, aRecordset.ColumnInt64(EPodcastAlbum),
+            driveUnit, &aItemChangedMessages);
+    
+        // process the genre
+        iObserver.DeleteEpisodeForCategoryL(EMPXGenre, aRecordset.ColumnInt64(EPodcastGenre),
+            driveUnit, &aItemChangedMessages);
+    
+        // process the composer
+        iObserver.DeleteEpisodeForCategoryL(EMPXComposer, aRecordset.ColumnInt64(EPodcastComposer),
+            driveUnit, &aItemChangedMessages);
+        }
+  
 
-    // process the title
-    iObserver.DeleteEpisodeForCategoryL(EMPXAlbum, aRecordset.ColumnInt64(EPodcastAlbum),
-        driveUnit, &aItemChangedMessages);
-
-    // process the genre
-    iObserver.DeleteEpisodeForCategoryL(EMPXGenre, aRecordset.ColumnInt64(EPodcastGenre),
-        driveUnit, &aItemChangedMessages);
-
-    // process the composer
-    iObserver.DeleteEpisodeForCategoryL(EMPXComposer, aRecordset.ColumnInt64(EPodcastComposer),
-        driveUnit, &aItemChangedMessages);
 
     // add a change event for removing the episode itself
     TUint32 episodeId(aRecordset.ColumnInt64(EPodcastUniqueId));
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitepodcastdbplugin/src/mpxpodcastdbhandler.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitepodcastdbplugin/src/mpxpodcastdbhandler.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -1211,8 +1211,9 @@
         }
 #endif
 
-    // delete the episode
-    iDbPodcast->DeleteEpisodeL(aEpisodeId, aUriArray, aItemChangedMessages, deleteRecord);
+    // delete the episode 
+	// IsAdd is passed EFalse to ensure the episode count will be decremented
+    iDbPodcast->DeleteEpisodeL(aEpisodeId, aUriArray, aItemChangedMessages, EFalse, deleteRecord);
     }
 
 // ----------------------------------------------------------------------------
--- a/mpxplugins/serviceplugins/playbackplugins/localaudio/src/mpxlocalaudioplayback.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/serviceplugins/playbackplugins/localaudio/src/mpxlocalaudioplayback.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -435,10 +435,28 @@
             {
             // Re-init audio effects
             MPX_DEBUG1("CMPXLocalAudioPlayback::CommandL EPbApplyEffect");
+            iAudioEffects->DestroyAudioEffect();
             if( ( aData == KAudioEffectsID || aData == KEqualizerID ) &&
                 ( EStateInitialised == iState ) )
                 {
-                TRAP_IGNORE( iAudioEffects->CreateAudioEffectsL() );
+                TRAPD(err, iAudioEffects->CreateAudioEffectsL() );
+                if(err)
+                    {
+                    MPX_DEBUG2("EPbApplyEffect err = %d", err);
+                    TRAPD(err, iAudioEffects->CreateAudioEffectsL() );
+                    if(err)
+                        {
+                        MPX_DEBUG2("EPbApplyEffect again err = %d", err);
+                        }
+					else
+						{
+                        MPX_DEBUG1("EPbApplyEffect again set");
+						}
+                    }
+				else
+					{
+                    MPX_DEBUG1("EPbApplyEffect set");
+					}
                 iAudioEffectsOn = ETrue;
                 }
             break;
--- a/mpxplugins/serviceplugins/playbackplugins/progressdownloadsb/inc/mpxprogressdownloadsb.h	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/serviceplugins/playbackplugins/progressdownloadsb/inc/mpxprogressdownloadsb.h	Tue Apr 27 16:34:37 2010 +0300
@@ -208,7 +208,7 @@
 
         void ResetEnhancedMediaClient();
 
-        void MoveDownloadedFileToMusicFolderL();
+        void MoveDownloadedFileToMusicFolder();
 
         /**
         *  Consumes the rights for the current media according
--- a/mpxplugins/serviceplugins/playbackplugins/progressdownloadsb/src/mpxprogressdownloadsb.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/serviceplugins/playbackplugins/progressdownloadsb/src/mpxprogressdownloadsb.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -341,7 +341,7 @@
                     if ( !iFileSaved )
                         {
                         iDrmMediaUtility->Close(); // release file handle so we can move file.
-                        MoveDownloadedFileToMusicFolderL();
+                        MoveDownloadedFileToMusicFolder();
                         }
                     }
                 iDrmMediaUtility->Close();
@@ -357,7 +357,7 @@
                     if ( !iFileSaved )
                         {
                         iDrmMediaUtility->Close(); // release file handle so we can move file.
-                        MoveDownloadedFileToMusicFolderL();
+                        MoveDownloadedFileToMusicFolder();
                         }
                     }
                 iDrmMediaUtility->Close();
@@ -646,7 +646,7 @@
 
     RApaLsSession aps;
     error  = aps.Connect(); // always fail in console test
-    if ( KErrNone == error )
+    if ( iPdPath != NULL && KErrNone == error )
         {
         CleanupClosePushL(aps);
         TUid ignore;
@@ -669,7 +669,7 @@
             {
             TRAP( err, metaDataUtility->OpenFileL( *iFileHandle, iMimeType.Des8() ) );
             }
-        else
+        else if ( iPdPath != NULL )
             {
             TRAP( err, metaDataUtility->OpenFileL( *iPdPath, iMimeType.Des8() ) );
             }
@@ -680,7 +680,7 @@
             {
             TRAP( err, metaDataUtility->OpenFileL( *iFileHandle ) );
             }
-        else
+        else if( iPdPath != NULL )
             {
             TRAP( err, metaDataUtility->OpenFileL( *iPdPath ) );
             }
@@ -791,7 +791,7 @@
                         break;
                         }
                     case EMetaDataJpeg:
-                        if ( attrM & EMPXMediaMusicAlbumArtFileName )
+                        if ( ( iPdPath != NULL ) && attrM & EMPXMediaMusicAlbumArtFileName )
                             {
                             media->SetTextValueL(
                                 TMPXAttribute(KMPXMediaIdMusic,EMPXMediaMusicAlbumArtFileName),
@@ -814,7 +814,7 @@
 	}
 
 
-   if (attrG & EMPXMediaGeneralUri)
+   if ( ( iPdPath != NULL ) && attrG & EMPXMediaGeneralUri)
         {
         media->SetTextValueL(
             TMPXAttribute(KMPXMediaIdGeneral,EMPXMediaGeneralUri),
@@ -851,7 +851,7 @@
 
         }
 
-   if (attrG & EMPXMediaGeneralSize)
+   if ( ( iPdPath != NULL ) && attrG & EMPXMediaGeneralSize)
         {
         RFs fs;
         User::LeaveIfError(fs.Connect());
@@ -1029,7 +1029,7 @@
                                     {
                                     ConsumeRights( ContentAccess::EPause );
                                     }
-                                MoveDownloadedFileToMusicFolderL();
+                                MoveDownloadedFileToMusicFolder();
                                 }
                             }
                         else if ( event->GetErrorCode() == KErrDied || event->GetErrorCode() == KErrInUse ||
@@ -1204,7 +1204,7 @@
                         (iState == EStateInitialising && iErrorOfStreamClosedEvent == KErrCANoRights)) 
                         && !iFileSaved )
                          {
-                         MoveDownloadedFileToMusicFolderL();
+                         MoveDownloadedFileToMusicFolder();
                          }
                      iErrorOfStreamClosedEvent = KErrNone ;
 
@@ -1246,7 +1246,12 @@
                 {
                 delete iPdPath;
                 iPdPath = NULL;
-                iPdPath = iMovedFileName.AllocL();
+                MPX_TRAPD( err, iPdPath = iMovedFileName.AllocL() );
+                if( err != KErrNone )
+                	{
+                    MPX_DEBUG2("iPdPath = iMovedFileName.AllocL() with leave err=%d", err ); 
+                    break;
+                	}
                 iFileSaved = ETrue;
                 }
             else
@@ -1258,7 +1263,12 @@
                     iMAudioProgDLSource->FileName( ptr );
                     delete iPdPath;
                     iPdPath = NULL;
-                    iPdPath = ptr.AllocL();
+                    MPX_TRAPD(err, iPdPath = ptr.AllocL() );
+                    if( err != KErrNone )
+                    	{
+                        MPX_DEBUG2("iPdPath = ptr.AllocL() with leave err=%d", err ); 
+                        break;
+                    	}
                     iFileSaved = ETrue;
                     }
                 }
@@ -1393,13 +1403,30 @@
             changed = ETrue;
             }
         }
-
+    
     // Change setting in cenrep
-    if ( aVolume != iVolumeWatcher->CurrentValueL() )
+    TInt currentVol( 0 );
+    MPX_TRAPD( volError, currentVol = iVolumeWatcher->CurrentValueL() );
+    if ( volError == KErrNone && aVolume != currentVol )
         {
-        iVolumeWatcher->SetValueL( aVolume );
+        MPX_TRAP( volError, iVolumeWatcher->SetValueL( aVolume ) );
+        if( aVolume == 0 )
+            {
+            MPX_TRAP( volError, iMuteWatcher->SetValueL( ETrue ) );
+            }
+        else if( aVolume > 0 )
+            {
+            TBool currentMute( EFalse );
+            
+            MPX_TRAP( volError, currentMute = iMuteWatcher->CurrentValueL() );
+            if( volError == KErrNone && currentMute )
+                {
+                MPX_TRAP( volError, iMuteWatcher->SetValueL( EFalse ) );
+                }
+            }
         }
 
+
     // Notify observer if value changed
     if ( changed )
         {
@@ -1468,16 +1495,16 @@
 // CMPXProgressDownloadSB::MoveDownloadedFileToMusicFolderL
 // -----------------------------------------------------------------------------
 //
-void CMPXProgressDownloadSB::MoveDownloadedFileToMusicFolderL()
+void CMPXProgressDownloadSB::MoveDownloadedFileToMusicFolder()
     {
-    if ( iFileSaved ||
+    if ( iFileSaved || iPdPath == NULL ||
          ( (*iPdPath).Length() == 0 ) ||
          iMAudioProgDLSource->GetDownloadStatus() == MProgDLSource::EDeleted )
         {
         return;
         }
 
-    MPX_DEBUG1("CMPXProgressDownloadSB::MoveDownloadedFileToMusicFolderL() entering");
+    MPX_DEBUG1("CMPXProgressDownloadSB::MoveDownloadedFileToMusicFolder() entering");
     TParse parse;
     parse.Set(*iPdPath,NULL,NULL);
     TPtrC drive = parse.Drive();
@@ -1494,7 +1521,7 @@
         iFileSaved = ETrue;
         }
 
-    MPX_DEBUG1("CMPXProgressDownloadSB::MoveDownloadedFileToMusicFolderL() exiting");
+    MPX_DEBUG1("CMPXProgressDownloadSB::MoveDownloadedFileToMusicFolder() exiting");
     }
 
 // ----------------------------------------------------------------------------
--- a/mpxplugins/viewplugins/inc/mpxcommonplaybackviewimp.h	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/inc/mpxcommonplaybackviewimp.h	Tue Apr 27 16:34:37 2010 +0300
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:  MPX common playback view implementation
-*  Version     : %version: da1mmcf#41.1.6.1.1.1.12 % << Don't touch! Updated by Synergy at check-out.
+*  Version     : %version: e003sa33#41.1.6.1.1.1.13 % << Don't touch! Updated by Synergy at check-out.
 *
 */
 
@@ -120,7 +120,7 @@
      *
      * @param aPlaybackState Current playback state.
      */
-    IMPORT_C virtual void UpdatePlaybackState(
+    IMPORT_C virtual void UpdatePlaybackStateL(
         TMPXPlaybackState aPlaybackState );
 
     /**
@@ -292,7 +292,7 @@
     /**
      * Checks if UPnP AP is defined
      */
-    IMPORT_C virtual TBool IsUpnpVisible();
+    IMPORT_C virtual TBool IsUpnpVisibleL();
 
     /**
      * Displays the available players in the Play via submenu
@@ -612,7 +612,7 @@
     /**
      * Updates the middle (play/pause) toolbar control key icon based on playback state
      */
-    IMPORT_C void UpdateToolbar();
+    IMPORT_C void UpdateToolbarL();
   
   	/** 
 	 * Launch Metadata Dialog to show the file details
--- a/mpxplugins/viewplugins/inc/mpxupnpplaybackdialog.h	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/inc/mpxupnpplaybackdialog.h	Tue Apr 27 16:34:37 2010 +0300
@@ -105,7 +105,7 @@
      *
      * @param aPlaybackState Current playback state.
      */
-    void UpdatePlaybackState(
+    void UpdatePlaybackStateL(
         TMPXPlaybackState aPlaybackState );
 
     /**
@@ -460,21 +460,21 @@
      *
      *  @param aVolume volume value.
      */
-    void SetVolume( const TInt aVolume );
+    void SetVolumeL( const TInt aVolume );
 
     /**
      *  Mutes the playback volume.
      */
-    void MuteVolume();
+    void MuteVolumeL();
 
     /**
      *  Unmutes the playback volume.
      */
-    void UnMuteVolume();
+    void UnMuteVolumeL();
     /**
      *  Update toolbar.
      */
-    void UpdateToolbar();
+    void UpdateToolbarL();
     /**
      * From MAknToolbarObserver
      * Processes user commands.
--- a/mpxplugins/viewplugins/views/collectionview/src/mpxcollectionviewcontainer.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/collectionview/src/mpxcollectionviewcontainer.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -120,13 +120,13 @@
         if ( index != KErrNotFound )
             {
             // Update the previous item as not playing anymore
-            iCommonContainer->DrawLbxItem( index );
+            iCommonContainer->DrawLbxItemL( index );
             }
         index = iLbxArray->GetPlaybackIndex();
         if ( index != KErrNotFound )
             {
             // Update new item as playing
-            iCommonContainer->DrawLbxItem( index );
+            iCommonContainer->DrawLbxItemL( index );
             }
         }
     }
--- a/mpxplugins/viewplugins/views/collectionview/src/mpxcollectionviewimp.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/collectionview/src/mpxcollectionviewimp.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -1432,7 +1432,7 @@
         }
     iContainer->Common()->SetLbxCurrentItemIndexAndDraw( currentItem );
     //show new indicator
-    iContainer->Common()->DrawLbxItem(currentItem);
+    iContainer->Common()->DrawLbxItemL(currentItem);
     UpdateReorderNaviPaneL();
     }
 
@@ -2009,7 +2009,7 @@
 #ifdef UPNP_INCLUDED
    	if ( iUpnpCopyCommand  && iUpnpFrameworkSupport) 	  
         {
-        returnValue = iUpnpCopyCommand->IsAvailableL();   
+        TRAP_IGNORE( returnValue = iUpnpCopyCommand->IsAvailableL() );   
         }
 #endif
     return returnValue; 
@@ -6342,7 +6342,7 @@
     if (!(aResourceId == R_AVKON_MENUPANE_MARKABLE_LIST && usbUnblockingStatus == EMPXUSBUnblockingPSStatusActive))
         {
         // Custom handling of menu pane for markable lists
-        iContainer->Common()->HandleMarkableListDynInitMenuPane(
+        iContainer->Common()->HandleMarkableListDynInitMenuPaneL(
             aResourceId,
             aMenuPane );
         }
--- a/mpxplugins/viewplugins/views/collectionviewhg/data/mpxcollectionviewhg.rss	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/collectionviewhg/data/mpxcollectionviewhg.rss	Tue Apr 27 16:34:37 2010 +0300
@@ -1653,7 +1653,7 @@
         CBA_BUTTON
             {
             id = EAknSoftkeyYes;
-            txt = qtn_mus_sk1_play;
+            txt = "";
             },
         CBA_BUTTON
             {
@@ -1663,7 +1663,7 @@
         CBA_BUTTON
             {
             id = EAknSoftkeyYes;
-            txt = qtn_mus_sk1_play;
+            txt = "";
             }
         };
     }
--- a/mpxplugins/viewplugins/views/collectionviewhg/group/mpxcollectionviewhg.mmp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/collectionviewhg/group/mpxcollectionviewhg.mmp	Tue Apr 27 16:34:37 2010 +0300
@@ -46,7 +46,8 @@
 SOURCE          mpxcollectionviewhglistboxarray.cpp
 SOURCE          mpxcollectionviewhgplaylisthelper.cpp
 SOURCE          mpxcollectionviewhgtnloader.cpp
-SOURCE          mpxpopuplist.cpp
+SOURCE          mpxpopuplist.cpp 
+SOURCE          mpxcollectionviewhgswitchbuffer.cpp
 
 START RESOURCE  ../data/mpxcollectionviewhg.rss
 HEADER
--- a/mpxplugins/viewplugins/views/collectionviewhg/inc/mpxcollectionviewhgimp.h	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/collectionviewhg/inc/mpxcollectionviewhgimp.h	Tue Apr 27 16:34:37 2010 +0300
@@ -128,7 +128,7 @@
      *
      *  @param aMedia Album to be stored
      */
-     void SaveSelectedAlbum (CMPXMedia &aMedia);
+     void SaveSelectedAlbumL (CMPXMedia &aMedia);
 
      /**
      *  Restores selected album.
@@ -282,7 +282,7 @@
      *
      * @return ETrue if visible, EFalse otherwise
      */
-    TBool IsUpnpVisible();
+    TBool IsUpnpVisibleL();
 
     /**
      * Displays the available players in the Play via submenu
@@ -878,7 +878,6 @@
  	 * Display information about MusicPlayer version.
  	 */
      void  DisplayAboutDlgL() const;
-	 	 
 	/*
  	 * Internal functions to show the Educating user URI.
  	 */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpxplugins/viewplugins/views/collectionviewhg/inc/mpxcollectionviewhgswitchbuffer.h	Tue Apr 27 16:34:37 2010 +0300
@@ -0,0 +1,92 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Defines a container for buffer switch handling.
+*
+*/
+
+#ifndef MPXCOLLECTIONVIEWHGSWITCHBUFFER_H_
+#define MPXCOLLECTIONVIEWHGSWITCHBUFFER_H_
+
+#include <e32base.h>
+
+class CHgScroller;
+class CHgVgMediaWall;
+class CGulIcon;
+
+NONSHARABLE_CLASS(CMPXCollectionViewHgSwitchBuffer) : public CBase
+    {
+public:
+
+    static CMPXCollectionViewHgSwitchBuffer* CreateBufferLC( CHgScroller& aScroller );
+
+    static CMPXCollectionViewHgSwitchBuffer* CreateBufferLC( CHgVgMediaWall& aMediaWall );
+
+    virtual ~CMPXCollectionViewHgSwitchBuffer();
+
+public:
+    void FillFromBufferL( CHgVgMediaWall& aMediaWall );
+    void FillFromBufferL( CHgScroller& aScroller, TSize aSize );
+    void SetIndexOffset( TInt aOffset );
+
+protected:
+    CMPXCollectionViewHgSwitchBuffer();
+
+protected:
+    void AddToBufferL( CGulIcon& aIcon, TInt aIndex );
+
+private:
+    NONSHARABLE_CLASS( CBufferItem ) : public CBase
+        {
+    public:
+        CBufferItem(CGulIcon* aIcon, TInt aIndex)
+        : iIcon( aIcon ), iIndex( aIndex )
+            {
+
+            }
+
+        virtual ~CBufferItem()
+            {
+            delete iIcon;
+            iIcon = NULL;
+            }
+
+        /**
+         *
+         */
+        CGulIcon* GetIcon()
+            {
+            CGulIcon* icon = iIcon;
+            iIcon = NULL;
+            return icon;
+            }
+
+        /**
+         *
+         */
+        TInt Index()
+            {
+            return iIndex;
+            }
+
+        private:
+        CGulIcon* iIcon;
+        TInt iIndex;
+        };
+
+    RPointerArray<CBufferItem> iBuffer;
+    TInt iOffset;
+    };
+
+
+#endif /* MPXCOLLECTIONVIEWHGSWITCHBUFFER_H_ */
--- a/mpxplugins/viewplugins/views/collectionviewhg/inc/mpxcollectionviewhgtnloader.h	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/collectionviewhg/inc/mpxcollectionviewhgtnloader.h	Tue Apr 27 16:34:37 2010 +0300
@@ -74,7 +74,7 @@
     TInt FindLoadingById(TThumbnailRequestId aId, TBool aRemove = EFalse);
     TInt FindLoadingByIndex(TInt aIndex, TBool aRemove = EFalse);
     static TInt LoadThumbnail( TAny* aSelf );
-    void LoadNextTN();
+    void LoadNextTNL();
 
     static TInt ResumeCallback(TAny* aPtr);
     
--- a/mpxplugins/viewplugins/views/collectionviewhg/inc/mpxselectedalbumhandler.h	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/collectionviewhg/inc/mpxselectedalbumhandler.h	Tue Apr 27 16:34:37 2010 +0300
@@ -31,7 +31,7 @@
     *  @since S60 5.2
     *  @param aMedia Album to be stored
     */
-    virtual void SaveSelectedAlbum (CMPXMedia &aMedia) = 0;
+    virtual void SaveSelectedAlbumL (CMPXMedia &aMedia) = 0;
 
     /**
     *  Restores selected album.
--- a/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgcontainer.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgcontainer.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -81,6 +81,7 @@
 #include "mpxcbahandler.h"
 #include "mpxselectedalbumhandler.h"
 #include "mpxpopuplist.h"
+#include "mpxcollectionviewhgswitchbuffer.h"
 
 // CONSTANTS
 _LIT( KMPXCollectionViewRscPath, "mpxcollectionviewhg.rsc" );
@@ -98,7 +99,7 @@
 #ifdef __WINS__
 const TInt KMPXListBufferSizeWithMediaWall = 20;
 #else
-const TInt KMPXListBufferSizeWithMediaWall = 80;
+const TInt KMPXListBufferSizeWithMediaWall = 40;
 #endif
 const TInt KMPXMaxFileLength = 256;
 const TReal KIconFactor = 0.7;
@@ -294,7 +295,7 @@
         {
         return MAknsControlContext::SupplyMopObject(aId, iBgContext );
         }
-    
+
     return CCoeControl::MopSupplyObject(aId);
 	}
 
@@ -765,7 +766,7 @@
             TRect clientRect = ((CAknView*)iView)->ClientRect();
             SetRect( clientRect );
             iBgContext->SetRect(((CAknAppUi*)iCoeEnv->AppUi())->ApplicationRect());
-            
+
             // call HandleLbxItemAdditionL
             HandleLbxItemAdditionL();
             }
@@ -1191,9 +1192,9 @@
 
     HandleLbxItemRemovalL();
     TViewType prevViewType = iCurrentViewType;
- 
+
     ResolveCurrentViewType( count );
- 
+
     iThumbnailReqMap.Reset();
     if (ShuffleItemPresent())
         iShuffleItem = 1;
@@ -1220,13 +1221,13 @@
 
         if( !iLayoutSwitch  )
             {
-			// We only need to use this for one transition coming
-			// from playback view.
-			TBool pbv = (iPreviousViewId == TUid::Uid(KMPXPluginTypePlaybackUid)) ? ETrue : EFalse;
-			if ( pbv )
-				{
+            // We only need to use this for one transition coming
+            // from playback view.
+            TBool pbv = (iPreviousViewId == TUid::Uid(KMPXPluginTypePlaybackUid)) ? ETrue : EFalse;
+            if ( pbv )
+                {
             	iPreviousViewId = TUid::Uid(0);
-				}
+                }
             BeginFullScreenAnimation( pbv );
             }
 
@@ -1235,8 +1236,10 @@
             case EMPXViewMediawall:
                 {
                 TMPXPlaybackState pbState( iPlaybackUtility->StateL() );
-                if ( pbState == EPbStatePlaying || pbState == EPbStatePaused )
+                if ( pbState == EPbStatePlaying || pbState == EPbStatePaused || pbState == EPbStateStopped )
+                    {
                     RestoreSelectedAlbumItemL(mediaArray);
+                    }
                 PrepareMediaWallL(mediaArray, count);
                 iOpenAlbumTracks = EFalse;
                 break;
@@ -1245,9 +1248,11 @@
                 {
                 RestoreSelectedAlbumItemL(mediaArray);
                 PrepareMediaWallWithListL( mediaArray, count );
-				// We need to adjust the CBA for this view.
-				if( iCbaHandler )
-					iCbaHandler->UpdateCba();
+                // We need to adjust the CBA for this view.
+                if( iCbaHandler )
+                    {
+                    iCbaHandler->UpdateCba();
+                    }
                 break;
                 }
             case EMPXViewList:
@@ -1463,23 +1468,24 @@
     {
     MPX_FUNC( "CMPXCollectionViewHgContainer::ResizeListL" );
     TInt mediaCount = aMediaArray.Count();
-    
+
     if( iListWidget )
         {
-        TRect clientRect = ((CAknView*)iView)->ClientRect();        
+        TRect clientRect = ((CAknView*)iView)->ClientRect();
         TInt mediaIndex = MediaIndex(iListWidget->SelectedIndex());
+        mediaIndex = ( KErrNotFound == mediaIndex ) ? iListWidget->FirstIndexOnScreen() : mediaIndex;
         mediaIndex = ( mediaIndex >= 0 && (mediaIndex < (mediaCount)) ) ? mediaIndex : (mediaCount - 1);
-        	
+
         TInt prevItemCount = iListWidget->ItemCount();
-        
+
         iListWidget->InitScreenL( clientRect );
         iListWidget->Reset();
         if ( aCount )
             {
-            // enable scroll buffering now as it has not been enabled when empty list was constructed 
-            if ( !prevItemCount ) 
-                { 
-                iListWidget->EnableScrollBufferL( *this, KMPXListBufferSize, KMPXListBufferSize/4 ); 
+            // enable scroll buffering now as it has not been enabled when empty list was constructed
+            if ( !prevItemCount )
+                {
+                iListWidget->EnableScrollBufferL( *this, KMPXListBufferSize, KMPXListBufferSize/4 );
                 }
             iListWidget->ResizeL( aCount );
             ProvideDataWithoutThumbnailsL(aMediaArray);
@@ -1495,29 +1501,29 @@
         // In case of mediawall components we switch to different view type if orientation changes
         // so there is no need to set new client rect for mediawall.
         TInt mediaIndex = MediaIndex(iMediaWall->SelectedIndex());
-        
+
         // Correct the array index if it is out of range
-        // This case may happen when last album or album beside selected album is deleted     
+        // This case may happen when last album or album beside selected album is deleted
 		// mediaIndex -1 is valid and it represents shuffle item
-        
+
         if ( mediaIndex >= mediaCount || mediaIndex < -1)
             {
             mediaIndex = mediaCount - 1; // last item of the list
             }
-          
+
         //in case of shuffle item is seleted (mediaIndex -1), there is no need to save it.
-        if( (iSelectedAlbumIndex != mediaIndex) && ( mediaIndex != -1) )            
+        if( (iSelectedAlbumIndex != mediaIndex) && ( mediaIndex != -1) )
             {
-             iSelectedAlbumIndex = mediaIndex; 
+             iSelectedAlbumIndex = mediaIndex;
              SaveSelectedAlbumItemL( iSelectedAlbumIndex );
             }
-  
+
         iMediaWall->Reset();
         if ( aCount )
             {
             iMediaWall->ResizeL( aCount );
             ProvideDataWithoutThumbnailsMwL(aMediaArray);
-			
+
             iMediaWall->SetSelectedIndex( mediaIndex + iShuffleItem);
             if ( iCurrentViewType == EMPXViewTBone )
                 {
@@ -1538,12 +1544,12 @@
     {
     MPX_FUNC("CMPXCollectionViewHgContainer::PrepareListL");
 
-	if (!((CAknAppUi*)iCoeEnv->AppUi())->StatusPane()->IsVisible())
-		((CAknAppUi*)iCoeEnv->AppUi())->StatusPane()->MakeVisible(ETrue);
-
-	if( iCbaHandler )
-	    iCbaHandler->UpdateCba();
-	
+    if (!((CAknAppUi*)iCoeEnv->AppUi())->StatusPane()->IsVisible())
+        ((CAknAppUi*)iCoeEnv->AppUi())->StatusPane()->MakeVisible(ETrue);
+
+    if( iCbaHandler )
+        iCbaHandler->UpdateCba();
+
     TRect clientRect = ((CAknView*)iView)->ClientRect();
     iThumbnailManager->SetSizeL( EAudioListThumbnailSize );
     iImageSize = CHgDoubleGraphicListFlat::PreferredImageSize();
@@ -1551,10 +1557,10 @@
     if( !iListWidget )
         {
         iListWidget = CHgDoubleGraphicListFlat::NewL (
-                clientRect,
-                aCount,
-                NULL,
-                NULL );
+            clientRect,
+            aCount,
+            NULL,
+            NULL );
         iListWidget->SetMenuProviderL(this);
         iListWidget->SetSelectionObserver(*this);
         // TODO. check if this is correct for all lists
@@ -1575,22 +1581,33 @@
         iListWidget->InitScreenL(clientRect);
         }
 
-    if ( (iAlbumIndex > 0) && (iAlbumIndex < aCount) )
+    if ( (iAlbumIndex >= 0) && (iAlbumIndex < aCount) )
         {
         iListWidget->SetSelectedIndex( iAlbumIndex + iShuffleItem );
         }
-    
+    else if ( KErrNotFound == iAlbumIndex )
+        {
+        if ( iSelectedAlbumIndex >= 0 && iSelectedAlbumIndex < aCount)
+            {
+            iListWidget->SetSelectedIndex( iSelectedAlbumIndex + iShuffleItem );
+            }
+        else
+            {
+            iListWidget->SetSelectedIndex( iListWidget->FirstIndexOnScreen() + iShuffleItem );
+            }
+        }
+
     // TODO. Define here in which views we need to have buffering enabled in the list
     if( ( ( iContext == EContextGroupAlbum ) ||
         ( iContext == EContextGroupArtist ) ||
         ( iContext == EContextGroupSong ) ||
-		( iContext == EContextItemGenre ) ||
+        ( iContext == EContextItemGenre ) ||
         ( iContext == EContextItemPlaylist ) ) &&
         // Check if the list is empty, Enable scroll buffer won't call requst if list is empty
         ( iListWidget->ItemCount() != 0 ) )
         {
         MPX_DEBUG1("CMPXCollectionViewHgContainer::PrepareListL - EnableScrollBufferL");
-        iListWidget->EnableScrollBufferL( *this, KMPXListBufferSize, KMPXListBufferSize/4 );
+        iListWidget->EnableScrollBufferL(*this, KMPXListBufferSize, KMPXListBufferSize/4);
         }
     else
         {
@@ -1731,6 +1748,17 @@
     frontRect.LayoutRect( appRect, AknLayoutScalable_Apps::cf0_flow_pane_g1(0) );
 	iImageSize = frontRect.Rect().Size();
 
+	CMPXCollectionViewHgSwitchBuffer* switchBuffer(NULL);
+
+    if( iListWidget && (iPrevContext == EContextGroupAlbum || iPrevContext == EContextItemAlbum ) )
+        {
+        switchBuffer = CMPXCollectionViewHgSwitchBuffer::CreateBufferLC( *iListWidget );
+        }
+    else if ( iMediaWall )
+        {
+        switchBuffer = CMPXCollectionViewHgSwitchBuffer::CreateBufferLC( *iMediaWall );
+        switchBuffer->SetIndexOffset(1);
+        }
     if( iMediaWall )
         {
         delete iMediaWall;
@@ -1820,6 +1848,12 @@
     iMediaWall->SetOpenedItemRect( iPopupListRect );
     iMediaWall->SetOpeningAnimationType( CHgVgMediaWall::EHgVgOpeningAnimationZoomToFront );
 
+    if( switchBuffer )
+        {
+        switchBuffer->FillFromBufferL( *iMediaWall );
+        CleanupStack::PopAndDestroy( switchBuffer );
+        switchBuffer = NULL;
+        }
 	iDefaultIconSet = ETrue;
     }
 
@@ -1881,7 +1915,7 @@
     {
     TBool tBoneView = EFalse;
 
-    if( EMPXViewTBone == iCurrentViewType )
+    if( EMPXViewTBone == iCurrentViewType || iOpenAlbumTracks )
         tBoneView = ETrue;
 
     return tBoneView;
@@ -1929,16 +1963,16 @@
             iCurrentViewType = EMPXViewList;
             break;
         }
-    
-    // if tbone view is empty, switch back to Albums list or meidawall view 
+
+    // if tbone view is empty, switch back to Albums list or meidawall view
     if( ( iCurrentViewType == EMPXViewTBone ) && ( aCount < 1 ) )
         {
         if( landscapeOrientation )
          iCurrentViewType = EMPXViewMediawall;
         else
-         iCurrentViewType = EMPXViewList;        
+         iCurrentViewType = EMPXViewList;
         }
-    
+
     }
 
 // ----------------------------------------------------------------------------
@@ -2058,12 +2092,12 @@
             switch( iContext )
                 {
                 case EContextGroupAlbum:
-                case EContextItemAlbum:                    
+                case EContextItemAlbum:
                     {
                     iSelectedAlbumIndex = index;
                     SaveSelectedAlbumItemL(index);
                     // Open first song of album & playlist for entire album is created.
-                    PlayAlbumL(index);                    
+                    PlayAlbumL(index);
                     break;
                     }
                 case EContextGroupPlaylist:
@@ -2110,7 +2144,7 @@
         if ( aControl == iMediaWall )
             {
             iSelectedAlbumIndex = index;
-            iAlbumIndex = index;            
+            iAlbumIndex = index;
             OpenAlbumL(index);
             }
         }
@@ -3048,19 +3082,19 @@
                     TBool landscapeOrientation = Layout_Meta_Data::IsLandscapeOrientation();
                     if ( landscapeOrientation )
                         {
-                        unknownText = 
+                        unknownText =
                             StringLoader::LoadLC( R_MPX_MEDIAWALL_ARTIST_UNKNOWN );
                         }
                     else
                         {
-                        unknownText = 
-                            StringLoader::LoadLC( R_MPX_MP_LIST_ARTIST_UNKNOWN );		        
+                        unknownText =
+                            StringLoader::LoadLC( R_MPX_MP_LIST_ARTIST_UNKNOWN );
                         }
                     }
-                else 
+                else
                     {
-                    unknownText = 
-                        StringLoader::LoadLC( R_MPX_MEDIAWALL_ARTIST_UNKNOWN );			    
+                    unknownText =
+                        StringLoader::LoadLC( R_MPX_MEDIAWALL_ARTIST_UNKNOWN );
                     }
                 aVisualItem->SetTitleL( *unknownText );
                 CleanupStack::PopAndDestroy( unknownText );
@@ -3126,10 +3160,10 @@
     CMPXMedia* aMedia )
     {
     MPX_FUNC( "CMPXCollectionViewHgContainer::SetDetailCountL" );
-    if ( aMedia->IsSupported( KMPXMediaGeneralCount ) )
-        {
-        TInt count( aMedia->ValueTObjectL<TInt>( KMPXMediaGeneralCount ) );
-		
+	if ( aMedia->IsSupported( KMPXMediaGeneralCount ) )
+		{
+		TInt count( aMedia->ValueTObjectL<TInt>( KMPXMediaGeneralCount ) );
+
         if ( iContext == EContextGroupGenre )
             {
             HBufC* numSongsText = NULL;
@@ -3139,7 +3173,7 @@
                 }
             else
                 {
-                numSongsText = StringLoader::LoadLC( R_MPX_MUSIC_ONE_SONG );            
+                numSongsText = StringLoader::LoadLC( R_MPX_MUSIC_ONE_SONG );
                 }
             TPtr ptr = numSongsText->Des();
             AknTextUtils::LanguageSpecificNumberConversion( ptr );
@@ -3205,26 +3239,26 @@
             aVisualItem->SetTextL( detailText );
             }
         else
-            {            
+            {
             HBufC* unknownText = NULL;
             if ( iContext == EContextGroupAlbum )
                 {
                 TBool landscapeOrientation = Layout_Meta_Data::IsLandscapeOrientation();
                 if ( landscapeOrientation )
                     {
-                    unknownText = 
+                    unknownText =
                         StringLoader::LoadLC( R_MPX_MEDIAWALL_ALBUM_UNKNOWN );
                     }
                 else
                     {
-                    unknownText = 
-                        StringLoader::LoadLC( R_MPX_MP_LIST_ALBUM_UNKNOWN );               
+                    unknownText =
+                        StringLoader::LoadLC( R_MPX_MP_LIST_ALBUM_UNKNOWN );
                     }
                 }
-            else 
+            else
                 {
-                unknownText = 
-                    StringLoader::LoadLC( R_MPX_MEDIAWALL_ALBUM_UNKNOWN );             
+                unknownText =
+                    StringLoader::LoadLC( R_MPX_MEDIAWALL_ALBUM_UNKNOWN );
                 }
             aVisualItem->SetTextL( *unknownText );
             CleanupStack::PopAndDestroy( unknownText );
@@ -3245,12 +3279,12 @@
     if ( iContext == EContextGroupPlaylist &&
          aMedia->IsSupported( KMPXMediaGeneralDuration ) &&
 	     aMedia->IsSupported( KMPXMediaGeneralCount ) )
-        {
-        TBuf<KMPXMaxFileLength> detailText;
-        TInt count( aMedia->ValueTObjectL<TInt>( KMPXMediaGeneralCount ) );
-        TInt duration = aMedia->ValueTObjectL<TInt>( KMPXMediaGeneralDuration );
-
-        UpdateTimeIndicatorsL(detailText, duration);        
+		{
+		TBuf<KMPXMaxFileLength> detailText;
+		TInt count( aMedia->ValueTObjectL<TInt>( KMPXMediaGeneralCount ) );
+   		TInt duration = aMedia->ValueTObjectL<TInt>( KMPXMediaGeneralDuration );
+
+        UpdateTimeIndicatorsL(detailText, duration);
         HBufC* numSongsDurationText = NULL;
     	if ( count > 1 || count == 0 )
     	    {
@@ -3259,9 +3293,9 @@
     	else
     	    {
     	    numSongsDurationText = StringLoader::LoadLC( R_MPX_MUSIC_ONE_SONG_DURATION, detailText );
-    	    }        
+    	    }
         TPtr ptr = numSongsDurationText->Des();
-        AknTextUtils::LanguageSpecificNumberConversion( ptr );   	
+        AknTextUtils::LanguageSpecificNumberConversion( ptr );
         aVisualItem->SetTextL( ptr );
         CleanupStack::PopAndDestroy( numSongsDurationText );
         }
@@ -3610,13 +3644,13 @@
 
     if ( count > 1 && iContext == EContextGroupAlbum )
         {
-        TBool landscapeOrientation = Layout_Meta_Data::IsLandscapeOrientation();        
+        TBool landscapeOrientation = Layout_Meta_Data::IsLandscapeOrientation();
         if ( landscapeOrientation )
             {
             HBufC* shuffleText = StringLoader::LoadLC(
                 R_MPX_MEDIAWALL_TITLE_SHUFFLE_ALL );
             aItem->SetTitleL( *shuffleText );
-            CleanupStack::PopAndDestroy( shuffleText );        
+            CleanupStack::PopAndDestroy( shuffleText );
             }
         else
             {
@@ -3624,7 +3658,7 @@
                 R_MPX_SHUFFLE );
             aItem->SetTitleL( *shuffleText );
             CleanupStack::PopAndDestroy( shuffleText );
-            }        
+            }
 
         // We can try to set icon too.
         SetDetailIconShuffleL();
@@ -3642,7 +3676,7 @@
             R_MPX_SHUFFLE );
         aItem->SetTitleL( *shuffleText );
         CleanupStack::PopAndDestroy( shuffleText );
-        
+
         // We can try to set icon too.
         SetDetailIconShuffleL();
         res = ETrue;
@@ -3660,13 +3694,13 @@
     MPX_FUNC( "CMPXCollectionViewHgContainer::SetCollectionContextL" );
 
     const CMPXMedia& media = iListBoxArray->ContainerMedia();
-    
+
     if ( NULL == &media )
-        { 
-        MPX_DEBUG1( "CMPXCollectionViewHgContainer::SetCollectionContextL NO media"); 
+        {
+        MPX_DEBUG1( "CMPXCollectionViewHgContainer::SetCollectionContextL NO media");
         User::Leave(KErrNotFound);
-        }       
-        
+        }
+
     TMPXGeneralType containerType( EMPXNoType );
     if ( media.IsSupported( KMPXMediaGeneralType ) )
         {
@@ -4405,7 +4439,7 @@
 //
 void CMPXCollectionViewHgContainer::ShowAlbumSongsDialogL( const CMPXMedia& aResults )
     {
-    CAknSinglePopupMenuStyleListBox* listBox = new ( ELeave ) CAknSinglePopupMenuStyleListBox;
+    CAknSingleGraphicPopupMenuStyleListBox* listBox = new ( ELeave ) CAknSingleGraphicPopupMenuStyleListBox;
     CleanupStack::PushL( listBox );
 
     CAknPopupList* dialog = CAknPopupList::NewL(listBox, R_MPX_COLLECTION_ALBUMSONGS_LIST_CBA,
@@ -4449,8 +4483,25 @@
         {
         HBufC* shuffleText = StringLoader::LoadLC(
             R_MPX_MEDIAWALL_DIALOG_SHUFFLE );
-        songList->AppendL( *shuffleText );
+        // Make room for 3 more formatting characters.
+		HBufC* finalText = HBufC::NewLC(shuffleText->Length() + 3);
+		TPtr ptr = finalText->Des();
+		// This tells the list to use icon at index 0 of array index.
+		ptr.Append(_L("0\t"));
+		ptr.Append(shuffleText->Des());
+        songList->AppendL( *finalText );
+        CleanupStack::PopAndDestroy( finalText );
         CleanupStack::PopAndDestroy( shuffleText );
+		CAknIconArray* iconArray = new( ELeave ) CAknIconArray( 1 );
+		CleanupStack::PushL( iconArray );
+		// Prepare icon array.
+		CGulIcon* icon = (*iIconArray)[EMPXClvIconShuffle];
+		CGulIcon* iconCopy = CGulIcon::NewL(icon->Bitmap(), icon->Mask());
+		iconCopy->SetBitmapsOwnedExternally(ETrue);
+		iconArray->AppendL(iconCopy);
+
+		listBox->ItemDrawer()->ColumnData()->SetIconArrayL( iconArray );
+		CleanupStack::Pop(); // iconArray
         }
 
     for ( TInt i = 0; i < songCount; i++ )
@@ -4466,7 +4517,12 @@
         if ( currentMedia->IsSupported( KMPXMediaGeneralTitle ) )
             {
             const TDesC& title = currentMedia->ValueText( KMPXMediaGeneralTitle );
-            songList->AppendL( title );
+			HBufC* finalText = HBufC::NewLC(title.Length() + 2);
+			TPtr ptr = finalText->Des();
+            ptr.Append(_L("\t"));
+            ptr.Append(title);
+            songList->AppendL( *finalText );
+        	CleanupStack::PopAndDestroy( finalText );
             }
         }
 
@@ -4619,7 +4675,7 @@
             CleanupStack::PopAndDestroy( unknownArtistText );
             }
 
-        iSelectedAlbumHandler->SaveSelectedAlbum(*iSelectedMediaInAlbumView);
+        iSelectedAlbumHandler->SaveSelectedAlbumL(*iSelectedMediaInAlbumView);
         }
     }
 
@@ -4743,17 +4799,22 @@
     if( self )
         {
         //check if the pointer to ContainerMedia exists
-        const CMPXMedia& media = self->iListBoxArray->ContainerMedia();    
+        const CMPXMedia& media = self->iListBoxArray->ContainerMedia();
         if ( NULL == &media )
     	    {
             return KErrNone;
-    	    }  
-
-
-        self->HandleLbxItemAdditionL();
+    	    }
+
+
+        MPX_TRAPD( err, self->HandleLbxItemAdditionL() );
+        if ( err != KErrNone )
+        	{
+            MPX_DEBUG2("CMPXCollectionViewHgContainer::AsyncCallback() return err%d", err );
+            return err;
+        	}
 
         if( self->iCbaHandler )
-            { 
+            {
             self->iCbaHandler->UpdateCba();
             }
         }
@@ -4891,9 +4952,9 @@
     {
     MPX_FUNC( "CMPXCollectionViewHgContainer::LoadAndSetEmptyTextL" );
     MPX_DEBUG2( "CMPXCollectionViewHgContainer::LoadAndSetEmptyTextL - iContext %d", iContext );
-    
+
     TInt resId( 0 );
-    
+
     switch ( iContext )
         {
         case EContextGroupAlbum:
--- a/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgimp.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgimp.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -365,6 +365,7 @@
 	if ( iContainer )
         {
 		iContainer->SetRect( ClientRect() );
+		UpdateTitlePaneL();
         }
     }
 
@@ -539,7 +540,7 @@
     iRepository->Get( KEducatingUserURI, educatingURI );
     iRepository->Get( KEducatingPopupState, iEducatingPopupState);
         
-   // Get music store information from cenrep
+       // Get music store information from cenrep
    //
    TBuf8< KUIDMaxLength > operatorMusicStoreUID;
 
@@ -1332,15 +1333,6 @@
                 {
                 title->SetTextL( *iTitle );
                 }
-            else if ( !iIsEmbedded )
-                {
-                // use default title if no metadata is available
-                // and is not in embedded view
-                HBufC* titleText = StringLoader::LoadLC(
-                    R_MPX_COLLECTION_VIEW_TITLE );
-                title->SetTextL( *titleText );
-                CleanupStack::PopAndDestroy( titleText );
-                }
             }
         }
     }
@@ -2039,7 +2031,7 @@
     {
     MPX_FUNC( "CMPXCollectionViewHgImp::HandleDynInitUpnpL()" );
 
-    if ( !IsUpnpVisible() )
+    if ( !IsUpnpVisibleL() )
         {
         GetCurrentPlayerDetails();
 
@@ -2112,9 +2104,9 @@
 // Checks if UPnP access point is defined
 // -----------------------------------------------------------------------------
 //
-TBool CMPXCollectionViewHgImp::IsUpnpVisible()
+TBool CMPXCollectionViewHgImp::IsUpnpVisibleL()
     {
-    MPX_FUNC( "CMPXCollectionViewHgImp::IsUpnpVisible" );
+    MPX_FUNC( "CMPXCollectionViewHgImp::IsUpnpVisibleL" );
  	  TBool returnValue = EFalse;
 
    	if ( iUpnpCopyCommand  && iUpnpFrameworkSupport)
@@ -4383,7 +4375,7 @@
             if ( !iContainer->IsInReorderMode() &&
                 !iAddingSong &&
                 !iInAlbumArtDialog &&
-                !iInSongDetails )
+                !iInSongDetails && !iContainer->IsTBoneView())
                 {
                 UpdateTitlePaneL();
                 }
@@ -5959,6 +5951,26 @@
     // Add view deactivation observer
     AppUi()->AddViewDeactivationObserverL( this );
 
+#ifdef __ENABLE_PODCAST_IN_MUSIC_MENU
+    // media is not valid until the first HandleOpenL call
+    CEikButtonGroupContainer* cba = Cba();
+    if ( cba )
+        {
+        cba->SetCommandSetL(R_MPX_OPTIONS_BACK_CBA_NO_ACTION); 
+        cba->DrawNow(); 
+        }
+#else
+    // media is not valid until the first HandleOpenL call
+    CEikButtonGroupContainer* cba = Cba();
+    if ( cba )
+        {
+        cba->SetCommandSetL(
+            ( iViewUtility->ViewHistoryDepth() == 1 && !iIsEmbedded ) ?
+            R_MPX_OPTIONS_EXIT_CBA_NO_ACTION : R_MPX_OPTIONS_BACK_CBA_NO_ACTION );
+        cba->DrawDeferred();
+        }
+#endif
+
     // Set status pane layout if switched here directly from another view,
     // such as when using the AnyKey
     StatusPane()->MakeVisible( ETrue );
@@ -5976,27 +5988,7 @@
     CMPXCollectionPath* cpath( iCollectionUtility->Collection().PathL() );
     CleanupStack::PushL( cpath );
 
-#ifdef __ENABLE_PODCAST_IN_MUSIC_MENU
-    // media is not valid until the first HandleOpenL call
-    CEikButtonGroupContainer* cba = Cba();
-    if ( cba )
-        {
-        cba->SetCommandSetL(
-            ( cpath->Levels() == 2 && !iIsEmbedded ) ?
-            R_MPX_OPTIONS_BACK_CBA_NO_ACTION : R_MPX_OPTIONS_BACK_CBA_NO_ACTION );
-        cba->DrawDeferred();
-        }
-#else
-    // media is not valid until the first HandleOpenL call
-    CEikButtonGroupContainer* cba = Cba();
-    if ( cba )
-        {
-        cba->SetCommandSetL(
-            ( iViewUtility->ViewHistoryDepth() == 1 && !iIsEmbedded ) ?
-            R_MPX_OPTIONS_EXIT_CBA_NO_ACTION : R_MPX_OPTIONS_BACK_CBA_NO_ACTION );
-        cba->DrawDeferred();
-        }
-#endif
+
 
 	UpdateTitlePaneL();
 
@@ -6093,7 +6085,11 @@
         delete iDuration;
         iDuration = NULL;
         }
-
+    if (iTitle)
+       {
+	   delete iTitle;
+       iTitle = NULL;
+       }
     // Cleanup view deactivation observer
     AppUi()->RemoveViewDeactivationObserver( this );
     }
@@ -6290,8 +6286,6 @@
     {
     MPX_FUNC( "CMPXCollectionViewHgImp::DynInitMenuPaneAlbumL" );
     ASSERT( iContainer && aMenuPane != NULL);
-    TBool isListEmpty( iContainer->TotalListItemCount() == 0 );
-
     switch ( aResourceId )
         {
         case R_MPX_COLLECTION_VIEW_MENU_1:
@@ -6309,50 +6303,43 @@
             aMenuPane->SetItemDimmed( EMPXCmdDelete, ETrue );
             aMenuPane->SetItemDimmed( EMPXCmdRemove, ETrue );
             aMenuPane->SetItemDimmed( EMPXCmdPlayItem, ETrue );
-            
-			if ( isListEmpty )
+            TBool landscapeOrientation = Layout_Meta_Data::IsLandscapeOrientation();
+			if ( !landscapeOrientation )
 				{
-				aMenuPane->SetItemDimmed( EMPXCmdGoToMultipleMusicShop, ETrue);
-				}
-			else
-				{
-				TBool landscapeOrientation = Layout_Meta_Data::IsLandscapeOrientation();
-				if ( !landscapeOrientation )
+				TInt usbUnblockingStatus;
+				RProperty::Get( KMPXViewPSUid,
+								KMPXUSBUnblockingPSStatus,
+								usbUnblockingStatus);
+
+				if ( iContainer->CurrentLbxItemIndex() > KErrNotFound && !iContainer->IsTBoneView())
+				    {
+                    if ( usbUnblockingStatus == EMPXUSBUnblockingPSStatusActive )
+                        {
+                        aMenuPane->SetItemDimmed( EMPXCmdAddToPlaylist, ETrue );
+                        aMenuPane->SetItemDimmed( EMPXCmdDelete, ETrue );
+                        }
+                    else
+                        {
+                         aMenuPane->SetItemDimmed( EMPXCmdAddToPlaylist, EFalse );
+                         aMenuPane->SetItemDimmed( EMPXCmdDelete, EFalse );
+                         aMenuPane->SetItemDimmed( EMPXCmdPlayItem, EFalse );
+                        }
+					}
+				if ( iContainer->IsSelectedItemASong() && iContainer->IsTBoneView() )
 					{
-					TInt usbUnblockingStatus;
-					RProperty::Get( KMPXViewPSUid,
-									KMPXUSBUnblockingPSStatus,
-									usbUnblockingStatus);
-
-					if ( iContainer->CurrentLbxItemIndex() > KErrNotFound && !iContainer->IsTBoneView())
-					    {
-                        if ( usbUnblockingStatus == EMPXUSBUnblockingPSStatusActive )
-                            {
-                            aMenuPane->SetItemDimmed( EMPXCmdAddToPlaylist, ETrue );
-                            aMenuPane->SetItemDimmed( EMPXCmdDelete, ETrue );
-                            }
-                        else
-                            {
-                            aMenuPane->SetItemDimmed( EMPXCmdAddToPlaylist, EFalse );
-                            aMenuPane->SetItemDimmed( EMPXCmdDelete, EFalse );
-                            aMenuPane->SetItemDimmed( EMPXCmdPlayItem, EFalse );
-                            }
-					    }
-					if ( iContainer->IsSelectedItemASong() && iContainer->IsTBoneView() )
+					if ( usbUnblockingStatus == EMPXUSBUnblockingPSStatusActive )
 						{
-						if ( usbUnblockingStatus == EMPXUSBUnblockingPSStatusActive )
-							{
-							aMenuPane->SetItemDimmed( EMPXCmdAddToPlaylist, ETrue );
-							aMenuPane->SetItemDimmed( EMPXCmdDelete, ETrue );
-							}
-						else
-							{
-							aMenuPane->SetItemDimmed( EMPXCmdAddToPlaylist, EFalse );
-							aMenuPane->SetItemDimmed( EMPXCmdDelete, EFalse );
-							aMenuPane->SetItemDimmed( EMPXCmdSend, EFalse );
-							}
+						aMenuPane->SetItemDimmed( EMPXCmdAddToPlaylist, ETrue );
+						aMenuPane->SetItemDimmed( EMPXCmdDelete, ETrue );
+						}
+					else
+						{
+						aMenuPane->SetItemDimmed( EMPXCmdAddToPlaylist, EFalse );
+						aMenuPane->SetItemDimmed( EMPXCmdDelete, EFalse );
+						aMenuPane->SetItemDimmed( EMPXCmdSend, EFalse );
 						}
 					}
+				}
 					
 				//If Operator Music store exist, show the cascade menu with Nokia and Operator music store.
 				if ( iOperatorMusicStore )
@@ -6363,7 +6350,6 @@
 				    {
 				    aMenuPane->SetItemDimmed(EMPXCmdGoToMultipleMusicShop, ETrue);
 				    }
-				}
 
 			break;
 			}
@@ -6376,18 +6362,21 @@
  			aMenuPane->SetItemDimmed( EMPXCmdSongDetails, ETrue );
 			aMenuPane->SetItemDimmed( EMPXCmdUseAsCascade, ETrue );
 			aMenuPane->SetItemDimmed( EMPXCmdPlaylistDetails, ETrue );
-			if( !iContainer->IsTBoneView()&& (iContainer->CurrentLbxItemIndex() > KErrNotFound))
-			    {  
-                CMPXCollectionViewListBoxArray* array =
-                static_cast<CMPXCollectionViewListBoxArray*>(
-                    iContainer->ListBoxArray() );
-			    const CMPXMedia& media = array->MediaL( iContainer->CurrentLbxItemIndex() );
-			    const TDesC& title( media.ValueText( KMPXMediaGeneralTitle ) );
-			    if( title.Length() > 0)
-			        {   
-			        aMenuPane->SetItemDimmed( EMPXCmdFindInMusicShop, !iUsingNokiaService );
-			        }
-			    } 
+			if ( !Layout_Meta_Data::IsLandscapeOrientation() )
+ 				{
+			    if( !iContainer->IsTBoneView()&& (iContainer->CurrentLbxItemIndex() > KErrNotFound))
+			        {  
+                    CMPXCollectionViewListBoxArray* array =
+                    static_cast<CMPXCollectionViewListBoxArray*>(
+                        iContainer->ListBoxArray() );
+			        const CMPXMedia& media = array->MediaL( iContainer->CurrentLbxItemIndex() );
+			        const TDesC& title( media.ValueText( KMPXMediaGeneralTitle ) );
+			        if( title.Length() > 0)
+			            {   
+			            aMenuPane->SetItemDimmed( EMPXCmdFindInMusicShop, !iUsingNokiaService );
+			            }
+			        } 
+			    }
 		    break;
 			}
         case R_MPX_ADD_TO_PL_SUB_MENU:
@@ -6412,9 +6401,7 @@
     CEikMenuPane* aMenuPane )
     {
     MPX_FUNC( "CMPXCollectionViewHgImp::DynInitMenuPanePlaylistL" );
-
-    TBool isListEmpty( (iContainer->TotalListItemCount()) == 0 );
-
+ 
     switch ( aResourceId )
         {
         case R_MPX_COLLECTION_VIEW_MENU_1:
@@ -6644,8 +6631,6 @@
     CEikMenuPane* aMenuPane )
     {
     MPX_FUNC( "CMPXCollectionViewHgImp::DynInitMenuPaneAllSongsL" );
-
-    TBool isListEmpty( iContainer->TotalListItemCount() == 0 );
     TInt selectionCount( 0 );
     iSelectionIndexCache = iContainer->CurrentSelectionIndicesL(); // not owned
     switch ( aResourceId )
@@ -6665,43 +6650,34 @@
             aMenuPane->SetItemDimmed( EMPXCmdRemove, ETrue );
             aMenuPane->SetItemDimmed( EMPXCmdDelete, ETrue );
             aMenuPane->SetItemDimmed( EMPXCmdPlayItem, ETrue );
-            
-			if ( isListEmpty )
-				{
-				aMenuPane->SetItemDimmed( EMPXCmdGoToMultipleMusicShop, ETrue);
-				}
-			else
-				{
-				TInt usbUnblockingStatus;
-				RProperty::Get( KMPXViewPSUid,
+			TInt usbUnblockingStatus;
+			RProperty::Get( KMPXViewPSUid,
 								KMPXUSBUnblockingPSStatus,
 								usbUnblockingStatus);
 
-				if ( iContainer->IsSelectedItemASong() )
+			if ( iContainer->IsSelectedItemASong() )
+				{
+				if ( usbUnblockingStatus == EMPXUSBUnblockingPSStatusActive )
+					{
+					aMenuPane->SetItemDimmed( EMPXCmdAddToPlaylist, ETrue );
+					aMenuPane->SetItemDimmed( EMPXCmdSend, SendOptionVisibilityL() );
+					aMenuPane->SetItemDimmed( EMPXCmdDelete, ETrue );
+					}
+				else
 					{
-					if ( usbUnblockingStatus == EMPXUSBUnblockingPSStatusActive )
-						{
-						aMenuPane->SetItemDimmed( EMPXCmdAddToPlaylist, ETrue );
-						aMenuPane->SetItemDimmed( EMPXCmdSend, SendOptionVisibilityL() );
-						aMenuPane->SetItemDimmed( EMPXCmdDelete, ETrue );
-						}
-					else
-						{
-						aMenuPane->SetItemDimmed( EMPXCmdAddToPlaylist, EFalse );
-						aMenuPane->SetItemDimmed( EMPXCmdSend, SendOptionVisibilityL() );
-						aMenuPane->SetItemDimmed( EMPXCmdDelete, EFalse );
-						}
+					aMenuPane->SetItemDimmed( EMPXCmdAddToPlaylist, EFalse );
+					aMenuPane->SetItemDimmed( EMPXCmdSend, SendOptionVisibilityL() );
+					aMenuPane->SetItemDimmed( EMPXCmdDelete, EFalse );
 					}
-				if ( iOperatorMusicStore )
-				    {
-				    aMenuPane->SetItemDimmed(EMPXCmdGoToMusicShop, ETrue);
-				    }
-				else
-				    {
-				    aMenuPane->SetItemDimmed(EMPXCmdGoToMultipleMusicShop, ETrue);
-				    }
 				}
-
+			if ( iOperatorMusicStore )
+			    {
+			    aMenuPane->SetItemDimmed(EMPXCmdGoToMusicShop, ETrue);
+			    }
+			else
+			    {
+			    aMenuPane->SetItemDimmed(EMPXCmdGoToMultipleMusicShop, ETrue);
+			    }
 			break;
 			}
 
@@ -8274,12 +8250,12 @@
 
 
 // -----------------------------------------------------------------------------
-// CMPXCollectionViewHgImp::SaveSelectedAlbum
+// CMPXCollectionViewHgImp::SaveSelectedAlbumL
 // -----------------------------------------------------------------------------
 //
-void CMPXCollectionViewHgImp::SaveSelectedAlbum (CMPXMedia &aMedia)
+void CMPXCollectionViewHgImp::SaveSelectedAlbumL(CMPXMedia &aMedia)
     {
-    MPX_FUNC( "CMPXCollectionViewHgImp::SaveSelectedAlbum" );
+    MPX_FUNC( "CMPXCollectionViewHgImp::SaveSelectedAlbumL" );
     if (iStoredAlbum)
 		{
 		delete iStoredAlbum;
@@ -8413,7 +8389,7 @@
 //
 TBool CMPXCollectionViewHgImp::NeedToShowEducatingDialog()
     {
-    if(iEducateUserURI && iCollectionReady && //If educating user URI is in cenrep and Collection is Ready
+    if(iEducateUserURI->Length() > 0 && iCollectionReady && //If educating user URI is in cenrep and Collection is Ready
       (iEducatingPopupState == EMPXInitialEducatingPopup || //If Music Player is launched first time after phone flash 
       (iEducatingPopupState == EMPXShowEducatingPopup && iPopuponRefresh))) //If user pressed yes on "Remind me later" and its manual refresh with some song added
         {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgswitchbuffer.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -0,0 +1,130 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Implements a container for buffer switch handling.
+*
+*/
+
+
+#include "mpxcollectionviewhgswitchbuffer.h"
+
+#include <gulicon.h>
+
+#include <ganes/HgScroller.h>
+#include <ganes/HgVgMediaWall.h>
+#include <ganes/HgItem.h>
+#include <ganes/HgVgItem.h>
+
+// ----------------------------------------------------------------------------
+// Create a copy of the icons used from input
+// ----------------------------------------------------------------------------
+CMPXCollectionViewHgSwitchBuffer* CMPXCollectionViewHgSwitchBuffer::CreateBufferLC( CHgScroller& aScroller )
+    {
+    CMPXCollectionViewHgSwitchBuffer* buffer = new (ELeave) CMPXCollectionViewHgSwitchBuffer();
+    CleanupStack::PushL(buffer);
+
+    for(TInt i = 0; i < aScroller.ItemCount(); ++i)
+        {
+        CGulIcon* icon = aScroller.ItemL(i).Icon();
+        if(icon)
+            {
+            buffer->AddToBufferL(*icon, i);
+            }
+        }
+
+    return buffer;
+    }
+
+// ----------------------------------------------------------------------------
+// Create a copy of the icons used from input
+// ----------------------------------------------------------------------------
+CMPXCollectionViewHgSwitchBuffer* CMPXCollectionViewHgSwitchBuffer::CreateBufferLC( CHgVgMediaWall& aMediaWall )
+    {
+    CMPXCollectionViewHgSwitchBuffer* buffer = new (ELeave) CMPXCollectionViewHgSwitchBuffer();
+    CleanupStack::PushL(buffer);
+
+    for(TInt i = 0; i < aMediaWall.ItemCount(); ++i)
+        {
+        CGulIcon* icon = aMediaWall.ItemL(i).Icon();
+        if(icon)
+            {
+            buffer->AddToBufferL(*icon, i);
+            }
+        }
+
+    return buffer;
+    }
+
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+CMPXCollectionViewHgSwitchBuffer::~CMPXCollectionViewHgSwitchBuffer ()
+    {
+    iBuffer.ResetAndDestroy();
+    }
+
+// ----------------------------------------------------------------------------
+// Provide mediawall with the data from buffer.
+// ----------------------------------------------------------------------------
+void CMPXCollectionViewHgSwitchBuffer::FillFromBufferL( CHgVgMediaWall& aMediaWall )
+    {
+    for(TInt i = 0; i < iBuffer.Count(); ++i)
+        {
+        CGulIcon* icon = iBuffer[i]->GetIcon();
+        CleanupStack::PushL(icon);
+        if(icon)
+            aMediaWall.ItemL(iBuffer[i]->Index() + iOffset).SetIcon(icon);
+
+        CleanupStack::Pop(icon);
+        }
+    }
+
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+void CMPXCollectionViewHgSwitchBuffer::FillFromBufferL( CHgScroller& aScroller, TSize aSize )
+    {
+    User::Leave(KErrNotSupported);
+    }
+
+// ----------------------------------------------------------------------------
+// Offset to start filling.
+// ----------------------------------------------------------------------------
+void CMPXCollectionViewHgSwitchBuffer::SetIndexOffset( TInt aOffset )
+    {
+    iOffset = aOffset;
+    }
+
+// ----------------------------------------------------------------------------
+// Add icon to the buffer.
+// ----------------------------------------------------------------------------
+void CMPXCollectionViewHgSwitchBuffer::AddToBufferL(CGulIcon& aIcon, TInt aIndex)
+    {
+    CGulIcon* newIcon = CGulIcon::NewL(aIcon.Bitmap(), aIcon.Mask());
+    TBool isShared = aIcon.BitmapsOwnedExternally();
+    aIcon.SetBitmapsOwnedExternally(ETrue);
+    newIcon->SetBitmapsOwnedExternally(isShared);
+
+    CleanupStack::PushL(newIcon);
+    CBufferItem* item = new (ELeave) CBufferItem( newIcon, aIndex );
+    iBuffer.AppendL(item);
+    CleanupStack::Pop(newIcon);
+    }
+
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+CMPXCollectionViewHgSwitchBuffer::CMPXCollectionViewHgSwitchBuffer ()
+    {
+
+    }
--- a/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgtnloader.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgtnloader.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -67,11 +67,11 @@
 TInt CMpxTNLoader::LoadThumbnail( TAny* aSelf )
     {
     CMpxTNLoader* self = (CMpxTNLoader*)aSelf;
-    self->LoadNextTN();
-    return KErrNone;
+    MPX_TRAPD( err, self->LoadNextTNL() );
+    return err;
     }
 
-void CMpxTNLoader::LoadNextTN()
+void CMpxTNLoader::LoadNextTNL()
     {
     if( iPaused )
         return;
--- a/mpxplugins/viewplugins/views/commoncontainer/inc/mpxcommoncontaineravkonimp.h	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/commoncontainer/inc/mpxcommoncontaineravkonimp.h	Tue Apr 27 16:34:37 2010 +0300
@@ -236,7 +236,7 @@
      *
      * @since 3.2
      */
-    void DrawLbxItem( TInt aIndex );
+    void DrawLbxItemL( TInt aIndex );
     
     /**
      * Set Find box's focus.
@@ -329,7 +329,7 @@
     /**
      * Custom handling of menu pane for markable lists
      */
-    void HandleMarkableListDynInitMenuPane(
+    void HandleMarkableListDynInitMenuPaneL(
         TInt aResourceId,
         CEikMenuPane* aMenuPane );
         
--- a/mpxplugins/viewplugins/views/commoncontainer/inc/mpxcommoncontainerhgimp.h	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/commoncontainer/inc/mpxcommoncontainerhgimp.h	Tue Apr 27 16:34:37 2010 +0300
@@ -263,7 +263,7 @@
      *
      * @since 3.2
      */
-    void DrawLbxItem( TInt aIndex );
+    void DrawLbxItemL( TInt aIndex );
 
     /**
      * Set Find box's focus.
@@ -356,7 +356,7 @@
     /**
      * Custom handling of menu pane for markable lists
      */
-    void HandleMarkableListDynInitMenuPane(
+    void HandleMarkableListDynInitMenuPaneL(
         TInt aResourceId,
         CEikMenuPane* aMenuPane );
 
@@ -552,7 +552,7 @@
 
     void ProvideDataL( TInt aStart, TInt aEnd );
 
-    void SetScrollbarType();
+    void SetScrollbarTypeL();
 
     void CancelTNRequest();
 
@@ -579,7 +579,7 @@
     /**
      * Refresh list as needed
      */
-    void RefreshL(TInt aIndex);
+    void Refresh(TInt aIndex);
 
     /**
      * Refresh list as needed
--- a/mpxplugins/viewplugins/views/commoncontainer/src/mpxcommoncontaineravkonimp.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/commoncontainer/src/mpxcommoncontaineravkonimp.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -353,7 +353,7 @@
 // Draws a list box item
 // -----------------------------------------------------------------------------
 //
-void CMPXCommonContainerAvkonImp::DrawLbxItem( TInt aIndex )
+void CMPXCommonContainerAvkonImp::DrawLbxItemL( TInt aIndex )
     {
     ASSERT( iListBox );
     TInt topIndex( TopLbxItemIndex() );
@@ -552,7 +552,7 @@
 // Custom handling of menu pane for markable lists
 // ---------------------------------------------------------------------------
 //
-void CMPXCommonContainerAvkonImp::HandleMarkableListDynInitMenuPane(
+void CMPXCommonContainerAvkonImp::HandleMarkableListDynInitMenuPaneL(
     TInt aResourceId,
     CEikMenuPane* aMenuPane )
     {
--- a/mpxplugins/viewplugins/views/commoncontainer/src/mpxcommoncontainerhgimp.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/commoncontainer/src/mpxcommoncontainerhgimp.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -429,9 +429,9 @@
 // Draws a list box item
 // -----------------------------------------------------------------------------
 //
-void CMPXCommonContainerHgImp::DrawLbxItem( TInt aIndex )
+void CMPXCommonContainerHgImp::DrawLbxItemL( TInt aIndex )
     {
-    MPX_DEBUG2( "CMPXCommonContainerHgImp::DrawLbxItem (aIndex=%d)", aIndex );
+    MPX_DEBUG2( "CMPXCommonContainerHgImp::DrawLbxItemL (aIndex=%d)", aIndex );
     if ( iListWidget && iBottomIndex > 0 )
         {
         CHgItem* item = &iListWidget->ItemL(aIndex);
@@ -521,7 +521,7 @@
             	}
     	    }
         SetDefaultIconL();
-	    SetScrollbarType();
+	    SetScrollbarTypeL();
     	}
     }
 
@@ -706,7 +706,7 @@
 // Custom handling of menu pane for markable lists
 // ---------------------------------------------------------------------------
 //
-void CMPXCommonContainerHgImp::HandleMarkableListDynInitMenuPane(
+void CMPXCommonContainerHgImp::HandleMarkableListDynInitMenuPaneL(
     TInt aResourceId,
     CEikMenuPane* aMenuPane )
     {
@@ -899,7 +899,7 @@
                 {
             	iListWidget->InitScreenL(clientRect);
                 }
-            SetScrollbarType();
+            SetScrollbarTypeL();
             }
         );
     }
@@ -1003,20 +1003,24 @@
         iThumbnailReqMap[ i ] = EFalse;
         }
 
-
-    if ( aDirection == EHgBufferReset  || aDirection == EHgBufferScrollDown || aDirection == EHgBufferScrollUp)
-        {
-        // For index range in visible-area
-        ProvideDataIntersectL(aBufferStart, aBufferEnd);
-        // For index range elsewhere
-        ProvideDataDifferenceL(aBufferStart, aBufferEnd);
-       }
-    else
-        {
-        ProvideDataL(aBufferStart, aBufferEnd);
-        }
-
-	//RefreshL(aBufferStart);
+    MPX_TRAPD( err,
+            if ( aDirection == EHgBufferReset || aDirection == EHgBufferScrollDown || aDirection == EHgBufferScrollUp)
+                {
+                // For index range in visible-area
+                ProvideDataIntersectL(aBufferStart, aBufferEnd);
+                // For index range elsewhere
+                ProvideDataDifferenceL(aBufferStart, aBufferEnd);
+                }
+            else
+                {
+                ProvideDataL(aBufferStart, aBufferEnd);
+                } );
+    
+    if( err != KErrNone )
+    	{
+        MPX_DEBUG2( "CMPXCommonContainerHgImp::Request leave err = %d", err );
+    	}
+	//Refresh(aBufferStart);
     // When in main collection view, list can be refresh
     // without waiting on thumbnails since this list doesn't
     // require thumbnails.
@@ -1230,15 +1234,28 @@
 
     if ( aError == KErrNone && ret )
         {
+            CMPXMedia* currentMedia( NULL );
             const CMPXMediaArray& mediaArray = iListBoxArray->MediaArray();
-            CMPXMedia* currentMedia( mediaArray.AtL( index ) );
+            MPX_TRAPD( err, currentMedia = mediaArray.AtL( index ) );
+            if( err != KErrNone )
+            	{
+                __ASSERT_DEBUG( EFalse, User::Panic( _L( "CMPXCommonContainerHgImp::ThumbnailReady()" ), err ) );
+                return;
+            	}
+            
             if ( currentMedia->IsSupported( KMPXMediaGeneralId ) )
                 {
                 CFbsBitmap* bmap = aThumbnail.DetachBitmap();
                 if ( bmap )
                     {
-                    CGulIcon* icon = CGulIcon::NewL(bmap, NULL);
-
+					CGulIcon* icon( NULL );
+					MPX_TRAP( err,  icon = CGulIcon::NewL( bmap, NULL ) );
+					if( err != KErrNone )
+						{
+						__ASSERT_DEBUG( EFalse, User::Panic( _L( "CMPXCommonContainerHgImp::ThumbnailReady()" ), err ) );
+						return;
+						}
+					
                     if ( iScrollerWithTitle && !iTitleSet )
                         {
                         iScrollerWithTitle->TitleItem().SetIcon(icon);
@@ -1250,9 +1267,13 @@
                         }
                     else
                         {
-                        iListWidget->ItemL(index).SetIcon(icon);
+                        MPX_TRAPD( err, iListWidget->ItemL(index).SetIcon(icon); )
+                        if( err != KErrNone )
+                        	{
+                            MPX_DEBUG2( "CMPXCommonContainerHgImp::ThumbnailReady--iListWidget->ItemL(index).SetIcon(icon) leave err%d", err);
+                        	}
                         iThumbnailReqMap[index] = ETrue;
-                        RefreshL(index);
+                        Refresh( index );
                         }
                     }
 				}
@@ -1267,21 +1288,22 @@
 				TInt index = iAlbumArtRequest->iIndex;
 
 				const TDesC&   albumArtUri = *(iAlbumArtRequest->iAlbumArtUri);
-
+				TRAP_IGNORE
+				(
 				CThumbnailObjectSource* source = CThumbnailObjectSource::NewLC( albumArtUri, KMPXAlbumMimeType );
-
 				delete iAlbumArtRequest->iAlbumArtUri;
 				delete iAlbumArtRequest;
 				// Using negative index as priority will ensure that thumbnail requests
 				// are processed in the order they were requested.
 				TInt ret = NULL;
 				TInt reqId;
-				TRAPD(err, reqId = (TInt) iThumbnailManager->GetThumbnailL( *source, (TAny*)ret, -index ));
+				MPX_TRAP(err, reqId = (TInt) iThumbnailManager->GetThumbnailL( *source, (TAny*)ret, -index ));
 				if ( err == KErrNone)
 					{
 					iThumbnailReqHashMap.InsertL( reqId, index );
 					}
 				CleanupStack::PopAndDestroy( source );
+				);
 				}
 			 else
 				{
@@ -1302,7 +1324,8 @@
 			{
 			return;
 			}
-
+		TRAP_IGNORE
+		(
 		//no albumart supported
 		SetDefaultIconL(index);
         if ( iScrollerWithTitle && !iTitleSet )
@@ -1315,9 +1338,10 @@
         else
             {
             iThumbnailReqMap[index] = ETrue;
-            RefreshL(index);
+            Refresh(index);
             }
-    	}
+        );
+        }
 
     }
 
@@ -1338,7 +1362,7 @@
         }
     else
         {
-        RefreshL(aIndex);
+        Refresh(aIndex);
         }
     }
 // ---------------------------------------------------------------------------
@@ -1347,7 +1371,7 @@
 // avoid too many redraws. In some cases, multiple refresh is unavoidable.
 // ---------------------------------------------------------------------------
 //
-void CMPXCommonContainerHgImp::RefreshL(TInt aIndex)
+void CMPXCommonContainerHgImp::Refresh(TInt aIndex)
     {
     MPX_FUNC( "CMPXCommonContainerHgImp::Refresh" );
 
@@ -2428,7 +2452,7 @@
 // CMPXCommonContainerHgImp::SetScrollbarType
 // -----------------------------------------------------------------------------
 //
-void CMPXCommonContainerHgImp::SetScrollbarType()
+void CMPXCommonContainerHgImp::SetScrollbarTypeL()
     {
     MPX_FUNC( "CMPXCommonContainerHgImp::SetScrollbarType" );
 
--- a/mpxplugins/viewplugins/views/commoncontainer/src/mpxcommoncontainermediahelper.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/commoncontainer/src/mpxcommoncontainermediahelper.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -237,7 +237,7 @@
                         // Update the list box item
                         *media = aMedia;
                         // Refresh the list box item
-                        iCommonContainer->DrawLbxItem( index );
+                        iCommonContainer->DrawLbxItemL( index );
                         break;
                         }
                     }
--- a/mpxplugins/viewplugins/views/commonplaybackview/bwinscw/mpxcommonplaybackviewU.DEF	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/commonplaybackview/bwinscw/mpxcommonplaybackviewU.DEF	Tue Apr 27 16:34:37 2010 +0300
@@ -5,109 +5,110 @@
 	?SetRepeatMode@CMPXCommonPlaybackViewContainer@@UAEXHH@Z @ 4 NONAME ; void CMPXCommonPlaybackViewContainer::SetRepeatMode(int, int)
 	?CreateColorIconL@CMPXCommonPlaybackViewLayout@@IAEPAVCGulIcon@@PAVMAknsSkinInstance@@ABVTAknsItemID@@1HABVTDesC16@@HH@Z @ 5 NONAME ; class CGulIcon * CMPXCommonPlaybackViewLayout::CreateColorIconL(class MAknsSkinInstance *, class TAknsItemID const &, class TAknsItemID const &, int, class TDesC16 const &, int, int)
 	?ConstructL@CMPXCommonPlaybackViewContainer@@UAEXABVTRect@@@Z @ 6 NONAME ; void CMPXCommonPlaybackViewContainer::ConstructL(class TRect const &)
-	?UpdateTimeIndicatorsL@CMPXCommonPlaybackViewContainer@@UAEXHH@Z @ 7 NONAME ; void CMPXCommonPlaybackViewContainer::UpdateTimeIndicatorsL(int, int)
-	?DisplayConfirmionNoteL@CMPXCommonPlaybackViewImp@@MAEXH@Z @ 8 NONAME ; void CMPXCommonPlaybackViewImp::DisplayConfirmionNoteL(int)
-	?HandlePlaybackMessage@CMPXCommonPlaybackViewImp@@MAEXPAVCMPXMedia@@H@Z @ 9 NONAME ; void CMPXCommonPlaybackViewImp::HandlePlaybackMessage(class CMPXMedia *, int)
-	?HandleSettingChange@CMPXCommonPlaybackViewImp@@MAEXABVTUid@@K@Z @ 10 NONAME ; void CMPXCommonPlaybackViewImp::HandleSettingChange(class TUid const &, unsigned long)
-	?HandleForegroundEventL@CMPXCommonPlaybackViewImp@@MAEXH@Z @ 11 NONAME ; void CMPXCommonPlaybackViewImp::HandleForegroundEventL(int)
-	?HandleErrorL@CMPXCommonPlaybackViewImp@@MAEXH@Z @ 12 NONAME ; void CMPXCommonPlaybackViewImp::HandleErrorL(int)
-	?GetCurrentPlayerDetails@CMPXCommonPlaybackViewImp@@MAEXXZ @ 13 NONAME ; void CMPXCommonPlaybackViewImp::GetCurrentPlayerDetails(void)
-	?UpdateDurationLabelL@CMPXCommonPlaybackViewContainer@@UAEXH@Z @ 14 NONAME ; void CMPXCommonPlaybackViewContainer::UpdateDurationLabelL(int)
-	?DoHandleStateChangedL@CMPXCommonPlaybackViewImp@@MAEXW4TMPXPlaybackState@@H@Z @ 15 NONAME ; void CMPXCommonPlaybackViewImp::DoHandleStateChangedL(enum TMPXPlaybackState, int)
-	?DisplayInfoNoteL@CMPXCommonPlaybackViewImp@@MAEXH@Z @ 16 NONAME ; void CMPXCommonPlaybackViewImp::DisplayInfoNoteL(int)
-	?RequestMediaL@CMPXCommonPlaybackViewImp@@MAEXH@Z @ 17 NONAME ; void CMPXCommonPlaybackViewImp::RequestMediaL(int)
-	?HandleStatusPaneSizeChange@CMPXCommonPlaybackViewImp@@MAEXXZ @ 18 NONAME ; void CMPXCommonPlaybackViewImp::HandleStatusPaneSizeChange(void)
-	?UpdateTrackInfoL@CMPXCommonPlaybackViewImp@@MAEXPBVCMPXMedia@@@Z @ 19 NONAME ; void CMPXCommonPlaybackViewImp::UpdateTrackInfoL(class CMPXMedia const *)
-	?PrepareMediaForPlaylistLC@CMPXCommonPlaybackViewImp@@MAEPAVCMPXMedia@@ABV2@@Z @ 20 NONAME ; class CMPXMedia * CMPXCommonPlaybackViewImp::PrepareMediaForPlaylistLC(class CMPXMedia const &)
-	?ExtractAlbumArtCompleted@CMPXCommonPlaybackViewContainer@@UAEXPAVCFbsBitmap@@H@Z @ 21 NONAME ; void CMPXCommonPlaybackViewContainer::ExtractAlbumArtCompleted(class CFbsBitmap *, int)
-	?HandleViewActivation@CMPXCommonPlaybackViewImp@@MAEXABVTUid@@0@Z @ 22 NONAME ; void CMPXCommonPlaybackViewImp::HandleViewActivation(class TUid const &, class TUid const &)
-	?IsCommandSupportedL@CMPXCommonPlaybackViewImp@@MAEHXZ @ 23 NONAME ; int CMPXCommonPlaybackViewImp::IsCommandSupportedL(void)
-	?GetIndicatorIconMaskL@CMPXCommonPlaybackViewLayout@@UAEPAVCGulIcon@@W4TMPXPbvIndicator@@@Z @ 24 NONAME ; class CGulIcon * CMPXCommonPlaybackViewLayout::GetIndicatorIconMaskL(enum TMPXPbvIndicator)
-	?GetButtonBitmapsL@CMPXCommonPlaybackViewLayout@@UAEXW4TMPXPbvButton@@HAAPAVCFbsBitmap@@1@Z @ 25 NONAME ; void CMPXCommonPlaybackViewLayout::GetButtonBitmapsL(enum TMPXPbvButton, int, class CFbsBitmap * &, class CFbsBitmap * &)
-	?UpdateBackgroundSkinControlContext@CMPXCommonPlaybackViewContainer@@MAEXABVTRect@@@Z @ 26 NONAME ; void CMPXCommonPlaybackViewContainer::UpdateBackgroundSkinControlContext(class TRect const &)
-	?HandleOpenL@CMPXCommonPlaybackViewImp@@MAEXABVCMPXCollectionPlaylist@@H@Z @ 27 NONAME ; void CMPXCommonPlaybackViewImp::HandleOpenL(class CMPXCollectionPlaylist const &, int)
-	?GetTextVariant@CMPXCommonPlaybackViewLayout@@IAE?AW4TMPXPbvLayoutVariants@@W4TMPXPbvTextIndicator@@@Z @ 28 NONAME ; enum TMPXPbvLayoutVariants CMPXCommonPlaybackViewLayout::GetTextVariant(enum TMPXPbvTextIndicator)
-	??1CMPXCommonPlaybackViewContainer@@UAE@XZ @ 29 NONAME ; CMPXCommonPlaybackViewContainer::~CMPXCommonPlaybackViewContainer(void)
-	?SetRealAudioMode@CMPXCommonPlaybackViewContainer@@UAEXH@Z @ 30 NONAME ; void CMPXCommonPlaybackViewContainer::SetRealAudioMode(int)
-	?DetermineLayoutVariant@CMPXCommonPlaybackViewLayout@@IAE?AW4TMPXPbvLayoutVariants@@XZ @ 31 NONAME ; enum TMPXPbvLayoutVariants CMPXCommonPlaybackViewLayout::DetermineLayoutVariant(void)
-	?SetMode@CMPXCommonPlaybackViewContainer@@UAEXW4TMPXPbvPlaybackMode@@@Z @ 32 NONAME ; void CMPXCommonPlaybackViewContainer::SetMode(enum TMPXPbvPlaybackMode)
-	?AddPlayersNamesToMenuL@CMPXCommonPlaybackViewImp@@MAEXAAVCEikMenuPane@@@Z @ 33 NONAME ; void CMPXCommonPlaybackViewImp::AddPlayersNamesToMenuL(class CEikMenuPane &)
-	?DynInitMenuPaneL@CMPXCommonPlaybackViewImp@@MAEXHPAVCEikMenuPane@@@Z @ 34 NONAME ; void CMPXCommonPlaybackViewImp::DynInitMenuPaneL(int, class CEikMenuPane *)
-	?HandlePropertyL@CMPXCommonPlaybackViewImp@@MAEXW4TMPXPlaybackProperty@@HH@Z @ 35 NONAME ; void CMPXCommonPlaybackViewImp::HandlePropertyL(enum TMPXPlaybackProperty, int, int)
-	?SkipOnErrorL@CMPXCommonPlaybackViewImp@@MAEXHH@Z @ 36 NONAME ; void CMPXCommonPlaybackViewImp::SkipOnErrorL(int, int)
-	?HandleOpenL@CMPXCommonPlaybackViewImp@@MAEXABVCMPXMedia@@HHH@Z @ 37 NONAME ; void CMPXCommonPlaybackViewImp::HandleOpenL(class CMPXMedia const &, int, int, int)
-	?LayoutLabel@CMPXCommonPlaybackViewLayout@@UAEXPAVCEikLabel@@ABVTRect@@W4TMPXPbvTextIndicator@@HH@Z @ 38 NONAME ; void CMPXCommonPlaybackViewLayout::LayoutLabel(class CEikLabel *, class TRect const &, enum TMPXPbvTextIndicator, int, int)
-	?RefreshProgressBar@CMPXCommonPlaybackViewContainer@@MAEXXZ @ 39 NONAME ; void CMPXCommonPlaybackViewContainer::RefreshProgressBar(void)
-	?HandleLayoutChange@CMPXCommonPlaybackViewImp@@MAEXXZ @ 40 NONAME ; void CMPXCommonPlaybackViewImp::HandleLayoutChange(void)
-	?IsUpnpVisible@CMPXCommonPlaybackViewImp@@MAEHXZ @ 41 NONAME ; int CMPXCommonPlaybackViewImp::IsUpnpVisible(void)
-	?CountComponentControls@CMPXCommonPlaybackViewContainer@@MBEHXZ @ 42 NONAME ; int CMPXCommonPlaybackViewContainer::CountComponentControls(void) const
-	?DoHandlePropertyL@CMPXCommonPlaybackViewImp@@MAEXW4TMPXPlaybackProperty@@HH@Z @ 43 NONAME ; void CMPXCommonPlaybackViewImp::DoHandlePropertyL(enum TMPXPlaybackProperty, int, int)
-	?ExtractAlbumArtStarted@CMPXCommonPlaybackViewContainer@@UAEXXZ @ 44 NONAME ; void CMPXCommonPlaybackViewContainer::ExtractAlbumArtStarted(void)
-	?UpdateDownloadStateLabelL@CMPXCommonPlaybackViewImp@@MAEXXZ @ 45 NONAME ; void CMPXCommonPlaybackViewImp::UpdateDownloadStateLabelL(void)
-	?SetFMTXMode@CMPXCommonPlaybackViewContainer@@MAEXH@Z @ 46 NONAME ; void CMPXCommonPlaybackViewContainer::SetFMTXMode(int)
-	?ProcessCommandL@CMPXCommonPlaybackViewImp@@MAEXH@Z @ 47 NONAME ; void CMPXCommonPlaybackViewImp::ProcessCommandL(int)
-	?LaunchMusicSettingsL@CMPXCommonPlaybackViewImp@@MAEXXZ @ 48 NONAME ; void CMPXCommonPlaybackViewImp::LaunchMusicSettingsL(void)
-	?GetNewSongPosition@CMPXCommonPlaybackViewContainer@@UAEHXZ @ 49 NONAME ; int CMPXCommonPlaybackViewContainer::GetNewSongPosition(void)
-	?UpdateMiddleSoftKeyDisplayL@CMPXCommonPlaybackViewImp@@IAEXXZ @ 50 NONAME ; void CMPXCommonPlaybackViewImp::UpdateMiddleSoftKeyDisplayL(void)
-	?SizeChanged@CMPXCommonPlaybackViewContainer@@MAEXXZ @ 51 NONAME ; void CMPXCommonPlaybackViewContainer::SizeChanged(void)
-	?HandleOperationCompleteL@CMPXCommonPlaybackViewImp@@MAEXW4TCHelperOperation@@HPAX@Z @ 52 NONAME ; void CMPXCommonPlaybackViewImp::HandleOperationCompleteL(enum TCHelperOperation, int, void *)
-	?LaunchFMTransmitterL@CMPXCommonPlaybackViewImp@@MAEXXZ @ 53 NONAME ; void CMPXCommonPlaybackViewImp::LaunchFMTransmitterL(void)
-	?UpdateViewL@CMPXCommonPlaybackViewImp@@MAEXXZ @ 54 NONAME ; void CMPXCommonPlaybackViewImp::UpdateViewL(void)
-	?DrawIndicator@CMPXCommonPlaybackViewContainer@@MBEXAAVCWindowGc@@ABVTRect@@1PBVCGulIcon@@H@Z @ 55 NONAME ; void CMPXCommonPlaybackViewContainer::DrawIndicator(class CWindowGc &, class TRect const &, class TRect const &, class CGulIcon const *, int) const
-	?FreeIcons@CMPXCommonPlaybackViewContainer@@IAEXXZ @ 56 NONAME ; void CMPXCommonPlaybackViewContainer::FreeIcons(void)
-	?HandleSubPlayerNamesL@CMPXCommonPlaybackViewImp@@MAEXVTUid@@PBVMDesC16Array@@HH@Z @ 57 NONAME ; void CMPXCommonPlaybackViewImp::HandleSubPlayerNamesL(class TUid, class MDesC16Array const *, int, int)
-	?UpdateLabelL@CMPXCommonPlaybackViewContainer@@UAEXW4TMPXPbvTextIndicator@@ABVTDesC16@@@Z @ 58 NONAME ; void CMPXCommonPlaybackViewContainer::UpdateLabelL(enum TMPXPbvTextIndicator, class TDesC16 const &)
-	?DoDeactivate@CMPXCommonPlaybackViewImp@@MAEXXZ @ 59 NONAME ; void CMPXCommonPlaybackViewImp::DoDeactivate(void)
-	?HandleCommandComplete@CMPXCommonPlaybackViewImp@@MAEXPAVCMPXMedia@@H@Z @ 60 NONAME ; void CMPXCommonPlaybackViewImp::HandleCommandComplete(class CMPXMedia *, int)
-	?HandleButtonCommandL@CMPXCommonPlaybackViewContainer@@MAEXH@Z @ 61 NONAME ; void CMPXCommonPlaybackViewContainer::HandleButtonCommandL(int)
-	?OfferKeyEventL@CMPXCommonPlaybackViewContainer@@UAE?AW4TKeyResponse@@ABUTKeyEvent@@W4TEventCode@@@Z @ 62 NONAME ; enum TKeyResponse CMPXCommonPlaybackViewContainer::OfferKeyEventL(struct TKeyEvent const &, enum TEventCode)
-	?SetRandomMode@CMPXCommonPlaybackViewContainer@@UAEXH@Z @ 63 NONAME ; void CMPXCommonPlaybackViewContainer::SetRandomMode(int)
-	?HandleCollectionMessage@CMPXCommonPlaybackViewImp@@MAEXPAVCMPXMedia@@H@Z @ 64 NONAME ; void CMPXCommonPlaybackViewImp::HandleCollectionMessage(class CMPXMedia *, int)
-	?ComponentControl@CMPXCommonPlaybackViewContainer@@MBEPAVCCoeControl@@H@Z @ 65 NONAME ; class CCoeControl * CMPXCommonPlaybackViewContainer::ComponentControl(int) const
-	?UpdateTrackPosInPlaylistL@CMPXCommonPlaybackViewImp@@MAEXXZ @ 66 NONAME ; void CMPXCommonPlaybackViewImp::UpdateTrackPosInPlaylistL(void)
-	?LaunchEqualizerL@CMPXCommonPlaybackViewImp@@MAEXXZ @ 67 NONAME ; void CMPXCommonPlaybackViewImp::LaunchEqualizerL(void)
-	?HandleAllTracksInvalidL@CMPXCommonPlaybackViewImp@@MAEXXZ @ 68 NONAME ; void CMPXCommonPlaybackViewImp::HandleAllTracksInvalidL(void)
-	?AddToNewPlaylistL@CMPXCommonPlaybackViewImp@@MAEXXZ @ 69 NONAME ; void CMPXCommonPlaybackViewImp::AddToNewPlaylistL(void)
-	?IndicatorLayout@CMPXCommonPlaybackViewLayout@@UAE?AVTRect@@ABV2@W4TMPXPbvIndicator@@@Z @ 70 NONAME ; class TRect CMPXCommonPlaybackViewLayout::IndicatorLayout(class TRect const &, enum TMPXPbvIndicator)
-	?UpdateTrackPlaybackPositionL@CMPXCommonPlaybackViewImp@@MAEXHH@Z @ 71 NONAME ; void CMPXCommonPlaybackViewImp::UpdateTrackPlaybackPositionL(int, int)
-	?UpdateTitlePaneL@CMPXCommonPlaybackViewImp@@MAEXXZ @ 72 NONAME ; void CMPXCommonPlaybackViewImp::UpdateTitlePaneL(void)
-	?HandlePointerEventL@CMPXCommonPlaybackViewContainer@@MAEXABUTPointerEvent@@@Z @ 73 NONAME ; void CMPXCommonPlaybackViewContainer::HandlePointerEventL(struct TPointerEvent const &)
-	?DoActivateL@CMPXCommonPlaybackViewImp@@MAEXABVTVwsViewId@@VTUid@@ABVTDesC8@@@Z @ 74 NONAME ; void CMPXCommonPlaybackViewImp::DoActivateL(class TVwsViewId const &, class TUid, class TDesC8 const &)
-	?SelectNewPlayerL@CMPXCommonPlaybackViewImp@@MAEXH@Z @ 75 NONAME ; void CMPXCommonPlaybackViewImp::SelectNewPlayerL(int)
-	?DoHandlePlaybackMessageL@CMPXCommonPlaybackViewImp@@MAEXABVCMPXMedia@@@Z @ 76 NONAME ; void CMPXCommonPlaybackViewImp::DoHandlePlaybackMessageL(class CMPXMedia const &)
-	?UpdateButtons@CMPXCommonPlaybackViewContainer@@UAEXW4TMPXPlaybackState@@@Z @ 77 NONAME ; void CMPXCommonPlaybackViewContainer::UpdateButtons(enum TMPXPlaybackState)
-	?ButtonLayout@CMPXCommonPlaybackViewLayout@@UAE?AVTRect@@ABV2@H@Z @ 78 NONAME ; class TRect CMPXCommonPlaybackViewLayout::ButtonLayout(class TRect const &, int)
-	?UpdateProgressBarGraphics@CMPXCommonPlaybackViewContainer@@MAEXXZ @ 79 NONAME ; void CMPXCommonPlaybackViewContainer::UpdateProgressBarGraphics(void)
-	?UpdateFMTransmitterInfoL@CMPXCommonPlaybackViewImp@@MAEXH@Z @ 80 NONAME ; void CMPXCommonPlaybackViewImp::UpdateFMTransmitterInfoL(int)
-	?HandleMediaL@CMPXCommonPlaybackViewImp@@MAEXABVCMPXMedia@@H@Z @ 81 NONAME ; void CMPXCommonPlaybackViewImp::HandleMediaL(class CMPXMedia const &, int)
-	?UpdateAlbumArtL@CMPXCommonPlaybackViewImp@@MAEXPBVCMPXMedia@@@Z @ 82 NONAME ; void CMPXCommonPlaybackViewImp::UpdateAlbumArtL(class CMPXMedia const *)
-	?HandlePSEvent@CMPXCommonPlaybackViewImp@@MAEXVTUid@@H@Z @ 83 NONAME ; void CMPXCommonPlaybackViewImp::HandlePSEvent(class TUid, int)
-	?HandleViewUpdate@CMPXCommonPlaybackViewImp@@MAEXVTUid@@W4TViewUpdateEvent@MMPXViewActivationObserver@@HH@Z @ 84 NONAME ; void CMPXCommonPlaybackViewImp::HandleViewUpdate(class TUid, enum MMPXViewActivationObserver::TViewUpdateEvent, int, int)
-	?RedrawRect@CMPXCommonPlaybackViewContainer@@MBEXABVTRect@@@Z @ 85 NONAME ; void CMPXCommonPlaybackViewContainer::RedrawRect(class TRect const &) const
-	?HandleCommandL@CMPXCommonPlaybackViewImp@@MAEXH@Z @ 86 NONAME ; void CMPXCommonPlaybackViewImp::HandleCommandL(int)
-	??1CMPXCommonPlaybackViewImp@@UAE@XZ @ 87 NONAME ; CMPXCommonPlaybackViewImp::~CMPXCommonPlaybackViewImp(void)
-	?HandleForegroundEventL@CMPXCommonPlaybackViewContainer@@UAEXH@Z @ 88 NONAME ; void CMPXCommonPlaybackViewContainer::HandleForegroundEventL(int)
-	?UpdateLabelColorsL@CMPXCommonPlaybackViewContainer@@MAEXXZ @ 89 NONAME ; void CMPXCommonPlaybackViewContainer::UpdateLabelColorsL(void)
-	?IsEmbedded@CMPXCommonPlaybackViewImp@@MBEHXZ @ 90 NONAME ; int CMPXCommonPlaybackViewImp::IsEmbedded(void) const
-	?SimpleEmbeddedMode@CMPXCommonPlaybackViewImp@@MBEHXZ @ 91 NONAME ; int CMPXCommonPlaybackViewImp::SimpleEmbeddedMode(void) const
-	?UpdateToolbar@CMPXCommonPlaybackViewImp@@IAEXXZ @ 92 NONAME ; void CMPXCommonPlaybackViewImp::UpdateToolbar(void)
-	?UpdateLayout@CMPXCommonPlaybackViewContainer@@UAEXXZ @ 93 NONAME ; void CMPXCommonPlaybackViewContainer::UpdateLayout(void)
-	?ButtonLayout@CMPXCommonPlaybackViewLayout@@UAE?AVTRect@@ABV2@@Z @ 94 NONAME ; class TRect CMPXCommonPlaybackViewLayout::ButtonLayout(class TRect const &)
-	?UpdatePlaybackState@CMPXCommonPlaybackViewImp@@MAEXW4TMPXPlaybackState@@@Z @ 95 NONAME ; void CMPXCommonPlaybackViewImp::UpdatePlaybackState(enum TMPXPlaybackState)
-	?HandleResourceChange@CMPXCommonPlaybackViewContainer@@UAEXH@Z @ 96 NONAME ; void CMPXCommonPlaybackViewContainer::HandleResourceChange(int)
-	?AddPlayerNameToMenuL@CMPXCommonPlaybackViewImp@@MAEXAAVCEikMenuPane@@HAAVMMPXPlayerManager@@AAW4TMPXPlaybackPlayerType@@ABVTDesC16@@@Z @ 97 NONAME ; void CMPXCommonPlaybackViewImp::AddPlayerNameToMenuL(class CEikMenuPane &, int, class MMPXPlayerManager &, enum TMPXPlaybackPlayerType &, class TDesC16 const &)
-	?Draw@CMPXCommonPlaybackViewContainer@@MBEXABVTRect@@@Z @ 98 NONAME ; void CMPXCommonPlaybackViewContainer::Draw(class TRect const &) const
-	?ConstructL@CMPXCommonPlaybackViewImp@@MAEXXZ @ 99 NONAME ; void CMPXCommonPlaybackViewImp::ConstructL(void)
-	?DoLayoutLabelL@CMPXCommonPlaybackViewLayout@@IAEXPAVCEikLabel@@ABVTRect@@HHH@Z @ 100 NONAME ; void CMPXCommonPlaybackViewLayout::DoLayoutLabelL(class CEikLabel *, class TRect const &, int, int, int)
-	?HandleViewActivation@CMPXCommonPlaybackViewImp@@MAEXABVTVwsViewId@@0@Z @ 101 NONAME ; void CMPXCommonPlaybackViewImp::HandleViewActivation(class TVwsViewId const &, class TVwsViewId const &)
-	?AddToSavedPlaylistL@CMPXCommonPlaybackViewImp@@MAEXXZ @ 102 NONAME ; void CMPXCommonPlaybackViewImp::AddToSavedPlaylistL(void)
-	?CreateLabelsL@CMPXCommonPlaybackViewContainer@@MAEXXZ @ 103 NONAME ; void CMPXCommonPlaybackViewContainer::CreateLabelsL(void)
-	?CreateIconsL@CMPXCommonPlaybackViewContainer@@MAEXXZ @ 104 NONAME ; void CMPXCommonPlaybackViewContainer::CreateIconsL(void)
-	?UpdateSoftkeyColors@CMPXCommonPlaybackViewContainer@@UAEXXZ @ 105 NONAME ; void CMPXCommonPlaybackViewContainer::UpdateSoftkeyColors(void)
-	?StartMarquee@CMPXCommonPlaybackViewContainer@@UAEXW4TMPXPbvTextIndicator@@@Z @ 106 NONAME ; void CMPXCommonPlaybackViewContainer::StartMarquee(enum TMPXPbvTextIndicator)
-	?GetIndicatorVariant@CMPXCommonPlaybackViewLayout@@IAE?AW4TMPXPbvLayoutVariants@@W4TMPXPbvIndicator@@@Z @ 107 NONAME ; enum TMPXPbvLayoutVariants CMPXCommonPlaybackViewLayout::GetIndicatorVariant(enum TMPXPbvIndicator)
-	?HandleCollectionMediaL@CMPXCommonPlaybackViewImp@@MAEXABVCMPXMedia@@H@Z @ 108 NONAME ; void CMPXCommonPlaybackViewImp::HandleCollectionMediaL(class CMPXMedia const &, int)
-	?GetHelpContext@CMPXCommonPlaybackViewContainer@@UBEXAAVTCoeHelpContext@@@Z @ 109 NONAME ; void CMPXCommonPlaybackViewContainer::GetHelpContext(class TCoeHelpContext &) const
-	?LightStatusChanged@CMPXCommonPlaybackViewContainer@@UAEXHW4TLightStatus@CHWRMLight@@@Z @ 110 NONAME ; void CMPXCommonPlaybackViewContainer::LightStatusChanged(int, enum CHWRMLight::TLightStatus)
-	?LaunchFileDetailsDialogL@CMPXCommonPlaybackViewImp@@MAEXXZ @ 111 NONAME ; void CMPXCommonPlaybackViewImp::LaunchFileDetailsDialogL(void)
+	?UpdateToolbarL@CMPXCommonPlaybackViewImp@@IAEXXZ @ 7 NONAME ; void CMPXCommonPlaybackViewImp::UpdateToolbarL(void)
+	?UpdateTimeIndicatorsL@CMPXCommonPlaybackViewContainer@@UAEXHH@Z @ 8 NONAME ; void CMPXCommonPlaybackViewContainer::UpdateTimeIndicatorsL(int, int)
+	?DisplayConfirmionNoteL@CMPXCommonPlaybackViewImp@@MAEXH@Z @ 9 NONAME ; void CMPXCommonPlaybackViewImp::DisplayConfirmionNoteL(int)
+	?LightStatusChanged@CMPXCommonPlaybackViewContainer@@UAEXHW4TLightStatus@CHWRMLight@@@Z @ 10 NONAME ; void CMPXCommonPlaybackViewContainer::LightStatusChanged(int, enum CHWRMLight::TLightStatus)
+	?HandlePlaybackMessage@CMPXCommonPlaybackViewImp@@MAEXPAVCMPXMedia@@H@Z @ 11 NONAME ; void CMPXCommonPlaybackViewImp::HandlePlaybackMessage(class CMPXMedia *, int)
+	?HandleSettingChange@CMPXCommonPlaybackViewImp@@MAEXABVTUid@@K@Z @ 12 NONAME ; void CMPXCommonPlaybackViewImp::HandleSettingChange(class TUid const &, unsigned long)
+	?HandleForegroundEventL@CMPXCommonPlaybackViewImp@@MAEXH@Z @ 13 NONAME ; void CMPXCommonPlaybackViewImp::HandleForegroundEventL(int)
+	?HandleErrorL@CMPXCommonPlaybackViewImp@@MAEXH@Z @ 14 NONAME ; void CMPXCommonPlaybackViewImp::HandleErrorL(int)
+	?GetCurrentPlayerDetails@CMPXCommonPlaybackViewImp@@MAEXXZ @ 15 NONAME ; void CMPXCommonPlaybackViewImp::GetCurrentPlayerDetails(void)
+	?UpdateDurationLabelL@CMPXCommonPlaybackViewContainer@@UAEXH@Z @ 16 NONAME ; void CMPXCommonPlaybackViewContainer::UpdateDurationLabelL(int)
+	?DoHandleStateChangedL@CMPXCommonPlaybackViewImp@@MAEXW4TMPXPlaybackState@@H@Z @ 17 NONAME ; void CMPXCommonPlaybackViewImp::DoHandleStateChangedL(enum TMPXPlaybackState, int)
+	?DisplayInfoNoteL@CMPXCommonPlaybackViewImp@@MAEXH@Z @ 18 NONAME ; void CMPXCommonPlaybackViewImp::DisplayInfoNoteL(int)
+	?RequestMediaL@CMPXCommonPlaybackViewImp@@MAEXH@Z @ 19 NONAME ; void CMPXCommonPlaybackViewImp::RequestMediaL(int)
+	?LaunchFileDetailsDialogL@CMPXCommonPlaybackViewImp@@MAEXXZ @ 20 NONAME ; void CMPXCommonPlaybackViewImp::LaunchFileDetailsDialogL(void)
+	?HandleStatusPaneSizeChange@CMPXCommonPlaybackViewImp@@MAEXXZ @ 21 NONAME ; void CMPXCommonPlaybackViewImp::HandleStatusPaneSizeChange(void)
+	?UpdateTrackInfoL@CMPXCommonPlaybackViewImp@@MAEXPBVCMPXMedia@@@Z @ 22 NONAME ; void CMPXCommonPlaybackViewImp::UpdateTrackInfoL(class CMPXMedia const *)
+	?PrepareMediaForPlaylistLC@CMPXCommonPlaybackViewImp@@MAEPAVCMPXMedia@@ABV2@@Z @ 23 NONAME ; class CMPXMedia * CMPXCommonPlaybackViewImp::PrepareMediaForPlaylistLC(class CMPXMedia const &)
+	?ExtractAlbumArtCompleted@CMPXCommonPlaybackViewContainer@@UAEXPAVCFbsBitmap@@H@Z @ 24 NONAME ; void CMPXCommonPlaybackViewContainer::ExtractAlbumArtCompleted(class CFbsBitmap *, int)
+	?HandleViewActivation@CMPXCommonPlaybackViewImp@@MAEXABVTUid@@0@Z @ 25 NONAME ; void CMPXCommonPlaybackViewImp::HandleViewActivation(class TUid const &, class TUid const &)
+	?IsCommandSupportedL@CMPXCommonPlaybackViewImp@@MAEHXZ @ 26 NONAME ; int CMPXCommonPlaybackViewImp::IsCommandSupportedL(void)
+	?GetIndicatorIconMaskL@CMPXCommonPlaybackViewLayout@@UAEPAVCGulIcon@@W4TMPXPbvIndicator@@@Z @ 27 NONAME ; class CGulIcon * CMPXCommonPlaybackViewLayout::GetIndicatorIconMaskL(enum TMPXPbvIndicator)
+	?GetButtonBitmapsL@CMPXCommonPlaybackViewLayout@@UAEXW4TMPXPbvButton@@HAAPAVCFbsBitmap@@1@Z @ 28 NONAME ; void CMPXCommonPlaybackViewLayout::GetButtonBitmapsL(enum TMPXPbvButton, int, class CFbsBitmap * &, class CFbsBitmap * &)
+	?UpdateBackgroundSkinControlContext@CMPXCommonPlaybackViewContainer@@MAEXABVTRect@@@Z @ 29 NONAME ; void CMPXCommonPlaybackViewContainer::UpdateBackgroundSkinControlContext(class TRect const &)
+	?HandleOpenL@CMPXCommonPlaybackViewImp@@MAEXABVCMPXCollectionPlaylist@@H@Z @ 30 NONAME ; void CMPXCommonPlaybackViewImp::HandleOpenL(class CMPXCollectionPlaylist const &, int)
+	??1CMPXCommonPlaybackViewContainer@@UAE@XZ @ 31 NONAME ; CMPXCommonPlaybackViewContainer::~CMPXCommonPlaybackViewContainer(void)
+	?SetRealAudioMode@CMPXCommonPlaybackViewContainer@@UAEXH@Z @ 32 NONAME ; void CMPXCommonPlaybackViewContainer::SetRealAudioMode(int)
+	?DetermineLayoutVariant@CMPXCommonPlaybackViewLayout@@IAE?AW4TMPXPbvLayoutVariants@@XZ @ 33 NONAME ; enum TMPXPbvLayoutVariants CMPXCommonPlaybackViewLayout::DetermineLayoutVariant(void)
+	?SetMode@CMPXCommonPlaybackViewContainer@@UAEXW4TMPXPbvPlaybackMode@@@Z @ 34 NONAME ; void CMPXCommonPlaybackViewContainer::SetMode(enum TMPXPbvPlaybackMode)
+	?AddPlayersNamesToMenuL@CMPXCommonPlaybackViewImp@@MAEXAAVCEikMenuPane@@@Z @ 35 NONAME ; void CMPXCommonPlaybackViewImp::AddPlayersNamesToMenuL(class CEikMenuPane &)
+	?DynInitMenuPaneL@CMPXCommonPlaybackViewImp@@MAEXHPAVCEikMenuPane@@@Z @ 36 NONAME ; void CMPXCommonPlaybackViewImp::DynInitMenuPaneL(int, class CEikMenuPane *)
+	?HandlePropertyL@CMPXCommonPlaybackViewImp@@MAEXW4TMPXPlaybackProperty@@HH@Z @ 37 NONAME ; void CMPXCommonPlaybackViewImp::HandlePropertyL(enum TMPXPlaybackProperty, int, int)
+	?SkipOnErrorL@CMPXCommonPlaybackViewImp@@MAEXHH@Z @ 38 NONAME ; void CMPXCommonPlaybackViewImp::SkipOnErrorL(int, int)
+	?HandleOpenL@CMPXCommonPlaybackViewImp@@MAEXABVCMPXMedia@@HHH@Z @ 39 NONAME ; void CMPXCommonPlaybackViewImp::HandleOpenL(class CMPXMedia const &, int, int, int)
+	?LayoutLabel@CMPXCommonPlaybackViewLayout@@UAEXPAVCEikLabel@@ABVTRect@@W4TMPXPbvTextIndicator@@HH@Z @ 40 NONAME ; void CMPXCommonPlaybackViewLayout::LayoutLabel(class CEikLabel *, class TRect const &, enum TMPXPbvTextIndicator, int, int)
+	?RefreshProgressBar@CMPXCommonPlaybackViewContainer@@MAEXXZ @ 41 NONAME ; void CMPXCommonPlaybackViewContainer::RefreshProgressBar(void)
+	?HandleLayoutChange@CMPXCommonPlaybackViewImp@@MAEXXZ @ 42 NONAME ; void CMPXCommonPlaybackViewImp::HandleLayoutChange(void)
+	?CountComponentControls@CMPXCommonPlaybackViewContainer@@MBEHXZ @ 43 NONAME ; int CMPXCommonPlaybackViewContainer::CountComponentControls(void) const
+	?DoHandlePropertyL@CMPXCommonPlaybackViewImp@@MAEXW4TMPXPlaybackProperty@@HH@Z @ 44 NONAME ; void CMPXCommonPlaybackViewImp::DoHandlePropertyL(enum TMPXPlaybackProperty, int, int)
+	?ExtractAlbumArtStarted@CMPXCommonPlaybackViewContainer@@UAEXXZ @ 45 NONAME ; void CMPXCommonPlaybackViewContainer::ExtractAlbumArtStarted(void)
+	?UpdateDownloadStateLabelL@CMPXCommonPlaybackViewImp@@MAEXXZ @ 46 NONAME ; void CMPXCommonPlaybackViewImp::UpdateDownloadStateLabelL(void)
+	?SetFMTXMode@CMPXCommonPlaybackViewContainer@@MAEXH@Z @ 47 NONAME ; void CMPXCommonPlaybackViewContainer::SetFMTXMode(int)
+	?ProcessCommandL@CMPXCommonPlaybackViewImp@@MAEXH@Z @ 48 NONAME ; void CMPXCommonPlaybackViewImp::ProcessCommandL(int)
+	?LaunchMusicSettingsL@CMPXCommonPlaybackViewImp@@MAEXXZ @ 49 NONAME ; void CMPXCommonPlaybackViewImp::LaunchMusicSettingsL(void)
+	?GetNewSongPosition@CMPXCommonPlaybackViewContainer@@UAEHXZ @ 50 NONAME ; int CMPXCommonPlaybackViewContainer::GetNewSongPosition(void)
+	?UpdateMiddleSoftKeyDisplayL@CMPXCommonPlaybackViewImp@@IAEXXZ @ 51 NONAME ; void CMPXCommonPlaybackViewImp::UpdateMiddleSoftKeyDisplayL(void)
+	?SizeChanged@CMPXCommonPlaybackViewContainer@@MAEXXZ @ 52 NONAME ; void CMPXCommonPlaybackViewContainer::SizeChanged(void)
+	?HandleOperationCompleteL@CMPXCommonPlaybackViewImp@@MAEXW4TCHelperOperation@@HPAX@Z @ 53 NONAME ; void CMPXCommonPlaybackViewImp::HandleOperationCompleteL(enum TCHelperOperation, int, void *)
+	?LaunchFMTransmitterL@CMPXCommonPlaybackViewImp@@MAEXXZ @ 54 NONAME ; void CMPXCommonPlaybackViewImp::LaunchFMTransmitterL(void)
+	?UpdateViewL@CMPXCommonPlaybackViewImp@@MAEXXZ @ 55 NONAME ; void CMPXCommonPlaybackViewImp::UpdateViewL(void)
+	?DrawIndicator@CMPXCommonPlaybackViewContainer@@MBEXAAVCWindowGc@@ABVTRect@@1PBVCGulIcon@@H@Z @ 56 NONAME ; void CMPXCommonPlaybackViewContainer::DrawIndicator(class CWindowGc &, class TRect const &, class TRect const &, class CGulIcon const *, int) const
+	?FreeIcons@CMPXCommonPlaybackViewContainer@@IAEXXZ @ 57 NONAME ; void CMPXCommonPlaybackViewContainer::FreeIcons(void)
+	?GetIndicatorVariantL@CMPXCommonPlaybackViewLayout@@IAE?AW4TMPXPbvLayoutVariants@@W4TMPXPbvIndicator@@@Z @ 58 NONAME ; enum TMPXPbvLayoutVariants CMPXCommonPlaybackViewLayout::GetIndicatorVariantL(enum TMPXPbvIndicator)
+	?HandleSubPlayerNamesL@CMPXCommonPlaybackViewImp@@MAEXVTUid@@PBVMDesC16Array@@HH@Z @ 59 NONAME ; void CMPXCommonPlaybackViewImp::HandleSubPlayerNamesL(class TUid, class MDesC16Array const *, int, int)
+	?UpdateLabelL@CMPXCommonPlaybackViewContainer@@UAEXW4TMPXPbvTextIndicator@@ABVTDesC16@@@Z @ 60 NONAME ; void CMPXCommonPlaybackViewContainer::UpdateLabelL(enum TMPXPbvTextIndicator, class TDesC16 const &)
+	?DoDeactivate@CMPXCommonPlaybackViewImp@@MAEXXZ @ 61 NONAME ; void CMPXCommonPlaybackViewImp::DoDeactivate(void)
+	?HandleCommandComplete@CMPXCommonPlaybackViewImp@@MAEXPAVCMPXMedia@@H@Z @ 62 NONAME ; void CMPXCommonPlaybackViewImp::HandleCommandComplete(class CMPXMedia *, int)
+	?HandleButtonCommandL@CMPXCommonPlaybackViewContainer@@MAEXH@Z @ 63 NONAME ; void CMPXCommonPlaybackViewContainer::HandleButtonCommandL(int)
+	?IsUpnpVisibleL@CMPXCommonPlaybackViewImp@@MAEHXZ @ 64 NONAME ; int CMPXCommonPlaybackViewImp::IsUpnpVisibleL(void)
+	?OfferKeyEventL@CMPXCommonPlaybackViewContainer@@UAE?AW4TKeyResponse@@ABUTKeyEvent@@W4TEventCode@@@Z @ 65 NONAME ; enum TKeyResponse CMPXCommonPlaybackViewContainer::OfferKeyEventL(struct TKeyEvent const &, enum TEventCode)
+	?SetRandomMode@CMPXCommonPlaybackViewContainer@@UAEXH@Z @ 66 NONAME ; void CMPXCommonPlaybackViewContainer::SetRandomMode(int)
+	?HandleCollectionMessage@CMPXCommonPlaybackViewImp@@MAEXPAVCMPXMedia@@H@Z @ 67 NONAME ; void CMPXCommonPlaybackViewImp::HandleCollectionMessage(class CMPXMedia *, int)
+	?ComponentControl@CMPXCommonPlaybackViewContainer@@MBEPAVCCoeControl@@H@Z @ 68 NONAME ; class CCoeControl * CMPXCommonPlaybackViewContainer::ComponentControl(int) const
+	?UpdateTrackPosInPlaylistL@CMPXCommonPlaybackViewImp@@MAEXXZ @ 69 NONAME ; void CMPXCommonPlaybackViewImp::UpdateTrackPosInPlaylistL(void)
+	?LaunchEqualizerL@CMPXCommonPlaybackViewImp@@MAEXXZ @ 70 NONAME ; void CMPXCommonPlaybackViewImp::LaunchEqualizerL(void)
+	?HandleAllTracksInvalidL@CMPXCommonPlaybackViewImp@@MAEXXZ @ 71 NONAME ; void CMPXCommonPlaybackViewImp::HandleAllTracksInvalidL(void)
+	?AddToNewPlaylistL@CMPXCommonPlaybackViewImp@@MAEXXZ @ 72 NONAME ; void CMPXCommonPlaybackViewImp::AddToNewPlaylistL(void)
+	?IndicatorLayout@CMPXCommonPlaybackViewLayout@@UAE?AVTRect@@ABV2@W4TMPXPbvIndicator@@@Z @ 73 NONAME ; class TRect CMPXCommonPlaybackViewLayout::IndicatorLayout(class TRect const &, enum TMPXPbvIndicator)
+	?UpdateTrackPlaybackPositionL@CMPXCommonPlaybackViewImp@@MAEXHH@Z @ 74 NONAME ; void CMPXCommonPlaybackViewImp::UpdateTrackPlaybackPositionL(int, int)
+	?UpdateTitlePaneL@CMPXCommonPlaybackViewImp@@MAEXXZ @ 75 NONAME ; void CMPXCommonPlaybackViewImp::UpdateTitlePaneL(void)
+	?HandlePointerEventL@CMPXCommonPlaybackViewContainer@@MAEXABUTPointerEvent@@@Z @ 76 NONAME ; void CMPXCommonPlaybackViewContainer::HandlePointerEventL(struct TPointerEvent const &)
+	?DoActivateL@CMPXCommonPlaybackViewImp@@MAEXABVTVwsViewId@@VTUid@@ABVTDesC8@@@Z @ 77 NONAME ; void CMPXCommonPlaybackViewImp::DoActivateL(class TVwsViewId const &, class TUid, class TDesC8 const &)
+	?SelectNewPlayerL@CMPXCommonPlaybackViewImp@@MAEXH@Z @ 78 NONAME ; void CMPXCommonPlaybackViewImp::SelectNewPlayerL(int)
+	?DoHandlePlaybackMessageL@CMPXCommonPlaybackViewImp@@MAEXABVCMPXMedia@@@Z @ 79 NONAME ; void CMPXCommonPlaybackViewImp::DoHandlePlaybackMessageL(class CMPXMedia const &)
+	?UpdatePlaybackStateL@CMPXCommonPlaybackViewImp@@MAEXW4TMPXPlaybackState@@@Z @ 80 NONAME ; void CMPXCommonPlaybackViewImp::UpdatePlaybackStateL(enum TMPXPlaybackState)
+	?UpdateButtons@CMPXCommonPlaybackViewContainer@@UAEXW4TMPXPlaybackState@@@Z @ 81 NONAME ; void CMPXCommonPlaybackViewContainer::UpdateButtons(enum TMPXPlaybackState)
+	?ButtonLayout@CMPXCommonPlaybackViewLayout@@UAE?AVTRect@@ABV2@H@Z @ 82 NONAME ; class TRect CMPXCommonPlaybackViewLayout::ButtonLayout(class TRect const &, int)
+	?GetTextVariantL@CMPXCommonPlaybackViewLayout@@IAE?AW4TMPXPbvLayoutVariants@@W4TMPXPbvTextIndicator@@@Z @ 83 NONAME ; enum TMPXPbvLayoutVariants CMPXCommonPlaybackViewLayout::GetTextVariantL(enum TMPXPbvTextIndicator)
+	?UpdateProgressBarGraphics@CMPXCommonPlaybackViewContainer@@MAEXXZ @ 84 NONAME ; void CMPXCommonPlaybackViewContainer::UpdateProgressBarGraphics(void)
+	?UpdateFMTransmitterInfoL@CMPXCommonPlaybackViewImp@@MAEXH@Z @ 85 NONAME ; void CMPXCommonPlaybackViewImp::UpdateFMTransmitterInfoL(int)
+	?HandleMediaL@CMPXCommonPlaybackViewImp@@MAEXABVCMPXMedia@@H@Z @ 86 NONAME ; void CMPXCommonPlaybackViewImp::HandleMediaL(class CMPXMedia const &, int)
+	?UpdateAlbumArtL@CMPXCommonPlaybackViewImp@@MAEXPBVCMPXMedia@@@Z @ 87 NONAME ; void CMPXCommonPlaybackViewImp::UpdateAlbumArtL(class CMPXMedia const *)
+	?HandlePSEvent@CMPXCommonPlaybackViewImp@@MAEXVTUid@@H@Z @ 88 NONAME ; void CMPXCommonPlaybackViewImp::HandlePSEvent(class TUid, int)
+	?HandleViewUpdate@CMPXCommonPlaybackViewImp@@MAEXVTUid@@W4TViewUpdateEvent@MMPXViewActivationObserver@@HH@Z @ 89 NONAME ; void CMPXCommonPlaybackViewImp::HandleViewUpdate(class TUid, enum MMPXViewActivationObserver::TViewUpdateEvent, int, int)
+	?RedrawRect@CMPXCommonPlaybackViewContainer@@MBEXABVTRect@@@Z @ 90 NONAME ; void CMPXCommonPlaybackViewContainer::RedrawRect(class TRect const &) const
+	?HandleCommandL@CMPXCommonPlaybackViewImp@@MAEXH@Z @ 91 NONAME ; void CMPXCommonPlaybackViewImp::HandleCommandL(int)
+	??1CMPXCommonPlaybackViewImp@@UAE@XZ @ 92 NONAME ; CMPXCommonPlaybackViewImp::~CMPXCommonPlaybackViewImp(void)
+	?HandleForegroundEventL@CMPXCommonPlaybackViewContainer@@UAEXH@Z @ 93 NONAME ; void CMPXCommonPlaybackViewContainer::HandleForegroundEventL(int)
+	?UpdateLabelColorsL@CMPXCommonPlaybackViewContainer@@MAEXXZ @ 94 NONAME ; void CMPXCommonPlaybackViewContainer::UpdateLabelColorsL(void)
+	?IsEmbedded@CMPXCommonPlaybackViewImp@@MBEHXZ @ 95 NONAME ; int CMPXCommonPlaybackViewImp::IsEmbedded(void) const
+	?SimpleEmbeddedMode@CMPXCommonPlaybackViewImp@@MBEHXZ @ 96 NONAME ; int CMPXCommonPlaybackViewImp::SimpleEmbeddedMode(void) const
+	?UpdateLayout@CMPXCommonPlaybackViewContainer@@UAEXXZ @ 97 NONAME ; void CMPXCommonPlaybackViewContainer::UpdateLayout(void)
+	?ButtonLayout@CMPXCommonPlaybackViewLayout@@UAE?AVTRect@@ABV2@@Z @ 98 NONAME ; class TRect CMPXCommonPlaybackViewLayout::ButtonLayout(class TRect const &)
+	?HandleResourceChange@CMPXCommonPlaybackViewContainer@@UAEXH@Z @ 99 NONAME ; void CMPXCommonPlaybackViewContainer::HandleResourceChange(int)
+	?AddPlayerNameToMenuL@CMPXCommonPlaybackViewImp@@MAEXAAVCEikMenuPane@@HAAVMMPXPlayerManager@@AAW4TMPXPlaybackPlayerType@@ABVTDesC16@@@Z @ 100 NONAME ; void CMPXCommonPlaybackViewImp::AddPlayerNameToMenuL(class CEikMenuPane &, int, class MMPXPlayerManager &, enum TMPXPlaybackPlayerType &, class TDesC16 const &)
+	?Draw@CMPXCommonPlaybackViewContainer@@MBEXABVTRect@@@Z @ 101 NONAME ; void CMPXCommonPlaybackViewContainer::Draw(class TRect const &) const
+	?ConstructL@CMPXCommonPlaybackViewImp@@MAEXXZ @ 102 NONAME ; void CMPXCommonPlaybackViewImp::ConstructL(void)
+	?DoLayoutLabelL@CMPXCommonPlaybackViewLayout@@IAEXPAVCEikLabel@@ABVTRect@@HHH@Z @ 103 NONAME ; void CMPXCommonPlaybackViewLayout::DoLayoutLabelL(class CEikLabel *, class TRect const &, int, int, int)
+	?HandleViewActivation@CMPXCommonPlaybackViewImp@@MAEXABVTVwsViewId@@0@Z @ 104 NONAME ; void CMPXCommonPlaybackViewImp::HandleViewActivation(class TVwsViewId const &, class TVwsViewId const &)
+	?InitCommonLayoutL@CMPXCommonPlaybackViewLayout@@IAEXXZ @ 105 NONAME ; void CMPXCommonPlaybackViewLayout::InitCommonLayoutL(void)
+	?AddToSavedPlaylistL@CMPXCommonPlaybackViewImp@@MAEXXZ @ 106 NONAME ; void CMPXCommonPlaybackViewImp::AddToSavedPlaylistL(void)
+	?CreateLabelsL@CMPXCommonPlaybackViewContainer@@MAEXXZ @ 107 NONAME ; void CMPXCommonPlaybackViewContainer::CreateLabelsL(void)
+	?CreateIconsL@CMPXCommonPlaybackViewContainer@@MAEXXZ @ 108 NONAME ; void CMPXCommonPlaybackViewContainer::CreateIconsL(void)
+	?UpdateSoftkeyColors@CMPXCommonPlaybackViewContainer@@UAEXXZ @ 109 NONAME ; void CMPXCommonPlaybackViewContainer::UpdateSoftkeyColors(void)
+	?StartMarquee@CMPXCommonPlaybackViewContainer@@UAEXW4TMPXPbvTextIndicator@@@Z @ 110 NONAME ; void CMPXCommonPlaybackViewContainer::StartMarquee(enum TMPXPbvTextIndicator)
+	?HandleCollectionMediaL@CMPXCommonPlaybackViewImp@@MAEXABVCMPXMedia@@H@Z @ 111 NONAME ; void CMPXCommonPlaybackViewImp::HandleCollectionMediaL(class CMPXMedia const &, int)
+	?GetHelpContext@CMPXCommonPlaybackViewContainer@@UBEXAAVTCoeHelpContext@@@Z @ 112 NONAME ; void CMPXCommonPlaybackViewContainer::GetHelpContext(class TCoeHelpContext &) const
 
--- a/mpxplugins/viewplugins/views/commonplaybackview/data/mpxcommonplaybackview.rss	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/commonplaybackview/data/mpxcommonplaybackview.rss	Tue Apr 27 16:34:37 2010 +0300
@@ -2255,7 +2255,7 @@
 //
 RESOURCE AVKON_TOOLBAR r_mpx_pbv_touch_toolbar
     {
-    flags = KAknToolbarFixed|KAknToolbarTransparent|KAknToolbarWithoutCba;
+    flags = KAknToolbarFixed|KAknToolbarWithoutCba;
     items =
         {
         TBAR_CTRL
--- a/mpxplugins/viewplugins/views/commonplaybackview/eabi/mpxcommonplaybackviewU.DEF	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/commonplaybackview/eabi/mpxcommonplaybackviewU.DEF	Tue Apr 27 16:34:37 2010 +0300
@@ -9,11 +9,11 @@
 	_ZN25CMPXCommonPlaybackViewImp12HandleMediaLERK9CMPXMediai @ 8 NONAME
 	_ZN25CMPXCommonPlaybackViewImp12SkipOnErrorLEii @ 9 NONAME
 	_ZN25CMPXCommonPlaybackViewImp13HandlePSEventE4TUidi @ 10 NONAME
-	_ZN25CMPXCommonPlaybackViewImp13IsUpnpVisibleEv @ 11 NONAME
-	_ZN25CMPXCommonPlaybackViewImp13RequestMediaLEi @ 12 NONAME
-	_ZN25CMPXCommonPlaybackViewImp13UpdateToolbarEv @ 13 NONAME
-	_ZN25CMPXCommonPlaybackViewImp14DoHandleMediaLERK9CMPXMediai @ 14 NONAME
-	_ZN25CMPXCommonPlaybackViewImp14HandleCommandLEi @ 15 NONAME
+	_ZN25CMPXCommonPlaybackViewImp13RequestMediaLEi @ 11 NONAME
+	_ZN25CMPXCommonPlaybackViewImp14DoHandleMediaLERK9CMPXMediai @ 12 NONAME
+	_ZN25CMPXCommonPlaybackViewImp14HandleCommandLEi @ 13 NONAME
+	_ZN25CMPXCommonPlaybackViewImp14IsUpnpVisibleLEv @ 14 NONAME
+	_ZN25CMPXCommonPlaybackViewImp14UpdateToolbarLEv @ 15 NONAME
 	_ZN25CMPXCommonPlaybackViewImp15HandlePropertyLE20TMPXPlaybackPropertyii @ 16 NONAME
 	_ZN25CMPXCommonPlaybackViewImp15ProcessCommandLEi @ 17 NONAME
 	_ZN25CMPXCommonPlaybackViewImp15UpdateAlbumArtLEPK9CMPXMedia @ 18 NONAME
@@ -32,12 +32,12 @@
 	_ZN25CMPXCommonPlaybackViewImp19AddToSavedPlaylistLEv @ 31 NONAME
 	_ZN25CMPXCommonPlaybackViewImp19HandleSettingChangeERK4TUidm @ 32 NONAME
 	_ZN25CMPXCommonPlaybackViewImp19IsCommandSupportedLEv @ 33 NONAME
-	_ZN25CMPXCommonPlaybackViewImp19UpdatePlaybackStateE17TMPXPlaybackState @ 34 NONAME
-	_ZN25CMPXCommonPlaybackViewImp20AddPlayerNameToMenuLER12CEikMenuPaneiR17MMPXPlayerManagerR22TMPXPlaybackPlayerTypeRK7TDesC16 @ 35 NONAME
-	_ZN25CMPXCommonPlaybackViewImp20HandleViewActivationERK10TVwsViewIdS2_ @ 36 NONAME
-	_ZN25CMPXCommonPlaybackViewImp20HandleViewActivationERK4TUidS2_ @ 37 NONAME
-	_ZN25CMPXCommonPlaybackViewImp20LaunchFMTransmitterLEv @ 38 NONAME
-	_ZN25CMPXCommonPlaybackViewImp20LaunchMusicSettingsLEv @ 39 NONAME
+	_ZN25CMPXCommonPlaybackViewImp20AddPlayerNameToMenuLER12CEikMenuPaneiR17MMPXPlayerManagerR22TMPXPlaybackPlayerTypeRK7TDesC16 @ 34 NONAME
+	_ZN25CMPXCommonPlaybackViewImp20HandleViewActivationERK10TVwsViewIdS2_ @ 35 NONAME
+	_ZN25CMPXCommonPlaybackViewImp20HandleViewActivationERK4TUidS2_ @ 36 NONAME
+	_ZN25CMPXCommonPlaybackViewImp20LaunchFMTransmitterLEv @ 37 NONAME
+	_ZN25CMPXCommonPlaybackViewImp20LaunchMusicSettingsLEv @ 38 NONAME
+	_ZN25CMPXCommonPlaybackViewImp20UpdatePlaybackStateLE17TMPXPlaybackState @ 39 NONAME
 	_ZN25CMPXCommonPlaybackViewImp21DoHandleStateChangedLE17TMPXPlaybackStatei @ 40 NONAME
 	_ZN25CMPXCommonPlaybackViewImp21HandleCommandCompleteEP9CMPXMediai @ 41 NONAME
 	_ZN25CMPXCommonPlaybackViewImp21HandlePlaybackMessageEP9CMPXMediai @ 42 NONAME
@@ -51,101 +51,103 @@
 	_ZN25CMPXCommonPlaybackViewImp23HandleCollectionMessageEP9CMPXMediai @ 50 NONAME
 	_ZN25CMPXCommonPlaybackViewImp24DoHandlePlaybackMessageLERK9CMPXMedia @ 51 NONAME
 	_ZN25CMPXCommonPlaybackViewImp24HandleOperationCompleteLE17TCHelperOperationiPv @ 52 NONAME
-	_ZN25CMPXCommonPlaybackViewImp24UpdateFMTransmitterInfoLEi @ 53 NONAME
-	_ZN25CMPXCommonPlaybackViewImp25PrepareMediaForPlaylistLCERK9CMPXMedia @ 54 NONAME
-	_ZN25CMPXCommonPlaybackViewImp25UpdateDownloadStateLabelLEv @ 55 NONAME
-	_ZN25CMPXCommonPlaybackViewImp25UpdateTrackPosInPlaylistLEv @ 56 NONAME
-	_ZN25CMPXCommonPlaybackViewImp26HandleStatusPaneSizeChangeEv @ 57 NONAME
-	_ZN25CMPXCommonPlaybackViewImp27UpdateMiddleSoftKeyDisplayLEv @ 58 NONAME
-	_ZN25CMPXCommonPlaybackViewImp28UpdateTrackPlaybackPositionLEii @ 59 NONAME
-	_ZN25CMPXCommonPlaybackViewImpD0Ev @ 60 NONAME
-	_ZN25CMPXCommonPlaybackViewImpD1Ev @ 61 NONAME
-	_ZN25CMPXCommonPlaybackViewImpD2Ev @ 62 NONAME
-	_ZN28CMPXCommonPlaybackViewLayout11LayoutLabelEP9CEikLabelRK5TRect20TMPXPbvTextIndicatorii @ 63 NONAME
-	_ZN28CMPXCommonPlaybackViewLayout12ButtonLayoutERK5TRect @ 64 NONAME
-	_ZN28CMPXCommonPlaybackViewLayout12ButtonLayoutERK5TRecti @ 65 NONAME
-	_ZN28CMPXCommonPlaybackViewLayout14DoLayoutLabelLEP9CEikLabelRK5TRectiii @ 66 NONAME
-	_ZN28CMPXCommonPlaybackViewLayout14GetTextVariantE20TMPXPbvTextIndicator @ 67 NONAME
-	_ZN28CMPXCommonPlaybackViewLayout15IndicatorLayoutERK5TRect16TMPXPbvIndicator @ 68 NONAME
-	_ZN28CMPXCommonPlaybackViewLayout16CreateColorIconLEP17MAknsSkinInstanceRK11TAknsItemIDS4_iRK7TDesC16ii @ 69 NONAME
-	_ZN28CMPXCommonPlaybackViewLayout17GetButtonBitmapsLE13TMPXPbvButtoniRP10CFbsBitmapS3_ @ 70 NONAME
-	_ZN28CMPXCommonPlaybackViewLayout19GetIndicatorVariantE16TMPXPbvIndicator @ 71 NONAME
-	_ZN28CMPXCommonPlaybackViewLayout21GetIndicatorIconMaskLE16TMPXPbvIndicator @ 72 NONAME
-	_ZN28CMPXCommonPlaybackViewLayout22DetermineLayoutVariantEv @ 73 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer10ConstructLERK5TRect @ 74 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer11SetFMTXModeEi @ 75 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer11SizeChangedEv @ 76 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer12CreateIconsLEv @ 77 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer12StartMarqueeE20TMPXPbvTextIndicator @ 78 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer12UpdateLabelLE20TMPXPbvTextIndicatorRK7TDesC16 @ 79 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer12UpdateLayoutEv @ 80 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer13CreateLabelsLEv @ 81 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer13SetRandomModeEi @ 82 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer13SetRepeatModeEii @ 83 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer13UpdateButtonsE17TMPXPlaybackState @ 84 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer14OfferKeyEventLERK9TKeyEvent10TEventCode @ 85 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer16SetRealAudioModeEi @ 86 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer18GetNewSongPositionEv @ 87 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer18RefreshProgressBarEv @ 88 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer18UpdateLabelColorsLEv @ 89 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer19HandlePointerEventLERK13TPointerEvent @ 90 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer19UpdateSoftkeyColorsEv @ 91 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer20HandleButtonCommandLEi @ 92 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer20HandleResourceChangeEi @ 93 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer20UpdateDurationLabelLEi @ 94 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer21UpdateTimeIndicatorsLEii @ 95 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer22ExtractAlbumArtStartedEv @ 96 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer22HandleForegroundEventLEi @ 97 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer24ExtractAlbumArtCompletedEP10CFbsBitmapi @ 98 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer25UpdateProgressBarGraphicsEv @ 99 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer34UpdateBackgroundSkinControlContextERK5TRect @ 100 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer7SetModeE19TMPXPbvPlaybackMode @ 101 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer9FreeIconsEv @ 102 NONAME
-	_ZN31CMPXCommonPlaybackViewContainerD0Ev @ 103 NONAME
-	_ZN31CMPXCommonPlaybackViewContainerD1Ev @ 104 NONAME
-	_ZN31CMPXCommonPlaybackViewContainerD2Ev @ 105 NONAME
-	_ZNK25CMPXCommonPlaybackViewImp10IsEmbeddedEv @ 106 NONAME
-	_ZNK25CMPXCommonPlaybackViewImp18SimpleEmbeddedModeEv @ 107 NONAME
-	_ZNK31CMPXCommonPlaybackViewContainer10RedrawRectERK5TRect @ 108 NONAME
-	_ZNK31CMPXCommonPlaybackViewContainer13DrawIndicatorER9CWindowGcRK5TRectS4_PK8CGulIconi @ 109 NONAME
-	_ZNK31CMPXCommonPlaybackViewContainer14GetHelpContextER15TCoeHelpContext @ 110 NONAME
-	_ZNK31CMPXCommonPlaybackViewContainer16ComponentControlEi @ 111 NONAME
-	_ZNK31CMPXCommonPlaybackViewContainer22CountComponentControlsEv @ 112 NONAME
-	_ZNK31CMPXCommonPlaybackViewContainer4DrawERK5TRect @ 113 NONAME
-	_ZTI25CMPXCommonPlaybackViewImp @ 114 NONAME
-	_ZTI28CMPXCommonPlaybackViewLayout @ 115 NONAME
-	_ZTI31CMPXCommonPlaybackViewContainer @ 116 NONAME
-	_ZTV25CMPXCommonPlaybackViewImp @ 117 NONAME
-	_ZTV28CMPXCommonPlaybackViewLayout @ 118 NONAME
-	_ZTV31CMPXCommonPlaybackViewContainer @ 119 NONAME
-	_ZThn100_N25CMPXCommonPlaybackViewImp20HandleViewActivationERK10TVwsViewIdS2_ @ 120 NONAME
-	_ZThn108_N25CMPXCommonPlaybackViewImp24HandleOperationCompleteLE17TCHelperOperationiPv @ 121 NONAME
-	_ZThn112_N25CMPXCommonPlaybackViewImp13HandlePSEventE4TUidi @ 122 NONAME
-	_ZThn116_N25CMPXCommonPlaybackViewImp19HandleSettingChangeERK4TUidm @ 123 NONAME
-	_ZThn120_N25CMPXCommonPlaybackViewImp16DialogDismissedLEi @ 124 NONAME
-	_ZThn124_N25CMPXCommonPlaybackViewImp16HandleViewUpdateE4TUidN26MMPXViewActivationObserver16TViewUpdateEventEii @ 125 NONAME
-	_ZThn124_N25CMPXCommonPlaybackViewImp20HandleViewActivationERK4TUidS2_ @ 126 NONAME
-	_ZThn128_N25CMPXCommonPlaybackViewImp11HandleOpenLERK22CMPXCollectionPlaylisti @ 127 NONAME
-	_ZThn128_N25CMPXCommonPlaybackViewImp11HandleOpenLERK9CMPXMediaiii @ 128 NONAME
-	_ZThn128_N25CMPXCommonPlaybackViewImp21HandleCommandCompleteEP9CMPXMediai @ 129 NONAME
-	_ZThn128_N25CMPXCommonPlaybackViewImp22HandleCollectionMediaLERK9CMPXMediai @ 130 NONAME
-	_ZThn128_N25CMPXCommonPlaybackViewImp23HandleCollectionMessageEP9CMPXMediai @ 131 NONAME
-	_ZThn12_N25CMPXCommonPlaybackViewImp15ProcessCommandLEi @ 132 NONAME
-	_ZThn12_N25CMPXCommonPlaybackViewImp16DynInitMenuPaneLEiP12CEikMenuPane @ 133 NONAME
-	_ZThn4_N28CMPXCommonPlaybackViewLayout11LayoutLabelEP9CEikLabelRK5TRect20TMPXPbvTextIndicatorii @ 134 NONAME
-	_ZThn4_N28CMPXCommonPlaybackViewLayout12ButtonLayoutERK5TRect @ 135 NONAME
-	_ZThn4_N28CMPXCommonPlaybackViewLayout12ButtonLayoutERK5TRecti @ 136 NONAME
-	_ZThn4_N28CMPXCommonPlaybackViewLayout15IndicatorLayoutERK5TRect16TMPXPbvIndicator @ 137 NONAME
-	_ZThn4_N28CMPXCommonPlaybackViewLayout17GetButtonBitmapsLE13TMPXPbvButtoniRP10CFbsBitmapS3_ @ 138 NONAME
-	_ZThn4_N28CMPXCommonPlaybackViewLayout21GetIndicatorIconMaskLE16TMPXPbvIndicator @ 139 NONAME
-	_ZThn52_N31CMPXCommonPlaybackViewContainer22ExtractAlbumArtStartedEv @ 140 NONAME
-	_ZThn52_N31CMPXCommonPlaybackViewContainer24ExtractAlbumArtCompletedEP10CFbsBitmapi @ 141 NONAME
-	_ZThn56_N31CMPXCommonPlaybackViewContainer20HandleButtonCommandLEi @ 142 NONAME
-	_ZThn80_N25CMPXCommonPlaybackViewImp21HandlePlaybackMessageEP9CMPXMediai @ 143 NONAME
-	_ZThn84_N25CMPXCommonPlaybackViewImp12HandleMediaLERK9CMPXMediai @ 144 NONAME
-	_ZThn84_N25CMPXCommonPlaybackViewImp15HandlePropertyLE20TMPXPlaybackPropertyii @ 145 NONAME
-	_ZThn84_N25CMPXCommonPlaybackViewImp21HandleSubPlayerNamesLE4TUidPK12MDesC16Arrayii @ 146 NONAME
-	_ZThn96_N25CMPXCommonPlaybackViewImp18HandleLayoutChangeEv @ 147 NONAME
-	_ZN31CMPXCommonPlaybackViewContainer18LightStatusChangedEiN10CHWRMLight12TLightStatusE @ 148 NONAME
-	_ZThn60_N31CMPXCommonPlaybackViewContainer18LightStatusChangedEiN10CHWRMLight12TLightStatusE @ 149 NONAME
-        _ZN25CMPXCommonPlaybackViewImp24LaunchFileDetailsDialogLEv @ 150 NONAME 
+	_ZN25CMPXCommonPlaybackViewImp24LaunchFileDetailsDialogLEv @ 53 NONAME
+	_ZN25CMPXCommonPlaybackViewImp24UpdateFMTransmitterInfoLEi @ 54 NONAME
+	_ZN25CMPXCommonPlaybackViewImp25PrepareMediaForPlaylistLCERK9CMPXMedia @ 55 NONAME
+	_ZN25CMPXCommonPlaybackViewImp25UpdateDownloadStateLabelLEv @ 56 NONAME
+	_ZN25CMPXCommonPlaybackViewImp25UpdateTrackPosInPlaylistLEv @ 57 NONAME
+	_ZN25CMPXCommonPlaybackViewImp26HandleStatusPaneSizeChangeEv @ 58 NONAME
+	_ZN25CMPXCommonPlaybackViewImp27UpdateMiddleSoftKeyDisplayLEv @ 59 NONAME
+	_ZN25CMPXCommonPlaybackViewImp28UpdateTrackPlaybackPositionLEii @ 60 NONAME
+	_ZN25CMPXCommonPlaybackViewImpD0Ev @ 61 NONAME
+	_ZN25CMPXCommonPlaybackViewImpD1Ev @ 62 NONAME
+	_ZN25CMPXCommonPlaybackViewImpD2Ev @ 63 NONAME
+	_ZN28CMPXCommonPlaybackViewLayout11LayoutLabelEP9CEikLabelRK5TRect20TMPXPbvTextIndicatorii @ 64 NONAME
+	_ZN28CMPXCommonPlaybackViewLayout12ButtonLayoutERK5TRect @ 65 NONAME
+	_ZN28CMPXCommonPlaybackViewLayout12ButtonLayoutERK5TRecti @ 66 NONAME
+	_ZN28CMPXCommonPlaybackViewLayout14DoLayoutLabelLEP9CEikLabelRK5TRectiii @ 67 NONAME
+	_ZN28CMPXCommonPlaybackViewLayout15GetTextVariantLE20TMPXPbvTextIndicator @ 68 NONAME
+	_ZN28CMPXCommonPlaybackViewLayout15IndicatorLayoutERK5TRect16TMPXPbvIndicator @ 69 NONAME
+	_ZN28CMPXCommonPlaybackViewLayout16CreateColorIconLEP17MAknsSkinInstanceRK11TAknsItemIDS4_iRK7TDesC16ii @ 70 NONAME
+	_ZN28CMPXCommonPlaybackViewLayout17GetButtonBitmapsLE13TMPXPbvButtoniRP10CFbsBitmapS3_ @ 71 NONAME
+	_ZN28CMPXCommonPlaybackViewLayout17InitCommonLayoutLEv @ 72 NONAME
+	_ZN28CMPXCommonPlaybackViewLayout20GetIndicatorVariantLE16TMPXPbvIndicator @ 73 NONAME
+	_ZN28CMPXCommonPlaybackViewLayout21GetIndicatorIconMaskLE16TMPXPbvIndicator @ 74 NONAME
+	_ZN28CMPXCommonPlaybackViewLayout22DetermineLayoutVariantEv @ 75 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer10ConstructLERK5TRect @ 76 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer11SetFMTXModeEi @ 77 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer11SizeChangedEv @ 78 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer12CreateIconsLEv @ 79 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer12StartMarqueeE20TMPXPbvTextIndicator @ 80 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer12UpdateLabelLE20TMPXPbvTextIndicatorRK7TDesC16 @ 81 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer12UpdateLayoutEv @ 82 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer13CreateLabelsLEv @ 83 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer13SetRandomModeEi @ 84 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer13SetRepeatModeEii @ 85 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer13UpdateButtonsE17TMPXPlaybackState @ 86 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer14OfferKeyEventLERK9TKeyEvent10TEventCode @ 87 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer16SetRealAudioModeEi @ 88 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer18GetNewSongPositionEv @ 89 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer18LightStatusChangedEiN10CHWRMLight12TLightStatusE @ 90 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer18RefreshProgressBarEv @ 91 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer18UpdateLabelColorsLEv @ 92 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer19HandlePointerEventLERK13TPointerEvent @ 93 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer19UpdateSoftkeyColorsEv @ 94 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer20HandleButtonCommandLEi @ 95 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer20HandleResourceChangeEi @ 96 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer20UpdateDurationLabelLEi @ 97 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer21UpdateTimeIndicatorsLEii @ 98 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer22ExtractAlbumArtStartedEv @ 99 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer22HandleForegroundEventLEi @ 100 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer24ExtractAlbumArtCompletedEP10CFbsBitmapi @ 101 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer25UpdateProgressBarGraphicsEv @ 102 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer34UpdateBackgroundSkinControlContextERK5TRect @ 103 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer7SetModeE19TMPXPbvPlaybackMode @ 104 NONAME
+	_ZN31CMPXCommonPlaybackViewContainer9FreeIconsEv @ 105 NONAME
+	_ZN31CMPXCommonPlaybackViewContainerD0Ev @ 106 NONAME
+	_ZN31CMPXCommonPlaybackViewContainerD1Ev @ 107 NONAME
+	_ZN31CMPXCommonPlaybackViewContainerD2Ev @ 108 NONAME
+	_ZNK25CMPXCommonPlaybackViewImp10IsEmbeddedEv @ 109 NONAME
+	_ZNK25CMPXCommonPlaybackViewImp18SimpleEmbeddedModeEv @ 110 NONAME
+	_ZNK31CMPXCommonPlaybackViewContainer10RedrawRectERK5TRect @ 111 NONAME
+	_ZNK31CMPXCommonPlaybackViewContainer13DrawIndicatorER9CWindowGcRK5TRectS4_PK8CGulIconi @ 112 NONAME
+	_ZNK31CMPXCommonPlaybackViewContainer14GetHelpContextER15TCoeHelpContext @ 113 NONAME
+	_ZNK31CMPXCommonPlaybackViewContainer16ComponentControlEi @ 114 NONAME
+	_ZNK31CMPXCommonPlaybackViewContainer22CountComponentControlsEv @ 115 NONAME
+	_ZNK31CMPXCommonPlaybackViewContainer4DrawERK5TRect @ 116 NONAME
+	_ZTI25CMPXCommonPlaybackViewImp @ 117 NONAME
+	_ZTI28CMPXCommonPlaybackViewLayout @ 118 NONAME
+	_ZTI31CMPXCommonPlaybackViewContainer @ 119 NONAME
+	_ZTV25CMPXCommonPlaybackViewImp @ 120 NONAME
+	_ZTV28CMPXCommonPlaybackViewLayout @ 121 NONAME
+	_ZTV31CMPXCommonPlaybackViewContainer @ 122 NONAME
+	_ZThn100_N25CMPXCommonPlaybackViewImp20HandleViewActivationERK10TVwsViewIdS2_ @ 123 NONAME
+	_ZThn108_N25CMPXCommonPlaybackViewImp24HandleOperationCompleteLE17TCHelperOperationiPv @ 124 NONAME
+	_ZThn112_N25CMPXCommonPlaybackViewImp13HandlePSEventE4TUidi @ 125 NONAME
+	_ZThn116_N25CMPXCommonPlaybackViewImp19HandleSettingChangeERK4TUidm @ 126 NONAME
+	_ZThn120_N25CMPXCommonPlaybackViewImp16DialogDismissedLEi @ 127 NONAME
+	_ZThn124_N25CMPXCommonPlaybackViewImp16HandleViewUpdateE4TUidN26MMPXViewActivationObserver16TViewUpdateEventEii @ 128 NONAME
+	_ZThn124_N25CMPXCommonPlaybackViewImp20HandleViewActivationERK4TUidS2_ @ 129 NONAME
+	_ZThn128_N25CMPXCommonPlaybackViewImp11HandleOpenLERK22CMPXCollectionPlaylisti @ 130 NONAME
+	_ZThn128_N25CMPXCommonPlaybackViewImp11HandleOpenLERK9CMPXMediaiii @ 131 NONAME
+	_ZThn128_N25CMPXCommonPlaybackViewImp21HandleCommandCompleteEP9CMPXMediai @ 132 NONAME
+	_ZThn128_N25CMPXCommonPlaybackViewImp22HandleCollectionMediaLERK9CMPXMediai @ 133 NONAME
+	_ZThn128_N25CMPXCommonPlaybackViewImp23HandleCollectionMessageEP9CMPXMediai @ 134 NONAME
+	_ZThn12_N25CMPXCommonPlaybackViewImp15ProcessCommandLEi @ 135 NONAME
+	_ZThn12_N25CMPXCommonPlaybackViewImp16DynInitMenuPaneLEiP12CEikMenuPane @ 136 NONAME
+	_ZThn4_N28CMPXCommonPlaybackViewLayout11LayoutLabelEP9CEikLabelRK5TRect20TMPXPbvTextIndicatorii @ 137 NONAME
+	_ZThn4_N28CMPXCommonPlaybackViewLayout12ButtonLayoutERK5TRect @ 138 NONAME
+	_ZThn4_N28CMPXCommonPlaybackViewLayout12ButtonLayoutERK5TRecti @ 139 NONAME
+	_ZThn4_N28CMPXCommonPlaybackViewLayout15IndicatorLayoutERK5TRect16TMPXPbvIndicator @ 140 NONAME
+	_ZThn4_N28CMPXCommonPlaybackViewLayout17GetButtonBitmapsLE13TMPXPbvButtoniRP10CFbsBitmapS3_ @ 141 NONAME
+	_ZThn4_N28CMPXCommonPlaybackViewLayout21GetIndicatorIconMaskLE16TMPXPbvIndicator @ 142 NONAME
+	_ZThn52_N31CMPXCommonPlaybackViewContainer22ExtractAlbumArtStartedEv @ 143 NONAME
+	_ZThn52_N31CMPXCommonPlaybackViewContainer24ExtractAlbumArtCompletedEP10CFbsBitmapi @ 144 NONAME
+	_ZThn56_N31CMPXCommonPlaybackViewContainer20HandleButtonCommandLEi @ 145 NONAME
+	_ZThn60_N31CMPXCommonPlaybackViewContainer18LightStatusChangedEiN10CHWRMLight12TLightStatusE @ 146 NONAME
+	_ZThn80_N25CMPXCommonPlaybackViewImp21HandlePlaybackMessageEP9CMPXMediai @ 147 NONAME
+	_ZThn84_N25CMPXCommonPlaybackViewImp12HandleMediaLERK9CMPXMediai @ 148 NONAME
+	_ZThn84_N25CMPXCommonPlaybackViewImp15HandlePropertyLE20TMPXPlaybackPropertyii @ 149 NONAME
+	_ZThn84_N25CMPXCommonPlaybackViewImp21HandleSubPlayerNamesLE4TUidPK12MDesC16Arrayii @ 150 NONAME
+	_ZThn96_N25CMPXCommonPlaybackViewImp18HandleLayoutChangeEv @ 151 NONAME
+
--- a/mpxplugins/viewplugins/views/commonplaybackview/inc/mpxbuttonmanager.h	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/commonplaybackview/inc/mpxbuttonmanager.h	Tue Apr 27 16:34:37 2010 +0300
@@ -173,7 +173,7 @@
         /**
         * Sets the avkon rocker button state and send observer commands
         */
-        TKeyResponse SetAvkonButtonState( const TKeyEvent& aKeyEvent, TEventCode aType );
+        TKeyResponse SetAvkonButtonStateL( const TKeyEvent& aKeyEvent, TEventCode aType );
 
         /**
         * Callback for long-press timer
@@ -183,7 +183,7 @@
         /**
         * Handle long press event.
         */
-        void HandleLongPress();
+        void HandleLongPressL();
 
     private:    // Data
         TRect iParentRect;
--- a/mpxplugins/viewplugins/views/commonplaybackview/src/mpxbuttonmanager.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/commonplaybackview/src/mpxbuttonmanager.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -203,7 +203,7 @@
     MPX_DEBUG3("CMPXButtonManager::OfferKeyEventL(%d, %d) entering", aKeyEvent.iScanCode, aType);
 
     TKeyResponse response( EKeyWasNotConsumed );
-    response = SetAvkonButtonState(aKeyEvent, aType);
+    response = SetAvkonButtonStateL(aKeyEvent, aType);
     MPX_DEBUG2("CMPXButtonManager::OfferKeyEventL() exiting %d", response);
     return response;
     }
@@ -327,7 +327,7 @@
 // CMPXCommonPlaybackViewContainer::SetAvkonButtonState
 // -----------------------------------------------------------------------------
 //
-TKeyResponse CMPXButtonManager::SetAvkonButtonState(const TKeyEvent& aKeyEvent,
+TKeyResponse CMPXButtonManager::SetAvkonButtonStateL(const TKeyEvent& aKeyEvent,
         TEventCode aType)
     {
 
@@ -335,7 +335,7 @@
 
     if (aKeyEvent.iScanCode == EStdKeyLeftArrow || aKeyEvent.iCode == EKeyLeftArrow)
         {    
-        MPX_DEBUG1( "CMPXButtonManager::SetAvkonButtonState LeftArrow" );
+        MPX_DEBUG1( "CMPXButtonManager::SetAvkonButtonStateL LeftArrow" );
         if (aType == EEventKeyDown)
             {
             if (!iIsTouchUi)
@@ -358,13 +358,13 @@
             iLongKeyTimer->Cancel();
             if (iIsLongPress)
                {
-               MPX_DEBUG1( "CMPXButtonManager::SetAvkonButtonState LeftArrow long press" );
+               MPX_DEBUG1( "CMPXButtonManager::SetAvkonButtonStateL LeftArrow long press" );
                iIsLongPress = EFalse;
                iObserver->HandleButtonCommandL(EMPXPbvCmdEndSeek);
                }
             else
                {
-               MPX_DEBUG1( "CMPXButtonManager::SetAvkonButtonState LeftArrow short press" );
+               MPX_DEBUG1( "CMPXButtonManager::SetAvkonButtonStateL LeftArrow short press" );
                iObserver->HandleButtonCommandL(EMPXPbvCmdPreviousListItem);
                }
             iIsLongPress = EFalse;
@@ -396,13 +396,13 @@
                 iLongKeyTimer->Cancel();
                 if (iIsLongPress)
                     {
-                    MPX_DEBUG1( "CMPXButtonManager::SetAvkonButtonState RightArrow long press" );
+                    MPX_DEBUG1( "CMPXButtonManager::SetAvkonButtonStateL RightArrow long press" );
                     iIsLongPress = EFalse;
                     iObserver->HandleButtonCommandL(EMPXPbvCmdEndSeek);
                     }
                 else
                     {
-				            MPX_DEBUG1( "CMPXButtonManager::SetAvkonButtonState RightArrow short press" );
+				            MPX_DEBUG1( "CMPXButtonManager::SetAvkonButtonStateL RightArrow short press" );
                    iObserver->HandleButtonCommandL(EMPXPbvCmdNextListItem);
                    }
                 iIsLongPress = EFalse;
@@ -413,7 +413,7 @@
     else if (aKeyEvent.iScanCode == EStdKeyDevice3 || aKeyEvent.iCode == EKeyDevice3
             || aKeyEvent.iScanCode == EStdKeyEnter || aKeyEvent.iCode == EKeyEnter)
    		{
-   		MPX_DEBUG1( "CMPXButtonManager::SetAvkonButtonState EStdKeyDevice3 or EStdKeyEnter pressed" );
+   		MPX_DEBUG1( "CMPXButtonManager::SetAvkonButtonStateL EStdKeyDevice3 or EStdKeyEnter pressed" );
         if (!iIsTouchUi)
             {
             if (aType == EEventKeyDown)
@@ -468,7 +468,7 @@
    		}
     else if (aKeyEvent.iScanCode == EStdKeyDownArrow || aKeyEvent.iCode == EKeyDownArrow)
         {
-        MPX_DEBUG1( "CMPXButtonManager::SetAvkonButtonState EStdKeyDownArrow pressed" );
+        MPX_DEBUG1( "CMPXButtonManager::SetAvkonButtonStateL EStdKeyDownArrow pressed" );
         if (iVolumeInRocker || iStopInRocker)
            {	
            if (!iIsTouchUi)
@@ -507,7 +507,7 @@
 		    }
     else if (aKeyEvent.iScanCode == EStdKeyUpArrow || aKeyEvent.iCode == EKeyUpArrow)
         {
-        MPX_DEBUG1( "CMPXButtonManager::SetAvkonButtonState EStdKeyUpArrow pressed" );
+        MPX_DEBUG1( "CMPXButtonManager::SetAvkonButtonStateL EStdKeyUpArrow pressed" );
         if(iVolumeInRocker)
             {
 	    	    if (!iIsTouchUi)
@@ -543,15 +543,15 @@
 TInt CMPXButtonManager::TimerCallback(TAny* aPtr)
     {
     //HandleLongPress();
-    static_cast<CMPXButtonManager*>(aPtr)->HandleLongPress();
-    return KErrNone;
+    MPX_TRAPD( err, static_cast<CMPXButtonManager*>(aPtr)->HandleLongPressL() );
+    return err;
     }
 
 // -----------------------------------------------------------------------------
 // CMPlayerPlaybackContainer::HandleLongPress
 // -----------------------------------------------------------------------------
 //
-void CMPXButtonManager::HandleLongPress()
+void CMPXButtonManager::HandleLongPressL()
     {
     iObserver->HandleButtonCommandL(iLongPressCommandId);
     iLongKeyTimer->Cancel();
--- a/mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewimp.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewimp.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -503,7 +503,7 @@
 
     if ( iContainer && !iSwitchingView )
         {
-        UpdatePlaybackState( iPlaybackState );
+        UpdatePlaybackStateL( iPlaybackState );
         UpdateTrackInfoL( iMedia );
         UpdateTrackPlaybackPositionL( iPosition, iDuration );
         UpdateTrackPosInPlaylistL();
@@ -615,7 +615,7 @@
 // Update current playback state.
 // ---------------------------------------------------------------------------
 //
-EXPORT_C void CMPXCommonPlaybackViewImp::UpdatePlaybackState(
+EXPORT_C void CMPXCommonPlaybackViewImp::UpdatePlaybackStateL(
     TMPXPlaybackState aPlaybackState )
     {
     MPX_DEBUG2("CMPXCommonPlaybackViewImp::UpdatePlaybackState(%d): Entering", aPlaybackState);
@@ -1354,7 +1354,7 @@
     {
     MPX_FUNC_EX( "CMPXCommonPlaybackViewImp::DoHandleStateChangedL" );
     MPX_DEBUG2( "CMPXCommonPlaybackViewImp::DoHandleStateChangedL %d", aState );
-    UpdatePlaybackState( aState );
+    UpdatePlaybackStateL( aState );
 
     switch ( aState )
         {
@@ -1497,6 +1497,11 @@
             case KErrCANewFileHandleRequired:
             case KErrPermissionDenied:
                 {
+                if (aError == KErrCANoPermission ||
+                    aError == KErrCANoRights)
+                    {
+                    iCommonUiHelper->HandleErrorL( KMPXErrorExpiredRights, iMedia );
+                    }
                 TBool skip(ETrue);
 
                 if ( iMedia )
@@ -1654,7 +1659,7 @@
     MPX_DEBUG2("CMPXCommonPlaybackViewImp::HandleAllTracksInvalidL: iDatabaseNotReady (%d)", iDatabaseNotReady);
 
     iPlaybackUtility->CommandL( EPbCmdStop );
-    UpdatePlaybackState( EPbStateStopped );
+    UpdatePlaybackStateL( EPbStateStopped );
 
     TInt mpxWindowGroupId = CEikonEnv::Static()->RootWin().Identifier();
 
@@ -2591,7 +2596,7 @@
         {
         delete iMedia;
         iMedia = NULL;
-        UpdatePlaybackState( iPlaybackState );
+        UpdatePlaybackStateL( iPlaybackState );
         UpdateTrackInfoL( iMedia );
         }
     else
@@ -2617,7 +2622,7 @@
                     if ( playlist->Count() > 0 )
                         {
                         RequestMediaL();
-                        UpdatePlaybackState( iPlaybackState );
+                        UpdatePlaybackStateL( iPlaybackState );
                         }
                     else
                         {
@@ -2862,8 +2867,13 @@
                         ETrue );
                     }
 
+                // Check if HDMI cable is connected    
+                TBool isHDMIConnected = iTvOutConfig->HdmiCableConnected(); 
+                aMenuPane->SetItemDimmed( EMPXPbvCmdOpenMusicSettings, isHDMIConnected );
+                aMenuPane->SetItemDimmed( EMPXPbvCmdEqualizer, isHDMIConnected );
+                
                 // Check if FM Transmitter is supported
-                if ( !FeatureManager::FeatureSupported( KFeatureIdFmtx ) )
+                if ( !FeatureManager::FeatureSupported( KFeatureIdFmtx ) || isHDMIConnected )
 					{
 					aMenuPane->SetItemDimmed(
 						EMPXPbvCmdFMTransmitter,
@@ -2873,7 +2883,7 @@
 
                 if ( iUpnpFrameworkSupport )
                     {
-                    if ( !iMedia || !IsUpnpVisible() )
+                    if ( !iMedia || !IsUpnpVisibleL() )
                         {
                         GetCurrentPlayerDetails();
                         if ( iCurrentPlayerType == EPbLocal )
@@ -2893,7 +2903,6 @@
                     {
                     return;
                     }
-                aMenuPane->SetItemDimmed( EMPXPbvCmdOpenMusicSettings, iTvOutConfig->HdmiCableConnected());        
                 }
             break;
             }
@@ -3022,10 +3031,10 @@
         else
             {
             if ( StatusPane()->CurrentLayoutResId() !=
-                 R_AVKON_STATUS_PANE_LAYOUT_USUAL )
+                 R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL_FLAT )
                 {
                 TRAP_IGNORE(
-                    StatusPane()->SwitchLayoutL( R_AVKON_STATUS_PANE_LAYOUT_USUAL ));
+                    StatusPane()->SwitchLayoutL( R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL_FLAT ));
                 }
             }
 
@@ -3134,7 +3143,7 @@
 // Taken from Gallery upnp support implementation
 // -----------------------------------------------------------------------------
 //
-EXPORT_C TBool CMPXCommonPlaybackViewImp::IsUpnpVisible()
+EXPORT_C TBool CMPXCommonPlaybackViewImp::IsUpnpVisibleL()
     {
     MPX_FUNC( "CMPXCommonPlaybackViewImp::IsUpnpVisible" );
     TBool returnValue = EFalse;
@@ -3542,7 +3551,7 @@
 EXPORT_C TBool CMPXCommonPlaybackViewImp::IsCommandSupportedL()
     {
     TBool forwardCommand = ETrue;
-    if ( iUpnpFrameworkSupport && IsUpnpVisible() )
+    if ( iUpnpFrameworkSupport && IsUpnpVisibleL() )
         {
         // retrieve iCurrentPlayerType info
         GetCurrentPlayerDetails();
@@ -3908,9 +3917,9 @@
 // Updates the middle toolbar button
 // ---------------------------------------------------------------------------
 //
-EXPORT_C void CMPXCommonPlaybackViewImp::UpdateToolbar()
+EXPORT_C void CMPXCommonPlaybackViewImp::UpdateToolbarL()
     {
-    MPX_FUNC("CMPXCommonPlaybackViewImp::UpdateToolbar");
+    MPX_FUNC("CMPXCommonPlaybackViewImp::UpdateToolbarL");
 
     if ( AknLayoutUtils::PenEnabled() )
         {
@@ -3987,29 +3996,34 @@
 //
 TInt CMPXCommonPlaybackViewImp::HandleDelayedError( TAny* aPtr )
     {
+	TInt ret( KErrNone );
     CMPXCommonPlaybackViewImp* pv = reinterpret_cast<CMPXCommonPlaybackViewImp*>( aPtr );
     pv->iDelayedErrorTimer->Cancel();
-
     // compare index
     if ( pv->iPlaybackUtility )
     	{
         MMPXSource* source( pv->iPlaybackUtility->Source() );
         if ( source )
     	    {
-            CMPXCollectionPlaylist* pl( source->PlaylistL() );
-        	if ( pl )
-                {
-                CleanupStack::PushL( pl );
-                if ( pv->iErrIndex == pl->Index() )
-                	{
-                	pv->HandleErrorL( pv->iLastDelayedErr );
-                	}
-                CleanupStack::PopAndDestroy( pl );
-                }
+            CMPXCollectionPlaylist* pl( NULL );
+            MPX_TRAP( ret, pl = source->PlaylistL() );
+            if( ret != KErrNone )
+            	{
+                return ret;
+            	}
+
+			if ( pv->iErrIndex == pl->Index() )
+				{
+				MPX_TRAP( ret, pv->HandleErrorL( pv->iLastDelayedErr ) );
+				}
+			
+			delete pl;
+			pl = NULL;
+
             }
     	}
 
-    return KErrNone;
+    return ret;
     }
 
 // ---------------------------------------------------------------------------
@@ -4077,7 +4091,7 @@
         {
         toolbar->SetToolbarVisibility(EFalse);
         }
-    iViewUtility->ActivateViewL( TUid::Uid(KMPXPluginTypeMetadataEditorUid) );
+    TRAP_IGNORE( iViewUtility->ActivateViewL( TUid::Uid(KMPXPluginTypeMetadataEditorUid) ) );
     if ( toolbar )
         {
         toolbar->SetToolbarVisibility(ETrue);
--- a/mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewlayout.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewlayout.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -81,8 +81,8 @@
     TAknLayoutRect res;
 
     TMPXPbvLayoutVariants lafVariant(EPbvUndefinedVariant);
-    lafVariant = GetIndicatorVariant(aIndicator);
-    if (lafVariant == EPbvUndefinedVariant)
+    MPX_TRAPD( err, lafVariant = GetIndicatorVariantL(aIndicator) );
+    if ( err != KErrNone || lafVariant == EPbvUndefinedVariant)
        {
        // unsupported
        ASSERT(0);
@@ -178,8 +178,8 @@
     TInt /*aOffsety*/ /* =0 */ )
     {
     TMPXPbvLayoutVariants lafVariant(EPbvUndefinedVariant);
-    lafVariant = GetTextVariant(aText);
-    if (lafVariant == EPbvUndefinedVariant)
+    MPX_TRAPD( err, lafVariant = GetTextVariantL(aText) );
+    if ( lafVariant == EPbvUndefinedVariant || err != KErrNone )
         {
         ASSERT(0);
         }
@@ -520,6 +520,19 @@
     return res.Rect();
     }
 
+// ---------------------------------------------------------------------------
+//  Init common layout data
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CMPXCommonPlaybackViewLayout::InitCommonLayoutL()
+	{
+    TInt flags( 0 );
+    CRepository* repository = CRepository::NewL( KCRUidMPXMPFeatures );
+    User::LeaveIfError( repository->Get( KMPXMPLocalVariation, flags ));
+    delete repository;
+    repository = NULL;
+    iShowRockerGraphics = static_cast<TBool>( flags & KMPXRockerMappingSupport );
+	}
 
 // ---------------------------------------------------------------------------
 //  Determine the layout (touch, non-touch, landscape, portrait, rocker, etc...)
@@ -529,12 +542,6 @@
     {
     TMPXPbvLayoutVariants variant(EPbvUndefinedVariant);
 
-    TInt flags( 0 );
-    CRepository* repository = CRepository::NewL( KCRUidMPXMPFeatures );
-    User::LeaveIfError( repository->Get( KMPXMPLocalVariation, flags ));
-    delete repository;
-    repository = NULL;
-    TBool showRockerGraphics = static_cast<TBool>( flags & KMPXRockerMappingSupport );
 
     TBool isLandscape = Layout_Meta_Data::IsLandscapeOrientation();
 
@@ -548,19 +555,19 @@
         {
         variant = EPbvLandscapeNhdTouchWithFM;
         }
-    else if (!showRockerGraphics && !isLandscape )
+    else if (!iShowRockerGraphics && !isLandscape )
         {
         variant = EPbvPortraitWithoutRocker;
         }
-    else if (!showRockerGraphics && isLandscape)
+    else if (!iShowRockerGraphics && isLandscape)
         {
         variant = EPbvLandscapeWithoutRocker;
         }
-    else if (showRockerGraphics && !isLandscape)
+    else if (iShowRockerGraphics && !isLandscape)
         {
         variant = EPbvPortraitWithRocker;
         }
-    else if (showRockerGraphics && isLandscape)
+    else if (iShowRockerGraphics && isLandscape)
         {
         variant = EPbvLandscapeWithRocker;
         }
@@ -569,11 +576,12 @@
     return(variant);
     }
 
+
 // ---------------------------------------------------------------------------
 //  Determine the layout variant for a text item
 // ---------------------------------------------------------------------------
 //
-EXPORT_C TMPXPbvLayoutVariants CMPXCommonPlaybackViewLayout::GetTextVariant(TMPXPbvTextIndicator aText)
+EXPORT_C TMPXPbvLayoutVariants CMPXCommonPlaybackViewLayout::GetTextVariantL(TMPXPbvTextIndicator aText)
     {
     TMPXPbvLayoutVariants layoutVariant = DetermineLayoutVariant();
     TMPXPbvLayoutVariants textVariant;
@@ -608,7 +616,7 @@
 // Determine the layout variant type for an indicator item
 // ---------------------------------------------------------------------------
 //
-EXPORT_C TMPXPbvLayoutVariants CMPXCommonPlaybackViewLayout::GetIndicatorVariant(TMPXPbvIndicator aIndicator)
+EXPORT_C TMPXPbvLayoutVariants CMPXCommonPlaybackViewLayout::GetIndicatorVariantL(TMPXPbvIndicator aIndicator)
     {
     TMPXPbvLayoutVariants layoutVariant = DetermineLayoutVariant();
     TMPXPbvLayoutVariants indicatorVariant;
--- a/mpxplugins/viewplugins/views/embeddedplaybackview/src/mpxembeddedplaybackviewimp.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/embeddedplaybackview/src/mpxembeddedplaybackviewimp.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -703,7 +703,7 @@
             {
             case TMPXPlaybackMessage::EStateChanged:
                 UpdateMiddleSoftKeyDisplayL();
-                UpdateToolbar();
+                UpdateToolbarL();
                 break;
 
             default:
@@ -723,7 +723,7 @@
     if (aResourceId == R_MPX_PBV_TOUCH_TOOLBAR)
         {
         // Put initializations here to take effect before toolbar is shown
-        UpdateToolbar();
+        UpdateToolbarL();
         aToolbar->UpdateBackground();
         }
     }
--- a/mpxplugins/viewplugins/views/embeddedplaybackview/src/mpxembeddedplaybackviewlayout.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/embeddedplaybackview/src/mpxembeddedplaybackviewlayout.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -96,6 +96,7 @@
     {
     MPX_FUNC( "CMPXEmbeddedPlaybackViewLayout::ConstructL" );
     iCommonUiHelper = CMPXCommonUiHelper::NewL();
+    InitCommonLayoutL();
     }
 
 // ---------------------------------------------------------------------------
--- a/mpxplugins/viewplugins/views/inc/mpxcommoncontainer.h	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/inc/mpxcommoncontainer.h	Tue Apr 27 16:34:37 2010 +0300
@@ -234,7 +234,7 @@
      *
      * @since 3.2
      */
-    virtual void DrawLbxItem( TInt aIndex ) = 0;
+    virtual void DrawLbxItemL( TInt aIndex ) = 0;
 
     /**
      * Set Find box's focus.
@@ -327,7 +327,7 @@
     /**
      * Custom handling of menu pane for markable lists
      */
-    virtual void HandleMarkableListDynInitMenuPane(
+    virtual void HandleMarkableListDynInitMenuPaneL(
         TInt aResourceId,
         CEikMenuPane* aMenuPane ) = 0;
 
--- a/mpxplugins/viewplugins/views/inc/mpxcommonplaybackviewlayout.h	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/inc/mpxcommonplaybackviewlayout.h	Tue Apr 27 16:34:37 2010 +0300
@@ -174,7 +174,7 @@
      * @param  aText Enumeration value identifying the text
      * @return layout variant id
      */
-    IMPORT_C TMPXPbvLayoutVariants GetTextVariant(TMPXPbvTextIndicator aText);
+    IMPORT_C TMPXPbvLayoutVariants GetTextVariantL(TMPXPbvTextIndicator aText);
 
 	/**
      * Get layout data for an indicator item
@@ -182,8 +182,16 @@
      * @param  aIndicator Enumeration value identifying the indicator
      * @return Layout variant id
      */
-    IMPORT_C TMPXPbvLayoutVariants GetIndicatorVariant(TMPXPbvIndicator aIndicator);
+    IMPORT_C TMPXPbvLayoutVariants GetIndicatorVariantL(TMPXPbvIndicator aIndicator);
 
+	/**
+     * Init common layout data
+     * @since 5.0
+     */    
+    IMPORT_C void InitCommonLayoutL();
+    
+private:
+    TBool iShowRockerGraphics;
     };
 
 #endif  // CMPXCOMMONPLAYBACKVIEWLAYOUT_H
--- a/mpxplugins/viewplugins/views/pdplaybackview/inc/mpxpdplaybackviewimp.h	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/pdplaybackview/inc/mpxpdplaybackviewimp.h	Tue Apr 27 16:34:37 2010 +0300
@@ -221,7 +221,7 @@
     * @since 5.0
     *
     */
-	void UpdateToolbar();
+	void UpdateToolbarL();
 
 private:    // data
     CMPXPdPlaybackViewLayout* iPlaybackViewLayout;    // owned
--- a/mpxplugins/viewplugins/views/pdplaybackview/src/mpxpdplaybackviewimp.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/pdplaybackview/src/mpxpdplaybackviewimp.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -277,7 +277,7 @@
                 MPX_DEBUG2( "CMPXPdPlaybackViewImp::DoHandlePlaybackMessageL - EStateChanged(%d)", type );
 
                 UpdateMiddleSoftKeyDisplayL();
-                UpdateToolbar();
+                UpdateToolbarL();
                 TMPXPlaybackState state =
                     static_cast<TMPXPlaybackState>( type );
                 DoHandleStateChangedL( state, data );
@@ -313,7 +313,7 @@
         {
         case EPbStateInitialising:
             {
-            UpdatePlaybackState( aState );
+            UpdatePlaybackStateL( aState );
             UpdateDownloadStateLabelL();
             RequestMediaL();
             break;
@@ -730,7 +730,7 @@
         // Put initializations here to take effect before toolbar is shown
         aToolbar->SetItemDimmed( EMPXPbvCmdPreviousListItem, ETrue, EFalse );
         aToolbar->SetItemDimmed( EMPXPbvCmdNextListItem, ETrue, EFalse );
-        UpdateToolbar();
+        UpdateToolbarL();
         aToolbar->UpdateBackground();
         }
     }
@@ -749,7 +749,7 @@
 // Updates the middle toolbar button
 // ---------------------------------------------------------------------------
 //
-void CMPXPdPlaybackViewImp::UpdateToolbar()
+void CMPXPdPlaybackViewImp::UpdateToolbarL()
     {
     MPX_FUNC( "CMPXPdPlaybackViewImp::UpdateToolbar" );
 
--- a/mpxplugins/viewplugins/views/pdplaybackview/src/mpxpdplaybackviewlayout.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/pdplaybackview/src/mpxpdplaybackviewlayout.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -87,6 +87,7 @@
 void CMPXPdPlaybackViewLayout::ConstructL()
     {
     MPX_FUNC( "CMPXPdPlaybackViewLayout::ConstructL" );
+    InitCommonLayoutL();
     }
 
 //  End of File
--- a/mpxplugins/viewplugins/views/pdsbplaybackview/inc/mpxpdsbplaybackviewimp.h	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/pdsbplaybackview/inc/mpxpdsbplaybackviewimp.h	Tue Apr 27 16:34:37 2010 +0300
@@ -231,7 +231,7 @@
     * @since 5.0
     *
     */
-	void UpdateToolbar();
+	void UpdateToolbarL();
 
 private:    // data
     CMPXPdSbPlaybackViewLayout* iPlaybackViewLayout;    // owned
--- a/mpxplugins/viewplugins/views/pdsbplaybackview/src/mpxpdsbplaybackviewimp.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/pdsbplaybackview/src/mpxpdsbplaybackviewimp.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -280,7 +280,7 @@
                 {
                 MPX_DEBUG2( "CMPXPdSbPlaybackViewImp::DoHandlePlaybackMessageL - EStateChanged(%d)", type );
 
-                UpdateToolbar();
+                UpdateToolbarL();
                 UpdateMiddleSoftKeyDisplayL();
                 TInt data( *aMessage.Value<TInt>( KMPXMessageGeneralData ) );
                 TMPXPlaybackState state =
@@ -353,7 +353,7 @@
         {
         case EPbStateInitialising:
             {
-            UpdatePlaybackState( aState );
+            UpdatePlaybackStateL( aState );
             UpdateDownloadStateLabelL();
             RequestMediaL();
             break;
@@ -854,7 +854,7 @@
         // Put initializations here to take effect before toolbar is shown
         aToolbar->SetItemDimmed( EMPXPbvCmdPreviousListItem, ETrue, EFalse );
         aToolbar->SetItemDimmed( EMPXPbvCmdNextListItem, ETrue, EFalse );
-        UpdateToolbar();
+        UpdateToolbarL();
         aToolbar->UpdateBackground();
         }
     }
@@ -873,7 +873,7 @@
 // Updates the middle toolbar button
 // ---------------------------------------------------------------------------
 //
-void CMPXPdSbPlaybackViewImp::UpdateToolbar()
+void CMPXPdSbPlaybackViewImp::UpdateToolbarL()
     {
     MPX_FUNC( "CMPXPdSbPlaybackViewImp::UpdateToolbar" );
 
--- a/mpxplugins/viewplugins/views/pdsbplaybackview/src/mpxpdsbplaybackviewlayout.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/pdsbplaybackview/src/mpxpdsbplaybackviewlayout.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -87,6 +87,7 @@
 void CMPXPdSbPlaybackViewLayout::ConstructL()
     {
     MPX_FUNC( "CMPXPdSbPlaybackViewLayout::ConstructL" );
+    InitCommonLayoutL();
     }
 
 //  End of File
--- a/mpxplugins/viewplugins/views/playbackview/src/mpxplaybackviewimp.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/playbackview/src/mpxplaybackviewimp.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -208,7 +208,7 @@
             {
             case TMPXPlaybackMessage::EStateChanged:
                 UpdateMiddleSoftKeyDisplayL();
-                UpdateToolbar();
+                UpdateToolbarL();
                 break;
 
             default:
@@ -228,7 +228,7 @@
     if (aResourceId == R_MPX_PBV_TOUCH_TOOLBAR)
         {
         // Put initializations here to take effect before toolbar is shown
-        UpdateToolbar();
+        UpdateToolbarL();
     	aToolbar->UpdateBackground();
        }
     }
--- a/mpxplugins/viewplugins/views/playbackview/src/mpxplaybackviewlayout.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/playbackview/src/mpxplaybackviewlayout.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -87,6 +87,7 @@
 void CMPXPlaybackViewLayout::ConstructL()
     {
     MPX_FUNC( "CMPXPlaybackViewLayout::ConstructL" );
+    InitCommonLayoutL();
     }
 
 //  End of File
--- a/mpxplugins/viewplugins/views/podcastplaybackview/inc/mpxpodcastplaybackviewimp.h	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/podcastplaybackview/inc/mpxpodcastplaybackviewimp.h	Tue Apr 27 16:34:37 2010 +0300
@@ -182,7 +182,7 @@
      * Updates the middle (play/pause) toolbar control key
      * icon based on playback state
      */
-    void UpdateToolbar();
+    void UpdateToolbarL();
 
 private:    // data
 
--- a/mpxplugins/viewplugins/views/podcastplaybackview/src/mpxpodcastplaybackviewimp.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/podcastplaybackview/src/mpxpodcastplaybackviewimp.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -447,7 +447,7 @@
     if (aResourceId == R_MPX_PBV_TOUCH_TOOLBAR)
         {
         // Put initializations here to take effect before toolbar is shown
-        UpdateToolbar();
+        UpdateToolbarL();
         aToolbar->UpdateBackground();
        }
     }
@@ -501,7 +501,7 @@
             {
             case TMPXPlaybackMessage::EStateChanged:
                 UpdateMiddleSoftKeyDisplayL();
-                UpdateToolbar();
+                UpdateToolbarL();
                 break;
 
             default:
@@ -515,7 +515,7 @@
 // Updates the middle toolbar button
 // ---------------------------------------------------------------------------
 //
-void CMPXPodcastPlaybackViewImp::UpdateToolbar()
+void CMPXPodcastPlaybackViewImp::UpdateToolbarL()
     {
     MPX_FUNC("CMPXPodcastPlaybackViewImp::UpdateToolbar");
 
--- a/mpxplugins/viewplugins/views/podcastplaybackview/src/mpxpodcastplaybackviewlayout.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/podcastplaybackview/src/mpxpodcastplaybackviewlayout.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -91,6 +91,7 @@
 void CMPXPodcastPlaybackViewLayout::ConstructL()
     {
     MPX_FUNC( "CMPXPodcastPlaybackViewLayout::ConstructL" );
+    InitCommonLayoutL();
     }
 
 // ---------------------------------------------------------------------------
--- a/mpxplugins/viewplugins/views/podcastview/inc/mpxpodcastcollectionviewimp.h	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/podcastview/inc/mpxpodcastcollectionviewimp.h	Tue Apr 27 16:34:37 2010 +0300
@@ -205,7 +205,7 @@
      *
      * @return ETrue if visible, EFalse otherwise
      */
-    TBool IsUpnpVisible();
+    TBool IsUpnpVisibleL();
 
     /**
      * Displays the available players in the Play via submenu
--- a/mpxplugins/viewplugins/views/podcastview/src/mpxpodcastcollectionviewcontainer.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/podcastview/src/mpxpodcastcollectionviewcontainer.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -112,13 +112,13 @@
         if ( index != KErrNotFound )
             {
             // Update the previous item as not playing anymore
-            iCommonContainer->DrawLbxItem( index );
+            iCommonContainer->DrawLbxItemL( index );
             }
         index = iLbxArray->GetPlaybackIndex();
         if ( index != KErrNotFound )
             {
             // Update new item as playing
-            iCommonContainer->DrawLbxItem( index );
+            iCommonContainer->DrawLbxItemL( index );
             }
         }
     }
--- a/mpxplugins/viewplugins/views/podcastview/src/mpxpodcastcollectionviewimp.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/podcastview/src/mpxpodcastcollectionviewimp.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -1241,7 +1241,7 @@
     {
     MPX_FUNC("CMPXPodcastCollectionViewImp::HandleDynInitUpnpL()");
 
-    if ( !IsUpnpVisible() )
+    if ( !IsUpnpVisibleL() )
         {
         GetCurrentPlayerDetails();
 
@@ -1314,9 +1314,9 @@
 // Checks if UPnP access point is defined
 // -----------------------------------------------------------------------------
 //
-TBool CMPXPodcastCollectionViewImp::IsUpnpVisible()
+TBool CMPXPodcastCollectionViewImp::IsUpnpVisibleL()
     {
-    MPX_FUNC( "CMPXPodcastCollectionViewImp::IsUpnpVisible" );
+    MPX_FUNC( "CMPXPodcastCollectionViewImp::IsUpnpVisibleL" );
     
     TBool returnValue = EFalse;
 #ifdef UPNP_INCLUDED
@@ -3854,7 +3854,7 @@
     if (!(aResourceId == R_AVKON_MENUPANE_MARKABLE_LIST && usbUnblockingStatus == EMPXUSBUnblockingPSStatusActive))
         {
         // Custom handling of menu pane for markable lists
-        iContainer->Common()->HandleMarkableListDynInitMenuPane(
+        iContainer->Common()->HandleMarkableListDynInitMenuPaneL(
             aResourceId,
             aMenuPane );
         }
--- a/mpxplugins/viewplugins/views/upnpplaybackdialog/src/mpxupnpplaybackdialog.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/upnpplaybackdialog/src/mpxupnpplaybackdialog.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -317,7 +317,7 @@
 
     if ( GetUPnPPlaybackDialogCustomControl() && !iSwitchingView )
         {
-        UpdatePlaybackState( iPlaybackState );
+        UpdatePlaybackStateL( iPlaybackState );
         UpdateTrackInfoL( iMedia );
         UpdateTrackPlaybackPositionL( iPosition, iDuration );
         UpdateTrackPosInPlaylistL();
@@ -434,11 +434,11 @@
 // Update current playback state.
 // ---------------------------------------------------------------------------
 //
-void CMPXUPnPPlaybackDialog::UpdatePlaybackState(
+void CMPXUPnPPlaybackDialog::UpdatePlaybackStateL(
     TMPXPlaybackState aPlaybackState )
     {
-    MPX_FUNC( "CMPXUPnPPlaybackDialog::UpdatePlaybackState()" );
-    MPX_DEBUG2("CMPXUPnPPlaybackDialog::UpdatePlaybackState(%d): Entering", aPlaybackState);
+    MPX_FUNC( "CMPXUPnPPlaybackDialog::UpdatePlaybackStateL()" );
+    MPX_DEBUG2("CMPXUPnPPlaybackDialog::UpdatePlaybackStateL(%d): Entering", aPlaybackState);
 
     if ( GetUPnPPlaybackDialogCustomControl() && !iSwitchingView )
         {
@@ -486,7 +486,7 @@
             }
 
         GetUPnPPlaybackDialogCustomControl()->UpdateButtons( aPlaybackState );
-        UpdateToolbar();
+        UpdateToolbarL();
         }
     else
         {
@@ -1116,7 +1116,7 @@
         }
     else
         {
-        UpdatePlaybackState( aState );
+        UpdatePlaybackStateL( aState );
 
         switch ( aState )
             {
@@ -1338,7 +1338,7 @@
     MPX_FUNC( "CMPXUPnPPlaybackDialog::HandleAllTracksInvalidL()" );
 
     iPlaybackUtility->CommandL( EPbCmdStop );
-    UpdatePlaybackState( EPbStateStopped );
+    UpdatePlaybackStateL( EPbStateStopped );
 
     // Do not display error if view is not active
     if ( GetUPnPPlaybackDialogCustomControl() )
@@ -1920,7 +1920,7 @@
         {
         delete iMedia;
         iMedia = NULL;
-        UpdatePlaybackState( iPlaybackState );
+        UpdatePlaybackStateL( iPlaybackState );
         UpdateTrackInfoL( iMedia );
         }
     else if ( iMedia == NULL )
@@ -1935,7 +1935,7 @@
                 if ( playlist->Count() > 0 )
                     {
                     RequestMediaL();
-                    UpdatePlaybackState( iPlaybackState );
+                    UpdatePlaybackStateL( iPlaybackState );
                     }
                 else
                     {
@@ -2144,37 +2144,56 @@
         {
         case EPbCmdSetVolume:
             {
-    		TMPXPlaybackState playerState( iPlaybackUtility->StateL() );
-            if ( iAvkonAppUi->IsForeground() || playerState == EPbStatePlaying )
-                {
-				if ( aData != iCurrentVolume )
-					{
-					SetVolume( aData );
-					}
-				// popup volume control even if volume didn't change
-				HandlePopupL( EPbCmdSetVolume );
-				}
-            break;
+                    MPX_TRAPD( err,
+                    TMPXPlaybackState playerState( iPlaybackUtility->StateL() );
+                    if ( iAvkonAppUi->IsForeground() || playerState == EPbStatePlaying )
+                        {
+                        if ( aData != iCurrentVolume )
+                            {
+                            SetVolumeL( aData );
+                            }
+                        // popup volume control even if volume didn't change
+                        HandlePopupL( EPbCmdSetVolume );
+                        }
+                    );
+                    if( err != KErrNone )
+                    	{
+                        MPX_DEBUG2( "CMPXUPnPPlaybackDialog::HandleMediaKeyCommand EPbCmdSetVolume leave err%d", err ); 
+                    	}
+                    break;
             }
         case EPbCmdMuteVolume:
-            {
-    		TMPXPlaybackState playerState( iPlaybackUtility->StateL() );
-            if ( iAvkonAppUi->IsForeground() || playerState == EPbStatePlaying )
-                {
-				MuteVolume();
-				HandlePopupL( EPbCmdMuteVolume );
-				}
-            break;
+                    {
+                    MPX_TRAPD( err, 
+                    TMPXPlaybackState playerState( iPlaybackUtility->StateL() );
+                    if ( iAvkonAppUi->IsForeground() || playerState == EPbStatePlaying )
+                        {
+                        MuteVolumeL();
+                        HandlePopupL( EPbCmdMuteVolume );
+                        }
+                    );
+                    if( err != KErrNone )
+                    	{
+                        MPX_DEBUG2( "CMPXUPnPPlaybackDialog::HandleMediaKeyCommand EPbCmdMuteVolume leave err%d", err ); 
+                    	}
+                    break;
             }
         case EPbCmdUnMuteVolume:
-            {
-    		TMPXPlaybackState playerState( iPlaybackUtility->StateL() );
-            if ( iAvkonAppUi->IsForeground() || playerState == EPbStatePlaying )
-                {
-				UnMuteVolume();
-				HandlePopupL( EPbCmdUnMuteVolume );
-				}
-            break;
+                    {
+                    MPX_TRAPD( err,
+                    TMPXPlaybackState playerState( iPlaybackUtility->StateL() );
+                    if ( iAvkonAppUi->IsForeground() || playerState == EPbStatePlaying )
+                        {
+                        UnMuteVolumeL();
+                        HandlePopupL( EPbCmdUnMuteVolume );
+                        }
+                    );
+                    if( err != KErrNone )
+                     	{
+                        MPX_DEBUG2( "CMPXUPnPPlaybackDialog::HandleMediaKeyCommand EPbCmdUnMuteVolume leave err%d", err ); 
+                     	}
+
+                    break;
             }
         default:
             {
@@ -2197,14 +2216,14 @@
                      playerState == EPbStateSeekingBackward )
                     {
                     MPX_DEBUG2( "CMPXUPnPPlaybackDialog::HandleCustomCommand not foreground, sending command %d to HandleMediaKeyCommandL", aCommand );
-                    TRAP_IGNORE( DoHandleMediaKeyCommandL( aCommand ) );
-                    }
-                else if ( aCommand == EPbCmdPlay || aCommand == EPbCmdPlayPause )
-                    {
+                            TRAP_IGNORE( DoHandleMediaKeyCommandL( aCommand ) );
+                            }
+                        else if ( aCommand == EPbCmdPlay || aCommand == EPbCmdPlayPause )
+                            {
                     MPX_DEBUG2( "CMPXUPnPPlaybackDialog::HandleCustomCommand not foreground, active idle foreground, sending command %d to HandleMediaKeyCommandL", aCommand );
-                    // not foreground, play without loading playback view
-                    TRAP_IGNORE( DoHandleMediaKeyCommandL( aCommand ) );
-                    }
+                            // not foreground, play without loading playback view
+                            TRAP_IGNORE( DoHandleMediaKeyCommandL( aCommand ) );
+                            }
                 else
                     {
                     MPX_DEBUG2( "CMPXUPnPPlaybackDialog::HandleCustomCommand not foreground, inactive state, command %d ignored", aCommand );
@@ -2411,7 +2430,7 @@
 // CMPXUPnPPlaybackDialog::SetVolume
 // -----------------------------------------------------------------------------
 //
-void CMPXUPnPPlaybackDialog::SetVolume( const TInt aVolume )
+void CMPXUPnPPlaybackDialog::SetVolumeL( const TInt aVolume )
     {
     CMPXCommand* cmd( CMPXCommand::NewL() );
     CleanupStack::PushL( cmd );
@@ -2428,7 +2447,7 @@
 // CMPXUPnPPlaybackDialog::MuteVolume
 // -----------------------------------------------------------------------------
 //
-void CMPXUPnPPlaybackDialog::MuteVolume()
+void CMPXUPnPPlaybackDialog::MuteVolumeL()
     {
     CMPXCommand* cmd( CMPXCommand::NewL() );
     CleanupStack::PushL( cmd );
@@ -2444,7 +2463,7 @@
 // CMPXUPnPPlaybackDialog::UnMuteVolume
 // -----------------------------------------------------------------------------
 //
-void CMPXUPnPPlaybackDialog::UnMuteVolume()
+void CMPXUPnPPlaybackDialog::UnMuteVolumeL()
     {
     CMPXCommand* cmd( CMPXCommand::NewL() );
     CleanupStack::PushL( cmd );
@@ -2460,7 +2479,7 @@
 // Updates the middle toolbar button
 // ---------------------------------------------------------------------------
 //
-void CMPXUPnPPlaybackDialog::UpdateToolbar()
+void CMPXUPnPPlaybackDialog::UpdateToolbarL()
     {
     if ( AknLayoutUtils::PenEnabled() )
         {
@@ -2547,7 +2566,7 @@
     if ( toolbar == aToolbar )
         {
         // Put initializations here to take effect before toolbar is shown
-        UpdateToolbar();
+        UpdateToolbarL();
         aToolbar->UpdateBackground();
        }
     }
--- a/mpxplugins/viewplugins/views/upnpplaybackdialog/src/mpxupnpplaybackdialoglayout.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/upnpplaybackdialog/src/mpxupnpplaybackdialoglayout.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -94,6 +94,7 @@
 void CMPXUPnPPlaybackDialogLayout::ConstructL()
     {
     MPX_FUNC( "CMPXUPnPPlaybackDialogLayout::ConstructL" );
+    InitCommonLayoutL();
     }
 
 // ---------------------------------------------------------------------------
--- a/mpxplugins/viewplugins/views/upnpplaybackview/src/mpxupnpplaybackviewimp.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/upnpplaybackview/src/mpxupnpplaybackviewimp.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:  Implementation of Upnp Playback view
-*  Version     : %version: e003sa33#35.1.3.1.5 % << Don't touch! Updated by Synergy at check-out.
+*  Version     : %version: e003sa33#35.1.3.1.6 % << Don't touch! Updated by Synergy at check-out.
 *
 */
 
@@ -263,7 +263,7 @@
                 {
 		        MPX_DEBUG1( "HandlePlaybackMessageL - EStateChanged" );
                 UpdateMiddleSoftKeyDisplayL();
-                UpdateToolbar();
+                UpdateToolbarL();
                 break;
                 }
             default:
@@ -774,7 +774,7 @@
     if ( aResourceId == R_MPX_PBV_TOUCH_TOOLBAR )
         {
         // Put initializations here to take effect before toolbar is shown
-        UpdateToolbar();
+        UpdateToolbarL();
         aToolbar->UpdateBackground();
         }
     }
--- a/mpxplugins/viewplugins/views/upnpplaybackview/src/mpxupnpplaybackviewlayout.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/upnpplaybackview/src/mpxupnpplaybackviewlayout.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -97,6 +97,7 @@
     {
     MPX_FUNC( "CMPXUPnPPlaybackViewLayout::ConstructL" );
     iPodcastAlbumArt = EFalse;
+    InitCommonLayoutL();
     }
 
 // ---------------------------------------------------------------------------
--- a/mpxplugins/viewplugins/views/waitnotedialog/inc/mpxscanningdialog.h	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/waitnotedialog/inc/mpxscanningdialog.h	Tue Apr 27 16:34:37 2010 +0300
@@ -97,6 +97,14 @@
      * Helper function used inside DoHandleCollectionMessageL
      */
     inline TInt GetTrackCountL(TInt aDrive,TInt aColDbId, TInt aColTable);
+    static TInt AsyncCallHarvesterEventL( TAny* aSelf );
+private:
+    enum TAsyncEvent
+    	{
+    	ECmdIdle,
+    	ECmdScan,
+    	ECmdCancleScan   	
+    	};
     
 private: // data
     MMPXHarvesterUtility*  iHarvesterUtil;
@@ -115,6 +123,9 @@
      * EFalse when CollectionDB has no change
      */
     TBool                  isCollectionDBChanged;
+    CAsyncCallBack*        iAsyncCallBack; //owned
+    TAsyncEvent            iAsyncEvent;
+    TBool                  iCancelScan;
     };
 
 
--- a/mpxplugins/viewplugins/views/waitnotedialog/src/mpxscanningdialog.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/waitnotedialog/src/mpxscanningdialog.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -54,6 +54,8 @@
     iTotalNewTracks = 0;
     iInitialCount = 0;
     isCollectionDBChanged = EFalse;
+    iAsyncEvent = ECmdIdle;
+
     }
 
 
@@ -63,8 +65,13 @@
 //
 void CMPXScanningWaitDialog::ConstructL()
     {
-    iHarvesterUtil = CMPXHarvesterFactory::NewL();
+	 MPX_DEBUG1("CMPXScanningWaitDialog::ConstructL <---");
     BaseConstructL();
+
+	TCallBack callback( CMPXScanningWaitDialog::AsyncCallHarvesterEventL, this );
+	iAsyncCallBack = new (ELeave) CAsyncCallBack( CActive::EPriorityHigh );
+	iAsyncCallBack->Set( callback );
+    MPX_DEBUG1("CMPXScanningWaitDialog::ConstructL --->");
     }
 
 
@@ -93,6 +100,9 @@
         {
         iHarvesterUtil->Close();
         }
+    iHarvesterUtil = NULL;
+    delete iAsyncCallBack;
+    iAsyncCallBack = NULL;
     }
 
 // ---------------------------------------------------------------------------
@@ -136,8 +146,14 @@
         }
         
     // Start the scanning in harvester
-    iHarvesterUtil->ScanL();
-    iScanningError = KErrNone;
+    // Just to be faster, lets just create a small async callback and then
+    // call ScanL   
+    if( !iAsyncCallBack->IsActive() )
+    	{
+		iAsyncEvent = ECmdScan;
+		iCancelScan = EFalse;
+		iAsyncCallBack->CallBack();
+    	}
     }
 
 // ---------------------------------------------------------------------------
@@ -154,16 +170,19 @@
     HBufC* text = NULL;
     if( aButtonId == EAknSoftkeyCancel )
         {
-        iScanningError = KErrCancel;
-        // If harvester crashed,..... restart it.
-        MPX_TRAPD( err, iHarvesterUtil->CancelScanL() );
-        if( err != KErrNone )
-            {
-            iHarvesterUtil->Close();
-            iHarvesterUtil = NULL;
-            iHarvesterUtil = CMPXHarvesterFactory::NewL(); 
-            }
-        
+		// cancel scan in harvester
+		// Just to be faster, lets just create a small async callback and then
+		// call CancelScanL   
+		if( !iAsyncCallBack->IsActive() )
+			{
+			iAsyncEvent = ECmdCancleScan;
+			iAsyncCallBack->CallBack();
+			}      
+		else
+			{
+		    iCancelScan = ETrue;
+			}
+
         // When stop refreshing library, prompt a process waiting dialog.
         // Inform user to wait for the updating library.
         HBufC* waitText = StringLoader::LoadLC( R_MPX_UPDATING_LIBRARY_TXT );  
@@ -272,7 +291,10 @@
 void CMPXScanningWaitDialog::HandleDatabaseCorruptionL()
     {
     // Cleanup Harvester
-    iHarvesterUtil->RecreateDatabasesL();
+	if( iHarvesterUtil != NULL )
+		{
+	    iHarvesterUtil->RecreateDatabasesL();
+		}
     }
 
 // ---------------------------------------------------------------------------
@@ -283,6 +305,7 @@
     const CMPXMessage& aMessage )
     {
     MPX_FUNC( "CMPXScanningWaitDialog::DoHandleCollectionMessageL" );
+    
     TMPXMessageId id( aMessage.ValueTObjectL<TMPXMessageId>( KMPXMessageGeneralId ) );
     if ( KMPXMessageGeneral == id )
         {
@@ -488,5 +511,46 @@
 
     return count;
     }
+// ---------------------------------------------------------------------------
+// async callback 
+// ---------------------------------------------------------------------------
+//
+TInt CMPXScanningWaitDialog::AsyncCallHarvesterEventL( TAny* aSelf )
+    {
+	MPX_DEBUG1("CMPXScanningWaitDialog::CallHarvesterScanL <---");
+	CMPXScanningWaitDialog* self = static_cast<CMPXScanningWaitDialog*>( aSelf );
+	if( self->iHarvesterUtil == NULL )
+		{
+	    self->iHarvesterUtil = CMPXHarvesterFactory::NewL();
+		}
+	if( self->iAsyncEvent == ECmdScan )
+		{
+	    if( !self->iCancelScan )
+	    	{
+		    self->iHarvesterUtil->ScanL();
+		    self->iScanningError = KErrNone;
+	    	}
+	    else
+	    	{
+	        self->iCancelScan = EFalse;
+	    	}
+		}
+	
+	if( self->iAsyncEvent == ECmdCancleScan || self->iCancelScan )
+		{
+	    self->iScanningError = KErrCancel; 
+        // If harvester crashed,..... restart it.
+		MPX_TRAPD( err, self->iHarvesterUtil->CancelScanL() );
+		if( err != KErrNone )
+			{
+		    self->iHarvesterUtil->Close();
+		    self->iHarvesterUtil = NULL;
+		    self->iHarvesterUtil = CMPXHarvesterFactory::NewL(); 
+			}
+		}
+	self->iAsyncEvent = ECmdIdle;
+    MPX_DEBUG1("CMPXScanningWaitDialog::CallHarvesterScanL --->");
+    return KErrNone;
+    }
 // END OF FILE
 
--- a/mpxplugins/viewplugins/views/waitnotedialog/src/mpxwaitnotedialog.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/viewplugins/views/waitnotedialog/src/mpxwaitnotedialog.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -493,7 +493,7 @@
 
     iProcessWaitDialog = new ( ELeave ) CAknWaitDialog(
                                     ( CEikDialog** )&iProcessWaitDialog,
-                                    iVisDelayOff );
+                                    EFalse );
     
     iProcessWaitDialog->PrepareLC( aDlgRsc );
     iProcessWaitDialog->SetTextL( aLabel );
@@ -512,3 +512,4 @@
         }
     }
 // End of file
+
--- a/musichomescreen_multiview/mcpmusicplayer/group/mcpmusicplayer.mmp	Wed Apr 14 15:54:18 2010 +0300
+++ b/musichomescreen_multiview/mcpmusicplayer/group/mcpmusicplayer.mmp	Tue Apr 27 16:34:37 2010 +0300
@@ -63,4 +63,6 @@
 LIBRARY                 aknskins.lib
 LIBRARY                 aknicon.lib
 LIBRARY                 mpxcollectionutility.lib
+LIBRARY                 mpxharvesterutility.lib
+
 //  End of File
--- a/musichomescreen_multiview/mcpmusicplayer/inc/mcpmusicplayer.h	Wed Apr 14 15:54:18 2010 +0300
+++ b/musichomescreen_multiview/mcpmusicplayer/inc/mcpmusicplayer.h	Tue Apr 27 16:34:37 2010 +0300
@@ -24,6 +24,7 @@
 #include <mcpplugin.h>
 #include <mcppluginobserver.h>
 #include <mpxcollectionobserver.h>
+#include <mpxharvesterutilityobserver.h>
 #include "aiplayerpluginengineobserver.h"
 #include "filemonitorobserver.h"
 #include "applicationmonitorobserver.h"
@@ -37,6 +38,7 @@
 class CPNSMonitor;
 class RResourceFile;
 class MMPXCollectionUtility;
+class MMPXHarvesterUtility;
 
 /**
  *  Music Player MCP plugin.
@@ -387,6 +389,11 @@
      */
     MMPXCollectionUtility* iCollectionUtility;
 
+    /**
+     * harvester utility
+     */
+    MMPXHarvesterUtility* iHarvester;
+    
     CPeriodic* iMusicPlayerOpeningTimer;
     };
 
--- a/musichomescreen_multiview/mcpmusicplayer/src/mcpmusicplayer.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/musichomescreen_multiview/mcpmusicplayer/src/mcpmusicplayer.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -33,7 +33,7 @@
 #include <mpxcollectionutility.h>
 #include <mpxcollectionframeworkdefs.h>
 #include <AknTaskList.h>
-
+#include <mpxharvesterutility.h>
 
 
 #include "cpglobals.h" //to be moved to domain API
@@ -171,6 +171,7 @@
         iArtBitmapMask = NULL;
         }
     iCollectionUtility = MMPXCollectionUtility::NewL( this, KMcModeDefault );
+    iHarvester = CMPXHarvesterFactory::NewL();
     iMusicPlayerOpeningTimer = CPeriodic::NewL( CActive::EPriorityLow );
     MPX_DEBUG1("CMCPMusicPlayer::ConstructL --->");
     }
@@ -212,6 +213,10 @@
     	{
     	iCollectionUtility->Close();
     	}
+    if ( iHarvester )
+        {
+        iHarvester->Close();
+        }
     delete iMusicPlayerOpeningTimer;
     MPX_DEBUG1("CMCPMusicPlayer::~CMCPMusicPlayer --->");
     }
--- a/musichomescreen_multiview/musiccontentpublisher/src/musiccontentpublisher.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/musichomescreen_multiview/musiccontentpublisher/src/musiccontentpublisher.cpp	Tue Apr 27 16:34:37 2010 +0300
@@ -402,9 +402,14 @@
     MPX_FUNC("CMusicContentPublisher::DoPublishModifiedL");
     if (iCPSInterface && iInstanceId )
         {
-        CLiwMap * datamap = iPublishingDataMap.GetModifiedLC();
-        // Must re-publish all actions even if only one of them has changed,
-        // otherwise non-modified actions won't work any more
+        // Must re-publish all data and actions even if only one of them has changed,
+        // otherwise non-modified data might go missing        
+        CLiwMap * datamap = NULL;
+        if ( iPublishingDataMap.IsModified() )
+            {
+            datamap = iPublishingDataMap.GetAllLC();
+            }
+
         CLiwMap * actionmap = NULL;
         if ( iPublishingActionMap.IsModified() )
             {
--- a/musicplayer_plat/mpx_music_player_app_api/inc/mpxconstants.h	Wed Apr 14 15:54:18 2010 +0300
+++ b/musicplayer_plat/mpx_music_player_app_api/inc/mpxconstants.h	Tue Apr 27 16:34:37 2010 +0300
@@ -93,6 +93,10 @@
 // Error code to indicate that playback not allowed during video call
 const TInt KMPXErrorVideoCall       = -40002;
 
+// Error code to indicate expired DRM rights
+const TInt KMPXErrorExpiredRights       = -40003;
+
+
 #endif  // MPXCONSTANTS_H   
             
 // End of File