Re-merge fix for bug 1961 RCL_3 PDK_3.0.0
authorWilliam Roberts <williamr@symbian.org>
Fri, 28 May 2010 13:15:37 +0100
branchRCL_3
changeset 31 1e2709dc536f
parent 30 6f9f6e99a23e (diff)
parent 29 d3550a9452ab (current diff)
child 46 242e1793c79a
Re-merge fix for bug 1961
--- a/mmappcomponents/collectionhelper/src/mpxcollectioncachedhelper.cpp	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/collectionhelper/src/mpxcollectioncachedhelper.cpp	Fri May 28 13:15:37 2010 +0100
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:  Extended collection helper with an internal caching array
-*  Version     : %version: da1mmcf#27.1.12.1.1 % 
+*  Version     : %version: da1mmcf#27.1.12.1.2 % 
 *
 */
 
@@ -30,6 +30,10 @@
 #include <mpxcollectioncommanddefs.h>
 #include <mpxmediamtpdefs.h>
 
+#include <e32property.h>    // for RProperty
+#include <UsbWatcherInternalPSKeys.h>
+#include <usbpersonalityids.h>
+
 #include <mpxcollectionutility.h>
 #include <mpxharvesterutility.h>
 
@@ -153,11 +157,21 @@
     MPX_FUNC("CMPXCollectionCachedHelper::::AddL");    
     // Commit when we have cached more than a set amount
     //
-    if( iCache->Count() >= KCacheCount)
-        {
+    
+    TInt cacheCount = KCacheCount;
+    TInt usbStatus;
+    RProperty::Get( KPSUidUsbWatcher, KUsbWatcherSelectedPersonality, usbStatus );
+    
+    // if MTP is not connected via USB, disable caching mechanism and flush immediately
+    // in case UI is not blocked and need to reflect the change in real time
+    // this logic is hardly invoked during MTP, because ::FindAllL (which flush) is always called before AddL
+    if ((usbStatus != KUsbPersonalityIdMTP) && (usbStatus != KUsbPersonalityIdPCSuiteMTP))
+        cacheCount = 1;            
+    
+    if( iCache->Count() >= cacheCount)
         Commit();
-        }
-#ifdef ABSTRACTAUDIOALBUM_INCLUDED
+
+    #ifdef ABSTRACTAUDIOALBUM_INCLUDED
     TBool extract = ETrue;
     if( aMedia->IsSupported( KMPXMediaMTPSampleDataFlag ) )
         {
@@ -746,6 +760,14 @@
 #else  //RD_MPX_COLLECTION_CACHE
 
     MPX_DEBUG1("CMPXCollectionCachedHelper::GetL <--");
+    
+    TInt usbStatus;
+    RProperty::Get( KPSUidUsbWatcher, KUsbWatcherSelectedPersonality, usbStatus );
+    
+    // if MTP is not connected via USB, flush immediately
+    // in case UI is not blocked and need to reflect the change in real time
+    if ((usbStatus != KUsbPersonalityIdMTP) && (usbStatus != KUsbPersonalityIdPCSuiteMTP))
+        Commit();
 
 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
     if (aItemCat != EMPXSong && aItemCat != EMPXPlaylist && aItemCat != EMPXAbstractAlbum)
--- a/mmappcomponents/collectionhelper/src/mpxcollectionuihelperimp.cpp	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/collectionhelper/src/mpxcollectionuihelperimp.cpp	Fri May 28 13:15:37 2010 +0100
@@ -38,6 +38,7 @@
 #include <mpxcollectioncommanddefs.h>
 #include <UsbWatcherInternalPSKeys.h>
 #include <usbpersonalityids.h>
+#include <mtpprivatepskeys.h>
 
 #include "mpxcollectionuihelperobserver.h"
 #include "mpxcollectionuihelperimp.h"
@@ -1399,11 +1400,16 @@
         {
         TInt usbStatus;
         RProperty::Get(KPSUidUsbWatcher, KUsbWatcherSelectedPersonality, usbStatus);
-            
-        if ((usbStatus == KUsbPersonalityIdMTP) || (usbStatus == KUsbPersonalityIdPCSuiteMTP)
-                         || (usbStatus == KUsbPersonalityIdMS) )
+        
+        TInt mtpStatus = EMtpPSStatusUninitialized;
+        RProperty::Get( KMtpPSUid, KMtpPSStatus, mtpStatus);
+
+        MPX_DEBUG2("CMPXCollectionViewHgImp::ConstructL, mtpstatus = %d", mtpStatus);
+
+        if ( (mtpStatus != EMtpPSStatusUninitialized)
+                || (usbStatus == KUsbPersonalityIdMS) )
             {
-            MPX_DEBUG1("USB is active, Leave with KErrLocked");
+            MPX_DEBUG1("MTP/USB is active, Leave with KErrLocked");
             // need to call back even if it leaves here
             iHelperObserver = (MMPXCHelperObserver*)aCallback;
             CompleteTask( aTask, KErrLocked );
--- a/mmappcomponents/collectionhelper/src/mpxdeletehelper.cpp	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/collectionhelper/src/mpxdeletehelper.cpp	Fri May 28 13:15:37 2010 +0100
@@ -43,8 +43,7 @@
 #include <thumbnailmanager.h>
 #endif //RD_MPX_TNM_INTEGRATION
 // cenrep key need to be checked whether USB cable is connected in MTP/Combined Mode
-#include <UsbWatcherInternalPSKeys.h>
-#include <usbpersonalityids.h>
+#include <mtpprivatepskeys.h>
 #include <mpxcollectionuihelper.h>
 #include "mpxcollectionuihelperobserver.h"
 #include "mpxcollectionhelpercommon.h"
@@ -310,32 +309,16 @@
     {
     MPX_DEBUG3("CMPXDeleteHelper::RunL. [iMoreToDo %d] [iStatus %d]", iMoreToDo, iStatus.Int());
 
-    // cenrep key need to be checked whether USB cable is connected in MTP/Combined Mode
-    TUsbDeviceState deviceState = EUsbDeviceStateConfigured;
-    if ( !iUsbManConnected )
-        {
-        ConnectUsbMan();
-        }
-    
-    if ( iUsbManConnected )
+    TInt mtpStatus = EMtpPSStatusUninitialized;
+    RProperty::Get( KMtpPSUid, KMtpPSStatus, mtpStatus);
+        
+    MPX_DEBUG2("CMPXCollectionViewHgImp::ConstructL, mtpstatus = %d", mtpStatus);
+
+    if (mtpStatus != EMtpPSStatusUninitialized)
         {
-        if ( iUsbMan.GetDeviceState( deviceState ) != KErrNone )
-            {
-            deviceState = EUsbDeviceStateConfigured;
-            }
-        }
-    
-    if ( deviceState == EUsbDeviceStateAddress ||
-         deviceState == EUsbDeviceStateConfigured )
-        {
-        TInt usbStatus;
-        RProperty::Get(KPSUidUsbWatcher, KUsbWatcherSelectedPersonality, usbStatus);
-        if ((usbStatus == KUsbPersonalityIdMTP) || (usbStatus == KUsbPersonalityIdPCSuiteMTP))
-            {
-            MPX_DEBUG1("USB is active, Stop Delete");
-            CompleteDelete( KErrLocked );
-            return;
-            }
+        MPX_DEBUG1("MTP is active, Stop Delete");
+        CompleteDelete( KErrLocked );
+        return;
         }
     
     if (iMoreToDo && iStatus.Int() == KErrNone)
--- a/mmappcomponents/harvester/filehandler/src/mpxharvesterfilehandlerimp.cpp	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/harvester/filehandler/src/mpxharvesterfilehandlerimp.cpp	Fri May 28 13:15:37 2010 +0100
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:  Handles all file related activities
-*  Version     : %version: da1mmcf#72.1.14.2.4.1.4.1.2.1.6 % << Don't touch! Updated by Synergy at check-out.
+*  Version     : %version: da1mmcf#72.1.14.2.4.1.4.1.2.1.7 % << Don't touch! Updated by Synergy at check-out.
 *
 */
 
@@ -46,8 +46,7 @@
 #include <caf/caferr.h>
 #include <caf/content.h>
 #include <caf/data.h>
-#include <UsbWatcherInternalPSKeys.h>
-#include <usbpersonalityids.h>
+#include <mtpprivatepskeys.h>
 
 #include "mpxharvesterfilehandlerimp.h"
 #include "mpxfolderscanner.h"
@@ -299,14 +298,16 @@
         }
     iCollectionUtil = MMPXCollectionUtility::NewL( NULL, KMusicPlayerUid );
     
-    // cenrep key need to be checked whether USB cable is connected in MTP/Combined Mode
+    // cenrep key need to be checked whether MTP is connected
     // to prevent refresh
-    TInt usbStatus;
-    RProperty::Get(KPSUidUsbWatcher, KUsbWatcherSelectedPersonality, usbStatus);
-       
-    if ((usbStatus == KUsbPersonalityIdMTP) || (usbStatus == KUsbPersonalityIdPCSuiteMTP))
+    TInt mtpStatus = EMtpPSStatusUninitialized;
+    RProperty::Get( KMtpPSUid, KMtpPSStatus, mtpStatus);
+        
+    MPX_DEBUG2("CMPXCollectionViewHgImp::ConstructL, mtpstatus = %d", mtpStatus);
+
+    if (mtpStatus != EMtpPSStatusUninitialized)
         {
-        MPX_DEBUG1("USB is active, Leave with KErrLocked");
+        MPX_DEBUG1("MTP is active, Leave with KErrLocked");
         // need to call back even if it leaves here
         iCollectionUtil->Collection().NotifyL( EMcMsgRefreshEnd, KErrLocked );
         //User::Leave(KErrLocked);
--- a/mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp	Fri May 28 13:15:37 2010 +0100
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:  Extracts metadata from a file
-*  Version     : %version: da1mmcf#38.1.4.2.6.1.12 % << Don't touch! Updated by Synergy at check-out.
+*  Version     : %version: da1mmcf#38.1.4.2.6.1.13 % << Don't touch! Updated by Synergy at check-out.
 *
 */
 
@@ -147,6 +147,10 @@
     delete iDrmMediaUtility;
     delete iTaskTimer;
     iFile.Close();
+    if ( iMedia != NULL )
+        {
+        delete iMedia;
+        }
 #ifdef RD_MPX_TNM_INTEGRATION
     delete iTNManager;
     if (iTNSyncWait && iTNSyncWait->IsStarted() )
@@ -212,6 +216,7 @@
         }
     
     aNewProperty = iMedia;
+    iMedia = NULL;  // ownership transferred.
     CleanUp();
     }
 
@@ -811,14 +816,16 @@
 void CMPXMetadataExtractor::DoCreateMediaL()
     {
     MPX_FUNC("CMPXMetadataExtractor::DoCreateMediaL()");
+    MPX_ASSERT( iMedia == NULL );
     RArray<TInt> contentIDs;
+    CleanupClosePushL( contentIDs );
     contentIDs.AppendL( KMPXMediaIdGeneral );
     contentIDs.AppendL( KMPXMediaIdAudio );
     contentIDs.AppendL( KMPXMediaIdMusic );
     contentIDs.AppendL( KMPXMediaIdDrm );
     contentIDs.AppendL( KMPXMediaIdMTP );
     iMedia = CMPXMedia::NewL( contentIDs.Array() );
-    contentIDs.Close();
+    CleanupStack::PopAndDestroy( &contentIDs );
 
     // CMPXMedia default types
     iMedia->SetTObjectValueL<TMPXGeneralType>( KMPXMediaGeneralType,
@@ -1014,7 +1021,10 @@
     {
     MPX_FUNC("CMPXMetadataExtractor::HandleTaskTimerExpired()");
     
-    iTaskTimer->Cancel();
+    if ( iTaskTimer && iTaskTimer->IsActive() )
+        {
+        iTaskTimer->Cancel();
+        }
     // execute task at index 0
     MPX_TRAPD( error, ExecuteTaskL() );
     if ( error || iCancelled )
@@ -1046,6 +1056,7 @@
         if ( iObs && !iCancelled )
             {
             iObs->HandleCreateMediaComplete( iMedia, error );
+            iMedia = NULL;  // ownership transferred.
             }
         
         CleanUp();
--- a/mmappcomponents/harvester/server/group/mpxharvester.mmp	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/harvester/server/group/mpxharvester.mmp	Fri May 28 13:15:37 2010 +0100
@@ -43,7 +43,7 @@
 // System events
 SOURCE                  mpxfsformatmonitor.cpp
 SOURCE                  mpxmediaremovalmonitor.cpp
-SOURCE                  mpxusbeventhandler.cpp
+SOURCE                  mpxconnectioneventhandler.cpp
 
 USERINCLUDE             ../inc
 USERINCLUDE             ../../inc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappcomponents/harvester/server/inc/mpxconnectioneventhandler.h	Fri May 28 13:15:37 2010 +0100
@@ -0,0 +1,133 @@
+/*
+* 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:  Monitors USB events
+*
+*/
+
+
+#ifndef CMPXCONNECTIONEVENTHANDLER_H
+#define CMPXCONNECTIONEVENTHANDLER_H
+
+#include <usbman.h>
+#include <mpxpskeyobserver.h>
+#include "mpxsystemeventobserver.h"
+
+class CMPXPSKeyWatcher;
+
+/**
+ *  USB Monitoring class
+ *
+ *  @lib mpxharvesterserver.exe
+ *  @since S60 3.0
+ */
+NONSHARABLE_CLASS( CMPXConnectionEventHandler ) : public CActive,
+                                           public MMPXPSKeyObserver
+    {
+public:
+
+    /**
+    * Two-phase constructor
+    * @param aObserver observer to the event handler
+    */
+    static CMPXConnectionEventHandler* NewL( MMPXSystemEventObserver& aObserver );
+
+    /**
+    * Two-phase constructor
+    * @param aObserver observer to the event handler
+    */
+    static CMPXConnectionEventHandler* NewLC( MMPXSystemEventObserver& aObserver );
+
+    /**
+    * Virtual destructor
+    */
+    virtual ~CMPXConnectionEventHandler();
+
+public:
+
+    /**
+    * Polls for the current monitor status
+    * If an event is happening, it will callback the observer of the event
+    */
+    void PollStatus();
+
+protected: // From Base Class
+
+    /**
+    * From CActive
+    */
+    void RunL();
+    void DoCancel();
+
+    /**
+    * From MMPXPSKeyObserver
+    */
+    void HandlePSEvent( TUid aUid, TInt aKey );
+
+private: // New Methods
+
+    /**
+    * Handle the PS Key event
+    * @param aUid UID of the key
+    * @param aKey ID of the key
+    */
+    void DoHandlePSEventL( TUid aUid, TInt aKey );
+
+    void DoMSStartEventL();
+    void DoMTPStartEventL();
+    void DoMTPNotActiveEventL();
+    
+    /**
+     * Connect to usbman.
+     * If error, default iDeviceState to EUsbDeviceStateConfigured so this would not
+     * block usb event mode change.
+     */
+    void ConnectUsbMan();
+
+private:
+
+    /**
+    *  C++ constructor
+    */
+    CMPXConnectionEventHandler( MMPXSystemEventObserver& aObserver );
+
+    /*
+    * Second phased constructor
+    */
+    void ConstructL();
+
+private: // data
+    
+    enum TMPXConnectionState
+        {
+        EMPXConnectionNone,
+        EMPXConnectionMassStorage,
+        EMPXConnectionMTPIdle,
+        EMPXConnectionMTPActive
+        };
+
+    CMPXPSKeyWatcher*  iUSBKeyWatcher;  // PS key watcher for USB PS key
+    CMPXPSKeyWatcher*  iMTPKeyWatcher; // PS key watcher for MTP PS key
+
+    /*
+    * Observer interface to callback to an observer
+    */
+    MMPXSystemEventObserver& iObserver;
+    TInt iState;
+    
+    RUsb            iUsbMan;
+    TUsbDeviceState iDeviceState;
+    TBool           iUsbManConnected;
+    };
+
+#endif // CMPXCONNECTIONEVENTHANDLER_H
--- a/mmappcomponents/harvester/server/inc/mpxharvesterengine.h	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/harvester/server/inc/mpxharvesterengine.h	Fri May 28 13:15:37 2010 +0100
@@ -31,7 +31,7 @@
 class CMPXHarvesterFileHandler;
 class CMPXFsFormatMonitor;
 class CMPXMediaRemovalMonitor;
-class CMPXUsbEventHandler;
+class CMPXConnectionEventHandler;
 class CMPXMedia;
 class CMPXActiveTaskQueue;
 class CMPXPlaylistEngine;
@@ -304,7 +304,7 @@
     // Move to RPointerArrays of monitors in the future
     CMPXFsFormatMonitor*      iFormatMonitor;
     CMPXMediaRemovalMonitor*  iMediaRemovalMonitor;
-    CMPXUsbEventHandler*      iUSBMonitor;
+    CMPXConnectionEventHandler*      iConnectionMonitor;
 
     // Internal task queue for async operations
     CMPXActiveTaskQueue*      iTaskQueue;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappcomponents/harvester/server/src/mpxconnectioneventhandler.cpp	Fri May 28 13:15:37 2010 +0100
@@ -0,0 +1,315 @@
+/*
+* 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:  Monitors for USB events
+*
+*/
+
+
+#include <e32base.h>
+#include <f32file.h>
+#include <e32property.h>
+#ifdef RD_MULTIPLE_DRIVE
+#include <driveinfo.h>
+#endif //RD_MULTIPLE_DRIVE
+#include <mpxpskeywatcher.h>
+#include <coreapplicationuisdomainpskeys.h>
+#include <UsbWatcherInternalPSKeys.h>
+#include <usbpersonalityids.h>
+#include <MtpPrivatePSKeys.h>
+#include <mpxlog.h>
+#include "mpxconnectioneventhandler.h"
+
+// CONSTANTS
+const TUint KUsbAllStates = 0xFFFFFFFF;
+
+// ---------------------------------------------------------------------------
+// Default Constructor
+// ---------------------------------------------------------------------------
+//
+CMPXConnectionEventHandler::CMPXConnectionEventHandler( MMPXSystemEventObserver& aObserver ) :
+                                          CActive( EPriorityStandard ),
+                                          iObserver( aObserver ),
+                                          iState ( EMPXConnectionNone ),
+                                          iUsbManConnected( EFalse )
+                                          
+                                          
+    {
+    CActiveScheduler::Add( this );
+    }
+
+
+// ---------------------------------------------------------------------------
+// 2nd Phase Constructor
+// ---------------------------------------------------------------------------
+//
+void CMPXConnectionEventHandler::ConstructL()
+    {
+    MPX_DEBUG1(_L("CMPXConnectionEventHandler::ConstructL <---"));
+    iUSBKeyWatcher = CMPXPSKeyWatcher::NewL( KPSUidUsbWatcher,
+                                            KUsbWatcherSelectedPersonality,
+                                            this );
+
+    //for checking MTP status key whether a client has started
+    iMTPKeyWatcher = CMPXPSKeyWatcher::NewL( KMtpPSUid, 
+                                             KMtpPSStatus,
+                                             this );
+
+    // Connect to usbman
+    ConnectUsbMan();
+    MPX_DEBUG1(_L("CMPXConnectionEventHandler::ConstructL --->"));
+    }
+
+
+// ---------------------------------------------------------------------------
+// Two Phased Constructor
+// ---------------------------------------------------------------------------
+//
+CMPXConnectionEventHandler* CMPXConnectionEventHandler::NewL
+                                        ( MMPXSystemEventObserver& aObserver )
+    {
+    CMPXConnectionEventHandler* self = CMPXConnectionEventHandler::NewLC( aObserver );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Two Phased Constructor
+// ---------------------------------------------------------------------------
+//
+CMPXConnectionEventHandler* CMPXConnectionEventHandler::NewLC
+                                        ( MMPXSystemEventObserver& aObserver )
+
+    {
+    CMPXConnectionEventHandler* self = new( ELeave ) CMPXConnectionEventHandler( aObserver);
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CMPXConnectionEventHandler::~CMPXConnectionEventHandler()
+    {
+    Cancel();
+    if ( iUsbManConnected )
+        {
+        iUsbMan.Close();
+        }
+    delete iUSBKeyWatcher;
+    delete iMTPKeyWatcher;
+    }
+
+// ---------------------------------------------------------------------------
+// Poll for any ongoing USB / MTP event
+// ---------------------------------------------------------------------------
+//
+void CMPXConnectionEventHandler::PollStatus()
+    {
+    // only call back on connection state != EMPXConnectionNone
+    if (iState == EMPXConnectionMassStorage)
+        {
+        TRAP_IGNORE( DoMSStartEventL() );
+        }
+    else if (iState == EMPXConnectionMTPActive)
+        {
+        TRAP_IGNORE( DoMTPStartEventL() );
+        }
+    else if (iState == EMPXConnectionMTPIdle)
+        {
+        TRAP_IGNORE( DoMTPNotActiveEventL() );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Handle the PS key event
+// ---------------------------------------------------------------------------
+//
+void CMPXConnectionEventHandler::HandlePSEvent( TUid aUid, TInt aKey )
+    {
+    TRAP_IGNORE( DoHandlePSEventL(aUid,aKey) );
+    }
+
+// ---------------------------------------------------------------------------
+// Handle the PS key event
+// ---------------------------------------------------------------------------
+//
+void CMPXConnectionEventHandler::DoHandlePSEventL( TUid /*aUid*/, TInt /*aKey*/ )
+    {
+    MPX_FUNC("CMPXConnectionEventHandler::DoHandlePSEvent()");
+    if ( !iUsbManConnected )
+        {
+        ConnectUsbMan();
+        }
+    
+    // Handle the Key event
+    TInt usbStatus;
+    iUSBKeyWatcher->GetValue( usbStatus );
+    
+    TInt mtpStatus;
+    iMTPKeyWatcher->GetValue(mtpStatus);
+    
+    MPX_DEBUG3("CMPXConnectionEventHandler::DoHandlePSEventL, usbStatus = %d, mtpStatus = %d", usbStatus, mtpStatus);
+    MPX_DEBUG2("CMPXConnectionEventHandler::DoHandlePSEventL, iState = %d", iState);
+    MPX_DEBUG4("CMPXConnectionEventHandler::DoHandlePSEventL, iDeviceState = %d, EUsbDeviceStateAddress(%d), EUsbDeviceStateConfigured(%d)", iDeviceState, EUsbDeviceStateAddress, EUsbDeviceStateConfigured);
+    
+    RDebug::Print(_L("tpoon: CMPXConnectionEventHandler::DoHandlePSEventL, usbStatus = %d, mtpStatus = %d"), usbStatus, mtpStatus);
+    RDebug::Print(_L("tpoon: CMPXConnectionEventHandler::DoHandlePSEventL, iState = %d"), iState);
+    RDebug::Print(_L("tpoon: CMPXConnectionEventHandler::DoHandlePSEventL, iDeviceState = %d, EUsbDeviceStateAddress(%d), EUsbDeviceStateConfigured(%d)"), iDeviceState, EUsbDeviceStateAddress, EUsbDeviceStateConfigured);
+    
+    // events from lower level is not causing multiple callback on the same type
+    // usb is really only connected if went through Address or Configured state
+    if( (usbStatus == KUsbPersonalityIdMS) && (iDeviceState == EUsbDeviceStateAddress || iDeviceState == EUsbDeviceStateConfigured))
+        {
+        if ((iState == EMPXConnectionMTPIdle) || (iState == EMPXConnectionMTPActive))
+            {
+            MPX_DEBUG1("CMPXConnectionEventHandler::DoHandlePSEvent - MTP End");
+            RDebug::Print(_L("tpoon: MTP End"));
+            iObserver.HandleSystemEventL( EUSBMTPEndEvent, -1 );
+            iState = EMPXConnectionNone;
+            }
+        
+        if (iState != EMPXConnectionMassStorage)
+            {
+            DoMSStartEventL();
+            }
+        }
+    else if (iState == EMPXConnectionMassStorage)
+        {
+        if (usbStatus != KUsbPersonalityIdMS)
+            {
+            MPX_DEBUG1("CMPXConnectionEventHandler::DoHandlePSEvent - USB MassStorage End");
+            RDebug::Print(_L("tpoon: MS End"));
+            iObserver.HandleSystemEventL( EUSBMassStorageEndEvent, -1 );
+            iState = EMPXConnectionNone;
+            }
+        }
+    
+    // after MassStorage End, it is possible that MTP is still connected
+    if (iState != EMPXConnectionMassStorage)
+        {
+        if ((mtpStatus == EMtpPSStatusUninitialized) && (iState != EMPXConnectionNone))
+            {
+            MPX_DEBUG1("CMPXConnectionEventHandler::DoHandlePSEvent - MTP End");
+            RDebug::Print(_L("tpoon: MTP End"));
+            iObserver.HandleSystemEventL( EUSBMTPEndEvent, -1 );
+            iState = EMPXConnectionNone;
+            }
+        else if ((mtpStatus == EMtpPSStatusActive) && (iState != EMPXConnectionMTPActive)
+                && ((usbStatus == KUsbPersonalityIdMTP) || (usbStatus == KUsbPersonalityIdPCSuiteMTP))) // only trigger MusicPlayer fully block and RAM Drive if USB MTP/PCSuiteMTP is connected
+            {
+            DoMTPStartEventL();
+            }
+        else if ((mtpStatus == EMtpPSStatusReadyToSync) && (iState != EMPXConnectionMTPIdle) && (iState != EMPXConnectionMTPActive))
+            {
+            DoMTPNotActiveEventL();
+            }
+        }
+    }
+
+void CMPXConnectionEventHandler::DoMSStartEventL()
+    {
+    MPX_DEBUG1("CMPXConnectionEventHandler::DoMSStartEventL - USB MassStorage Start");
+    RDebug::Print(_L("tpoon: MS Start"));
+    iObserver.HandleSystemEventL( EUSBMassStorageStartEvent, -1 );
+    iState = EMPXConnectionMassStorage;
+    }
+
+void CMPXConnectionEventHandler::DoMTPStartEventL()
+    {
+    MPX_DEBUG1("CMPXConnectionEventHandler::DoMTPStartEventL - MTP Start");
+    RDebug::Print(_L("tpoon: MTP Start"));
+    iObserver.HandleSystemEventL( EUSBMTPStartEvent, -1 );
+    iState = EMPXConnectionMTPActive;
+    }
+
+void CMPXConnectionEventHandler::DoMTPNotActiveEventL()
+    {
+    MPX_DEBUG1("CMPXConnectionEventHandler::DoMTPNotActiveEventL - MTP Not Active");
+    RDebug::Print(_L("tpoon: MTP Not Active"));
+    iObserver.HandleSystemEventL( EUSBMTPNotActiveEvent, -1 );
+    iState = EMPXConnectionMTPIdle;
+    }
+
+// ---------------------------------------------------------------------------
+// CMPXConnectionEventHandler::RunL
+// ---------------------------------------------------------------------------
+//
+void CMPXConnectionEventHandler::RunL()
+    {
+    MPX_FUNC("CMPXConnectionEventHandler::RunL()");
+    TInt status( iStatus.Int() );
+    
+    MPX_DEBUG2("CMPXConnectionEventHandler::RunL status=%d", status );
+    if ( status != KErrCancel && status != KErrServerTerminated )
+        {
+        iUsbMan.DeviceStateNotification( KUsbAllStates, iDeviceState, iStatus );
+        SetActive();
+        }
+    
+    if ( status == KErrNone )
+        {
+        MPX_DEBUG2("CMPXConnectionEventHandler::RunL - DeviceState = %d", iDeviceState);
+        HandlePSEvent( TUid::Uid(0), 0 );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMPXConnectionEventHandler::DoCancel
+// ---------------------------------------------------------------------------
+//
+void CMPXConnectionEventHandler::DoCancel()
+    {
+    MPX_FUNC("CMPXConnectionEventHandler::DoCancel()");
+    if ( iUsbManConnected )
+        {
+        iUsbMan.DeviceStateNotificationCancel();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMPXConnectionEventHandler::ConnectUsbMan
+// If error, default iDeviceState to EUsbDeviceStateConfigured so this would not
+// block usb event mode change.
+// ---------------------------------------------------------------------------
+void CMPXConnectionEventHandler::ConnectUsbMan()
+    {
+    MPX_FUNC("CMPXConnectionEventHandler::ConnectUsbMan()");
+    if ( iUsbMan.Connect() == KErrNone )
+        {
+        iUsbManConnected = ETrue;
+        // get device state
+        TInt err = iUsbMan.GetDeviceState( iDeviceState );
+        if ( err )
+            {
+            iDeviceState = EUsbDeviceStateUndefined;
+            }
+        
+        // start active object
+        if ( !IsActive() )
+            {
+            iUsbMan.DeviceStateNotification( KUsbAllStates, iDeviceState, iStatus );
+            SetActive();
+            }
+        }
+    else
+        {
+        iDeviceState = EUsbDeviceStateConfigured;
+        }
+    }
+// END OF FILE
+
--- a/mmappcomponents/harvester/server/src/mpxharvesterengine.cpp	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/harvester/server/src/mpxharvesterengine.cpp	Fri May 28 13:15:37 2010 +0100
@@ -35,7 +35,7 @@
 #include "mpxharvesterengine.h"
 #include "mpxfsformatmonitor.h"
 #include "mpxmediaremovalmonitor.h"
-#include "mpxusbeventhandler.h"
+#include "mpxconnectioneventhandler.h"
 #include "mpxharvesterfilehandler.h"
 #include "mpxharvesterengineobserver.h"
 #include "mpxhvsmsg.h"
@@ -60,7 +60,7 @@
 
     delete iFormatMonitor;
     delete iMediaRemovalMonitor;
-    delete iUSBMonitor;
+    delete iConnectionMonitor;
 
     delete iFileHandler;
     iFsSession.Close();
@@ -101,8 +101,8 @@
     iMediaRemovalMonitor = CMPXMediaRemovalMonitor::NewL(
         removableDrive, iFsSession, *this );
 
-    // USB Event monitor
-    iUSBMonitor = CMPXUsbEventHandler::NewL( *this );
+    // Connection Event monitor
+    iConnectionMonitor = CMPXConnectionEventHandler::NewL( *this );
 
 
     // File handler to handle file related events
@@ -426,7 +426,7 @@
     // wont be able to open the db anyways.
     //
     iFormatMonitor->PollStatus();
-    iUSBMonitor->PollStatus();
+    iConnectionMonitor->PollStatus();
     }
 
 // ---------------------------------------------------------------------------
--- a/mmappcomponents/harvester/server/src/mpxusbeventhandler.cpp	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/harvester/server/src/mpxusbeventhandler.cpp	Fri May 28 13:15:37 2010 +0100
@@ -24,7 +24,7 @@
 #include <coreapplicationuisdomainpskeys.h>
 #include <UsbWatcherInternalPSKeys.h>
 #include <usbpersonalityids.h>
-#include <MtpPrivatePSKeys.h>
+#include <mtpprivatepskeys.h>
 #include <mpxlog.h>
 #include "mpxusbeventhandler.h"
 
--- a/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpaccesssingleton.h	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpaccesssingleton.h	Fri May 28 13:15:37 2010 +0100
@@ -53,6 +53,18 @@
      */
     IMPORT_C static void CloseSessionL();
     
+    /**
+     * Issue ActiveToIdle Status Change (ActiveObject)
+     * this function is to be called after an MTP operation is finish to change status from Active to Idle
+     * observer of the status might not get the notification if idle->active->idle happens in one synchronous operation 
+     */
+    IMPORT_C static void ActiveToIdleStatusChange();
+
+    /**
+     * Cancel Outstanding ActiveToIdle Status Change
+     */
+    IMPORT_C static void CancelActiveToIdleStatusChange();
+
 private:
     /*
      * get singleton instance, for internal use
@@ -73,8 +85,20 @@
      */
     ~CMmMtpDpAccessSingleton();
     
+    /**
+     * get DelayStatusChanger instance, internal use only
+     */
+    static CIdle* DelayStatusChanger();
+    
+    /**
+     * Perform actural ActiveToIdle Status Change after active object callback
+     */
+    static TInt DoActiveToIdleStatusChange(TAny* Any);
+    
 private:
     CMmMtpDpMetadataAccessWrapper* iWrapper;
+    
+    CIdle* iDelayStatusChanger;
 
     };
 
--- a/mmappcomponents/mmmtpdataprovider/inc/mmmtpdp_variant.hrh	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/mmmtpdataprovider/inc/mmmtpdp_variant.hrh	Fri May 28 13:15:37 2010 +0100
@@ -28,4 +28,7 @@
 // flag to enable support for non embedded album art, should be ON by default
 #define MMMTPDP_ABSTRACTAUDIOALBUM_SUPPORT
 
+// flag to enable reset of MTP PS Status flag at CloseSession
+#define MMMTPDP_RESET_STATUS_CLOSESESSION
+
 #endif // MMMTPDP_VARIANT_HRH
--- a/mmappcomponents/mmmtpdataprovider/inc/mmmtpdputility.h	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/mmmtpdataprovider/inc/mmmtpdputility.h	Fri May 28 13:15:37 2010 +0100
@@ -20,6 +20,7 @@
 #define MMMTPDPUTILITY_H
 
 #include <mtp/mtpprotocolconstants.h>
+#include <mtpprivatepskeys.h>
 
 #include "mmmtpdpfiledefs.h"
 
@@ -143,6 +144,34 @@
     * @return return DRM status code
     */
     IMPORT_C static TInt GetDrmStatus( const TDesC& aFullFileName );
+    
+    /**
+    * Set MTP PS Status
+    * @param aStatus, next TMtpPSStatus
+    *
+    * newly implemented function to as enabler
+    * to provide more state transition on application (MusicPlayer/MPX) during MTP by fully utilize the 3 PSStatus:
+    *
+    * EMtpPSStatusActive, == MTP operation related Media Files is performaning
+    * EMtpPSStatusUninitialized == MTP not in use
+    * EMtpPSStatusReadyToSync == MTP is connected, but no active operation related to Media Files
+    *
+    * this CAN enable 2 new behaviors:
+    * 1. MTP status monitor is extracted out from USB Event Observer in harvester
+    *    Harvester and Music player should be fully blocked if PS Status is EMtpPSStatusActive
+    *    Music Player would prevent refresh/delete/add on UI level if PS Status is EMtpPSStatusReadyToSync  
+    * 2. collectioncachedhelper to observed this status.
+    *    when the ps status changed from EMtpPSStatusActive to EMtpPSStatusReadyToSync, it starts timer.
+    *    and when it is reached, it flush all cache.
+    *    the timer is canceled when ps status is back to active.
+    */
+    IMPORT_C static void SetPSStatus( TMtpPSStatus aStatus );
+
+    /**
+    * Set MTP PS Status (actually)
+    * @param aStatus, next TMtpPSStatus
+    */
+    static void DoSetPSStatus( TMtpPSStatus aStatus );
 
     };
 
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/bwins/mmmtpdprequestprocessoru.def	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/bwins/mmmtpdprequestprocessoru.def	Fri May 28 13:15:37 2010 +0100
@@ -157,4 +157,7 @@
 	??1CGetObjectPropList@@UAE@XZ @ 156 NONAME ; CGetObjectPropList::~CGetObjectPropList(void)
 	?ServiceL@CGetObjectPropList@@MAEXXZ @ 157 NONAME ; void CGetObjectPropList::ServiceL(void)
 	??0CRenameObject@@IAE@AAVMMTPDataProviderFramework@@AAVCMmMtpDpMetadataAccessWrapper@@@Z @ 158 NONAME ; CRenameObject::CRenameObject(class MMTPDataProviderFramework &, class CMmMtpDpMetadataAccessWrapper &)
+	?ActiveToIdleStatusChange@CMmMtpDpAccessSingleton@@SAXXZ @ 159 NONAME ; void CMmMtpDpAccessSingleton::ActiveToIdleStatusChange(void)
+	?SetPSStatus@MmMtpDpUtility@@SAXW4TMtpPSStatus@@@Z @ 160 NONAME ; void MmMtpDpUtility::SetPSStatus(enum TMtpPSStatus)
+	?CancelActiveToIdleStatusChange@CMmMtpDpAccessSingleton@@SAXXZ @ 161 NONAME ; void CMmMtpDpAccessSingleton::CancelActiveToIdleStatusChange(void)
 
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/eabi/mmmtpdprequestprocessoru.def	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/eabi/mmmtpdprequestprocessoru.def	Fri May 28 13:15:37 2010 +0100
@@ -47,233 +47,236 @@
 	_ZN14CGetObjectInfoD0Ev @ 46 NONAME
 	_ZN14CGetObjectInfoD1Ev @ 47 NONAME
 	_ZN14CGetObjectInfoD2Ev @ 48 NONAME
-	_ZN14MmMtpDpUtility12GetDrmStatusERK7TDesC16 @ 49 NONAME
-	_ZN14MmMtpDpUtility18FormatFromFilenameERK7TDesC16 @ 50 NONAME
-	_ZN15CRequestUnknown4NewLER25MMTPDataProviderFrameworkR14MMTPConnection @ 51 NONAME
-	_ZN15CRequestUnknown8ServiceLEv @ 52 NONAME
-	_ZN15CRequestUnknownC1ER25MMTPDataProviderFrameworkR14MMTPConnection @ 53 NONAME
-	_ZN15CRequestUnknownC2ER25MMTPDataProviderFrameworkR14MMTPConnection @ 54 NONAME
-	_ZN15CRequestUnknownD0Ev @ 55 NONAME
-	_ZN15CRequestUnknownD1Ev @ 56 NONAME
-	_ZN15CRequestUnknownD2Ev @ 57 NONAME
-	_ZN17CGetPartialObject13CheckRequestLEv @ 58 NONAME
-	_ZN17CGetPartialObject22DoHandleResponsePhaseLEv @ 59 NONAME
-	_ZN17CGetPartialObject4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 60 NONAME
-	_ZN17CGetPartialObject8ServiceLEv @ 61 NONAME
-	_ZN17CGetPartialObjectC1ER25MMTPDataProviderFrameworkR14MMTPConnection @ 62 NONAME
-	_ZN17CGetPartialObjectC2ER25MMTPDataProviderFrameworkR14MMTPConnection @ 63 NONAME
-	_ZN17CGetPartialObjectD0Ev @ 64 NONAME
-	_ZN17CGetPartialObjectD1Ev @ 65 NONAME
-	_ZN17CGetPartialObjectD2Ev @ 66 NONAME
-	_ZN17CRequestProcessor12HandleEventLERK13TMTPTypeEvent @ 67 NONAME
-	_ZN17CRequestProcessor12ReceiveDataLER8MMTPType @ 68 NONAME
-	_ZN17CRequestProcessor13CheckRequestLEv @ 69 NONAME
-	_ZN17CRequestProcessor13SendResponseLE16TMTPResponseCodeiPm @ 70 NONAME
-	_ZN17CRequestProcessor13UsbDisconnectEv @ 71 NONAME
-	_ZN17CRequestProcessor14HandleRequestLERK15TMTPTypeRequest20TMTPTransactionPhase @ 72 NONAME
-	_ZN17CRequestProcessor18DoHandleRToIPhaseLEv @ 73 NONAME
-	_ZN17CRequestProcessor21DoHandleRequestPhaseLEv @ 74 NONAME
-	_ZN17CRequestProcessor22DoHandleDataIToRPhaseLEv @ 75 NONAME
-	_ZN17CRequestProcessor22DoHandleResponsePhaseLEv @ 76 NONAME
-	_ZN17CRequestProcessor24DoHandleCompletingPhaseLEv @ 77 NONAME
-	_ZN17CRequestProcessor4RunLEv @ 78 NONAME
-	_ZN17CRequestProcessor7ReleaseEv @ 79 NONAME
-	_ZN17CRequestProcessor8DoCancelEv @ 80 NONAME
-	_ZN17CRequestProcessor8RunErrorEi @ 81 NONAME
-	_ZN17CRequestProcessor9SendDataLERK8MMTPType @ 82 NONAME
-	_ZN17CRequestProcessor9SessionIdEv @ 83 NONAME
-	_ZN17CRequestProcessorC2ER25MMTPDataProviderFrameworkR14MMTPConnectioniPK22TMTPRequestElementInfo @ 84 NONAME
-	_ZN17CRequestProcessorD0Ev @ 85 NONAME
-	_ZN17CRequestProcessorD1Ev @ 86 NONAME
-	_ZN17CRequestProcessorD2Ev @ 87 NONAME
-	_ZN18CGetObjectPropDesc10ConstructLEv @ 88 NONAME
-	_ZN18CGetObjectPropDesc13CheckRequestLEv @ 89 NONAME
-	_ZN18CGetObjectPropDesc4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 90 NONAME
-	_ZN18CGetObjectPropDesc8ServiceLEv @ 91 NONAME
-	_ZN18CGetObjectPropDescC1ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 92 NONAME
-	_ZN18CGetObjectPropDescC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 93 NONAME
-	_ZN18CGetObjectPropDescD0Ev @ 94 NONAME
-	_ZN18CGetObjectPropDescD1Ev @ 95 NONAME
-	_ZN18CGetObjectPropDescD2Ev @ 96 NONAME
-	_ZN18CGetObjectPropList10ConstructLEv @ 97 NONAME
-	_ZN18CGetObjectPropList13CheckRequestLEv @ 98 NONAME
-	_ZN18CGetObjectPropList4RunLEv @ 99 NONAME
-	_ZN18CGetObjectPropList8DoCancelEv @ 100 NONAME
-	_ZN18CGetObjectPropList8RunErrorEi @ 101 NONAME
-	_ZN18CGetObjectPropList8ServiceLEv @ 102 NONAME
-	_ZN18CGetObjectPropListC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 103 NONAME
-	_ZN18CGetObjectPropListD0Ev @ 104 NONAME
-	_ZN18CGetObjectPropListD1Ev @ 105 NONAME
-	_ZN18CGetObjectPropListD2Ev @ 106 NONAME
-	_ZN18CSetObjectPropList13CheckRequestLEv @ 107 NONAME
-	_ZN18CSetObjectPropList22DoHandleResponsePhaseLEv @ 108 NONAME
-	_ZN18CSetObjectPropList4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 109 NONAME
-	_ZN18CSetObjectPropList4RunLEv @ 110 NONAME
-	_ZN18CSetObjectPropList8DoCancelEv @ 111 NONAME
-	_ZN18CSetObjectPropList8RunErrorEi @ 112 NONAME
-	_ZN18CSetObjectPropList8ServiceLEv @ 113 NONAME
-	_ZN18CSetObjectPropListD0Ev @ 114 NONAME
-	_ZN18CSetObjectPropListD1Ev @ 115 NONAME
-	_ZN18CSetObjectPropListD2Ev @ 116 NONAME
-	_ZN19CDescriptionUtility24NewRangeFormDescriptionLEtmmmi @ 117 NONAME
-	_ZN19CDescriptionUtilityC2Ev @ 118 NONAME
-	_ZN19CDescriptionUtilityD0Ev @ 119 NONAME
-	_ZN19CDescriptionUtilityD1Ev @ 120 NONAME
-	_ZN19CDescriptionUtilityD2Ev @ 121 NONAME
-	_ZN19CGetObjectPropValue13CheckRequestLEv @ 122 NONAME
-	_ZN19CGetObjectPropValue27ServiceMetaDataFromWrapperLEtR8MMTPTypeRK18CMTPObjectMetaData @ 123 NONAME
-	_ZN19CGetObjectPropValue8ServiceLEv @ 124 NONAME
-	_ZN19CGetObjectPropValueC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 125 NONAME
-	_ZN19CGetObjectPropValueD0Ev @ 126 NONAME
-	_ZN19CGetObjectPropValueD1Ev @ 127 NONAME
-	_ZN19CGetObjectPropValueD2Ev @ 128 NONAME
-	_ZN19CSetObjectPropValue13CheckRequestLEv @ 129 NONAME
-	_ZN19CSetObjectPropValue22DoHandleResponsePhaseLEv @ 130 NONAME
-	_ZN19CSetObjectPropValue25ServiceMetaDataToWrapperLEtR8MMTPTypeRK18CMTPObjectMetaData @ 131 NONAME
-	_ZN19CSetObjectPropValue8ServiceLEv @ 132 NONAME
-	_ZN19CSetObjectPropValueC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 133 NONAME
-	_ZN19CSetObjectPropValueD0Ev @ 134 NONAME
-	_ZN19CSetObjectPropValueD1Ev @ 135 NONAME
-	_ZN19CSetObjectPropValueD2Ev @ 136 NONAME
-	_ZN20CGetObjectReferences4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 137 NONAME
-	_ZN20CGetObjectReferencesD0Ev @ 138 NONAME
-	_ZN20CGetObjectReferencesD1Ev @ 139 NONAME
-	_ZN20CGetObjectReferencesD2Ev @ 140 NONAME
-	_ZN20CSetObjectReferences22DoHandleResponsePhaseLEv @ 141 NONAME
-	_ZN20CSetObjectReferences22DoSetObjectReferencesLERK18CMTPObjectMetaData @ 142 NONAME
-	_ZN20CSetObjectReferences4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 143 NONAME
-	_ZN20CSetObjectReferences8ServiceLEv @ 144 NONAME
-	_ZN20CSetObjectReferencesC1ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 145 NONAME
-	_ZN20CSetObjectReferencesC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 146 NONAME
-	_ZN20CSetObjectReferencesD0Ev @ 147 NONAME
-	_ZN20CSetObjectReferencesD1Ev @ 148 NONAME
-	_ZN20CSetObjectReferencesD2Ev @ 149 NONAME
-	_ZN22CGetFormatCapabilities10ConstructLEv @ 150 NONAME
-	_ZN22CGetFormatCapabilities13CheckRequestLEv @ 151 NONAME
-	_ZN22CGetFormatCapabilities4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 152 NONAME
-	_ZN22CGetFormatCapabilities8ServiceLEv @ 153 NONAME
-	_ZN22CGetFormatCapabilitiesC1ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 154 NONAME
-	_ZN22CGetFormatCapabilitiesC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 155 NONAME
-	_ZN22CGetFormatCapabilitiesD0Ev @ 156 NONAME
-	_ZN22CGetFormatCapabilitiesD1Ev @ 157 NONAME
-	_ZN22CGetFormatCapabilitiesD2Ev @ 158 NONAME
-	_ZN23CMmMtpDpAccessSingleton12OpenSessionLEv @ 159 NONAME
-	_ZN23CMmMtpDpAccessSingleton13CloseSessionLEv @ 160 NONAME
-	_ZN23CMmMtpDpAccessSingleton17GetAccessWrapperLEv @ 161 NONAME
-	_ZN23CMmMtpDpAccessSingleton7CreateLER25MMTPDataProviderFramework @ 162 NONAME
-	_ZN23CMmMtpDpAccessSingleton7ReleaseEv @ 163 NONAME
-	_ZN23CPropertySettingUtility20SetMetaDataToWrapperER14MMmMtpDpConfigtR8MMTPTypeRK18CMTPObjectMetaData @ 164 NONAME
-	_ZN23CPropertySettingUtilityC2Ev @ 165 NONAME
-	_ZN23CPropertySettingUtilityD0Ev @ 166 NONAME
-	_ZN23CPropertySettingUtilityD1Ev @ 167 NONAME
-	_ZN23CPropertySettingUtilityD2Ev @ 168 NONAME
-	_ZN24CGetObjectPropsSupported4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 169 NONAME
-	_ZN24CGetObjectPropsSupported8ServiceLEv @ 170 NONAME
-	_ZN24CGetObjectPropsSupportedD0Ev @ 171 NONAME
-	_ZN24CGetObjectPropsSupportedD1Ev @ 172 NONAME
-	_ZN24CGetObjectPropsSupportedD2Ev @ 173 NONAME
-	_ZN26CGetInterdependentPropDesc10ConstructLEv @ 174 NONAME
-	_ZN26CGetInterdependentPropDesc13CheckRequestLEv @ 175 NONAME
-	_ZN26CGetInterdependentPropDesc4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 176 NONAME
-	_ZN26CGetInterdependentPropDesc8ServiceLEv @ 177 NONAME
-	_ZN26CGetInterdependentPropDescC1ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 178 NONAME
-	_ZN26CGetInterdependentPropDescC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 179 NONAME
-	_ZN26CGetInterdependentPropDescD0Ev @ 180 NONAME
-	_ZN26CGetInterdependentPropDescD1Ev @ 181 NONAME
-	_ZN26CGetInterdependentPropDescD2Ev @ 182 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper10AddObjectLERK18CMTPObjectMetaData @ 183 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper13AddDummyFileLERK7TDesC16 @ 184 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper13DeleteObjectLERK18CMTPObjectMetaData @ 185 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper13RenameObjectLERK18CMTPObjectMetaDataRK7TDesC16 @ 186 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper13SetReferenceLERK18CMTPObjectMetaDataR12CDesC16Array @ 187 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper15CreateDummyFileERK7TDesC16 @ 188 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper15DeleteDummyFileERK7TDesC16 @ 189 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper16CleanupDatabaseLEv @ 190 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper16GetAllReferenceLEP9CMPXMediaR12CDesC16Array @ 191 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper19GetModifiedContentLERK7TDesC16RiR12CDesC16Array @ 192 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper20GetAllAbstractMediaLERK7TDesC16PP14CMPXMediaArray19TMPXGeneralCategory @ 193 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper21GetAbstractMediaNameLEP9CMPXMedia19TMPXGeneralCategory @ 194 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper22UpdateMusicCollectionLERK7TDesC16 @ 195 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper23GetObjectMetadataValueLEtR8MMTPTypeRK18CMTPObjectMetaData @ 196 NONAME
-	_ZNK11CSendObject12HasDataphaseEv @ 197 NONAME
-	_ZNK11CSendObject5MatchERK15TMTPTypeRequestR14MMTPConnection @ 198 NONAME
-	_ZNK15CRequestUnknown5MatchERK15TMTPTypeRequestR14MMTPConnection @ 199 NONAME
-	_ZNK17CRequestProcessor10ConnectionEv @ 200 NONAME
-	_ZNK17CRequestProcessor12HasDataphaseEv @ 201 NONAME
-	_ZNK17CRequestProcessor5MatchERK13TMTPTypeEventR14MMTPConnection @ 202 NONAME
-	_ZNK17CRequestProcessor5MatchERK15TMTPTypeRequestR14MMTPConnection @ 203 NONAME
-	_ZNK17CRequestProcessor7RequestEv @ 204 NONAME
-	_ZNK18CSetObjectPropList12HasDataphaseEv @ 205 NONAME
-	_ZNK19CSetObjectPropValue12HasDataphaseEv @ 206 NONAME
-	_ZNK20CSetObjectReferences12HasDataphaseEv @ 207 NONAME
-	_ZTI10CGetObject @ 208 NONAME
-	_ZTI11CCopyObject @ 209 NONAME
-	_ZTI11CMoveObject @ 210 NONAME
-	_ZTI11CSendObject @ 211 NONAME
-	_ZTI13CDeleteObject @ 212 NONAME
-	_ZTI13CRenameObject @ 213 NONAME
-	_ZTI14CGetObjectInfo @ 214 NONAME
-	_ZTI15CRequestChecker @ 215 NONAME
-	_ZTI15CRequestUnknown @ 216 NONAME
-	_ZTI15TMTPTypeFlatBuf @ 217 NONAME
-	_ZTI17CGetPartialObject @ 218 NONAME
-	_ZTI17CRequestProcessor @ 219 NONAME
-	_ZTI18CGetObjectPropDesc @ 220 NONAME
-	_ZTI18CGetObjectPropList @ 221 NONAME
-	_ZTI18CHXMetaDataUtility @ 222 NONAME
-	_ZTI18CSetObjectPropList @ 223 NONAME
-	_ZTI19CDescriptionUtility @ 224 NONAME
-	_ZTI19CGetObjectPropValue @ 225 NONAME
-	_ZTI19CSetObjectPropValue @ 226 NONAME
-	_ZTI20CGetObjectReferences @ 227 NONAME
-	_ZTI20CSetObjectReferences @ 228 NONAME
-	_ZTI22CGetFormatCapabilities @ 229 NONAME
-	_ZTI23CMmMtpDpAccessSingleton @ 230 NONAME
-	_ZTI23CPropertySettingUtility @ 231 NONAME
-	_ZTI24CGetObjectPropsSupported @ 232 NONAME
-	_ZTI25CMmMtpDpMetadataMpxAccess @ 233 NONAME
-	_ZTI26CGetInterdependentPropDesc @ 234 NONAME
-	_ZTI27CMmMtpDpMetadataVideoAccess @ 235 NONAME
-	_ZTI29CMmMtpDpMetadataAccessWrapper @ 236 NONAME
-	_ZTV10CGetObject @ 237 NONAME
-	_ZTV11CCopyObject @ 238 NONAME
-	_ZTV11CMoveObject @ 239 NONAME
-	_ZTV11CSendObject @ 240 NONAME
-	_ZTV13CDeleteObject @ 241 NONAME
-	_ZTV13CRenameObject @ 242 NONAME
-	_ZTV14CGetObjectInfo @ 243 NONAME
-	_ZTV15CRequestChecker @ 244 NONAME
-	_ZTV15CRequestUnknown @ 245 NONAME
-	_ZTV15TMTPTypeFlatBuf @ 246 NONAME
-	_ZTV17CGetPartialObject @ 247 NONAME
-	_ZTV17CRequestProcessor @ 248 NONAME
-	_ZTV18CGetObjectPropDesc @ 249 NONAME
-	_ZTV18CGetObjectPropList @ 250 NONAME
-	_ZTV18CHXMetaDataUtility @ 251 NONAME
-	_ZTV18CSetObjectPropList @ 252 NONAME
-	_ZTV19CDescriptionUtility @ 253 NONAME
-	_ZTV19CGetObjectPropValue @ 254 NONAME
-	_ZTV19CSetObjectPropValue @ 255 NONAME
-	_ZTV20CGetObjectReferences @ 256 NONAME
-	_ZTV20CSetObjectReferences @ 257 NONAME
-	_ZTV22CGetFormatCapabilities @ 258 NONAME
-	_ZTV23CMmMtpDpAccessSingleton @ 259 NONAME
-	_ZTV23CPropertySettingUtility @ 260 NONAME
-	_ZTV24CGetObjectPropsSupported @ 261 NONAME
-	_ZTV25CMmMtpDpMetadataMpxAccess @ 262 NONAME
-	_ZTV26CGetInterdependentPropDesc @ 263 NONAME
-	_ZTV27CMmMtpDpMetadataVideoAccess @ 264 NONAME
-	_ZTV29CMmMtpDpMetadataAccessWrapper @ 265 NONAME
-	_ZThn28_N11CSendObject13UsbDisconnectEv @ 266 NONAME
-	_ZThn28_N17CRequestProcessor12HandleEventLERK13TMTPTypeEvent @ 267 NONAME
-	_ZThn28_N17CRequestProcessor13UsbDisconnectEv @ 268 NONAME
-	_ZThn28_N17CRequestProcessor14HandleRequestLERK15TMTPTypeRequest20TMTPTransactionPhase @ 269 NONAME
-	_ZThn28_N17CRequestProcessor7ReleaseEv @ 270 NONAME
-	_ZThn28_N17CRequestProcessor9SessionIdEv @ 271 NONAME
-	_ZThn28_NK11CSendObject5MatchERK15TMTPTypeRequestR14MMTPConnection @ 272 NONAME
-	_ZThn28_NK15CRequestUnknown5MatchERK15TMTPTypeRequestR14MMTPConnection @ 273 NONAME
-	_ZThn28_NK17CRequestProcessor10ConnectionEv @ 274 NONAME
-	_ZThn28_NK17CRequestProcessor5MatchERK13TMTPTypeEventR14MMTPConnection @ 275 NONAME
-	_ZThn28_NK17CRequestProcessor5MatchERK15TMTPTypeRequestR14MMTPConnection @ 276 NONAME
-	_ZThn28_NK17CRequestProcessor7RequestEv @ 277 NONAME
+	_ZN14MmMtpDpUtility11SetPSStatusE12TMtpPSStatus @ 49 NONAME
+	_ZN14MmMtpDpUtility12GetDrmStatusERK7TDesC16 @ 50 NONAME
+	_ZN14MmMtpDpUtility18FormatFromFilenameERK7TDesC16 @ 51 NONAME
+	_ZN15CRequestUnknown4NewLER25MMTPDataProviderFrameworkR14MMTPConnection @ 52 NONAME
+	_ZN15CRequestUnknown8ServiceLEv @ 53 NONAME
+	_ZN15CRequestUnknownC1ER25MMTPDataProviderFrameworkR14MMTPConnection @ 54 NONAME
+	_ZN15CRequestUnknownC2ER25MMTPDataProviderFrameworkR14MMTPConnection @ 55 NONAME
+	_ZN15CRequestUnknownD0Ev @ 56 NONAME
+	_ZN15CRequestUnknownD1Ev @ 57 NONAME
+	_ZN15CRequestUnknownD2Ev @ 58 NONAME
+	_ZN17CGetPartialObject13CheckRequestLEv @ 59 NONAME
+	_ZN17CGetPartialObject22DoHandleResponsePhaseLEv @ 60 NONAME
+	_ZN17CGetPartialObject4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 61 NONAME
+	_ZN17CGetPartialObject8ServiceLEv @ 62 NONAME
+	_ZN17CGetPartialObjectC1ER25MMTPDataProviderFrameworkR14MMTPConnection @ 63 NONAME
+	_ZN17CGetPartialObjectC2ER25MMTPDataProviderFrameworkR14MMTPConnection @ 64 NONAME
+	_ZN17CGetPartialObjectD0Ev @ 65 NONAME
+	_ZN17CGetPartialObjectD1Ev @ 66 NONAME
+	_ZN17CGetPartialObjectD2Ev @ 67 NONAME
+	_ZN17CRequestProcessor12HandleEventLERK13TMTPTypeEvent @ 68 NONAME
+	_ZN17CRequestProcessor12ReceiveDataLER8MMTPType @ 69 NONAME
+	_ZN17CRequestProcessor13CheckRequestLEv @ 70 NONAME
+	_ZN17CRequestProcessor13SendResponseLE16TMTPResponseCodeiPm @ 71 NONAME
+	_ZN17CRequestProcessor13UsbDisconnectEv @ 72 NONAME
+	_ZN17CRequestProcessor14HandleRequestLERK15TMTPTypeRequest20TMTPTransactionPhase @ 73 NONAME
+	_ZN17CRequestProcessor18DoHandleRToIPhaseLEv @ 74 NONAME
+	_ZN17CRequestProcessor21DoHandleRequestPhaseLEv @ 75 NONAME
+	_ZN17CRequestProcessor22DoHandleDataIToRPhaseLEv @ 76 NONAME
+	_ZN17CRequestProcessor22DoHandleResponsePhaseLEv @ 77 NONAME
+	_ZN17CRequestProcessor24DoHandleCompletingPhaseLEv @ 78 NONAME
+	_ZN17CRequestProcessor4RunLEv @ 79 NONAME
+	_ZN17CRequestProcessor7ReleaseEv @ 80 NONAME
+	_ZN17CRequestProcessor8DoCancelEv @ 81 NONAME
+	_ZN17CRequestProcessor8RunErrorEi @ 82 NONAME
+	_ZN17CRequestProcessor9SendDataLERK8MMTPType @ 83 NONAME
+	_ZN17CRequestProcessor9SessionIdEv @ 84 NONAME
+	_ZN17CRequestProcessorC2ER25MMTPDataProviderFrameworkR14MMTPConnectioniPK22TMTPRequestElementInfo @ 85 NONAME
+	_ZN17CRequestProcessorD0Ev @ 86 NONAME
+	_ZN17CRequestProcessorD1Ev @ 87 NONAME
+	_ZN17CRequestProcessorD2Ev @ 88 NONAME
+	_ZN18CGetObjectPropDesc10ConstructLEv @ 89 NONAME
+	_ZN18CGetObjectPropDesc13CheckRequestLEv @ 90 NONAME
+	_ZN18CGetObjectPropDesc4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 91 NONAME
+	_ZN18CGetObjectPropDesc8ServiceLEv @ 92 NONAME
+	_ZN18CGetObjectPropDescC1ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 93 NONAME
+	_ZN18CGetObjectPropDescC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 94 NONAME
+	_ZN18CGetObjectPropDescD0Ev @ 95 NONAME
+	_ZN18CGetObjectPropDescD1Ev @ 96 NONAME
+	_ZN18CGetObjectPropDescD2Ev @ 97 NONAME
+	_ZN18CGetObjectPropList10ConstructLEv @ 98 NONAME
+	_ZN18CGetObjectPropList13CheckRequestLEv @ 99 NONAME
+	_ZN18CGetObjectPropList4RunLEv @ 100 NONAME
+	_ZN18CGetObjectPropList8DoCancelEv @ 101 NONAME
+	_ZN18CGetObjectPropList8RunErrorEi @ 102 NONAME
+	_ZN18CGetObjectPropList8ServiceLEv @ 103 NONAME
+	_ZN18CGetObjectPropListC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 104 NONAME
+	_ZN18CGetObjectPropListD0Ev @ 105 NONAME
+	_ZN18CGetObjectPropListD1Ev @ 106 NONAME
+	_ZN18CGetObjectPropListD2Ev @ 107 NONAME
+	_ZN18CSetObjectPropList13CheckRequestLEv @ 108 NONAME
+	_ZN18CSetObjectPropList22DoHandleResponsePhaseLEv @ 109 NONAME
+	_ZN18CSetObjectPropList4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 110 NONAME
+	_ZN18CSetObjectPropList4RunLEv @ 111 NONAME
+	_ZN18CSetObjectPropList8DoCancelEv @ 112 NONAME
+	_ZN18CSetObjectPropList8RunErrorEi @ 113 NONAME
+	_ZN18CSetObjectPropList8ServiceLEv @ 114 NONAME
+	_ZN18CSetObjectPropListD0Ev @ 115 NONAME
+	_ZN18CSetObjectPropListD1Ev @ 116 NONAME
+	_ZN18CSetObjectPropListD2Ev @ 117 NONAME
+	_ZN19CDescriptionUtility24NewRangeFormDescriptionLEtmmmi @ 118 NONAME
+	_ZN19CDescriptionUtilityC2Ev @ 119 NONAME
+	_ZN19CDescriptionUtilityD0Ev @ 120 NONAME
+	_ZN19CDescriptionUtilityD1Ev @ 121 NONAME
+	_ZN19CDescriptionUtilityD2Ev @ 122 NONAME
+	_ZN19CGetObjectPropValue13CheckRequestLEv @ 123 NONAME
+	_ZN19CGetObjectPropValue27ServiceMetaDataFromWrapperLEtR8MMTPTypeRK18CMTPObjectMetaData @ 124 NONAME
+	_ZN19CGetObjectPropValue8ServiceLEv @ 125 NONAME
+	_ZN19CGetObjectPropValueC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 126 NONAME
+	_ZN19CGetObjectPropValueD0Ev @ 127 NONAME
+	_ZN19CGetObjectPropValueD1Ev @ 128 NONAME
+	_ZN19CGetObjectPropValueD2Ev @ 129 NONAME
+	_ZN19CSetObjectPropValue13CheckRequestLEv @ 130 NONAME
+	_ZN19CSetObjectPropValue22DoHandleResponsePhaseLEv @ 131 NONAME
+	_ZN19CSetObjectPropValue25ServiceMetaDataToWrapperLEtR8MMTPTypeRK18CMTPObjectMetaData @ 132 NONAME
+	_ZN19CSetObjectPropValue8ServiceLEv @ 133 NONAME
+	_ZN19CSetObjectPropValueC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 134 NONAME
+	_ZN19CSetObjectPropValueD0Ev @ 135 NONAME
+	_ZN19CSetObjectPropValueD1Ev @ 136 NONAME
+	_ZN19CSetObjectPropValueD2Ev @ 137 NONAME
+	_ZN20CGetObjectReferences4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 138 NONAME
+	_ZN20CGetObjectReferencesD0Ev @ 139 NONAME
+	_ZN20CGetObjectReferencesD1Ev @ 140 NONAME
+	_ZN20CGetObjectReferencesD2Ev @ 141 NONAME
+	_ZN20CSetObjectReferences22DoHandleResponsePhaseLEv @ 142 NONAME
+	_ZN20CSetObjectReferences22DoSetObjectReferencesLERK18CMTPObjectMetaData @ 143 NONAME
+	_ZN20CSetObjectReferences4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 144 NONAME
+	_ZN20CSetObjectReferences8ServiceLEv @ 145 NONAME
+	_ZN20CSetObjectReferencesC1ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 146 NONAME
+	_ZN20CSetObjectReferencesC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 147 NONAME
+	_ZN20CSetObjectReferencesD0Ev @ 148 NONAME
+	_ZN20CSetObjectReferencesD1Ev @ 149 NONAME
+	_ZN20CSetObjectReferencesD2Ev @ 150 NONAME
+	_ZN22CGetFormatCapabilities10ConstructLEv @ 151 NONAME
+	_ZN22CGetFormatCapabilities13CheckRequestLEv @ 152 NONAME
+	_ZN22CGetFormatCapabilities4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 153 NONAME
+	_ZN22CGetFormatCapabilities8ServiceLEv @ 154 NONAME
+	_ZN22CGetFormatCapabilitiesC1ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 155 NONAME
+	_ZN22CGetFormatCapabilitiesC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 156 NONAME
+	_ZN22CGetFormatCapabilitiesD0Ev @ 157 NONAME
+	_ZN22CGetFormatCapabilitiesD1Ev @ 158 NONAME
+	_ZN22CGetFormatCapabilitiesD2Ev @ 159 NONAME
+	_ZN23CMmMtpDpAccessSingleton12OpenSessionLEv @ 160 NONAME
+	_ZN23CMmMtpDpAccessSingleton13CloseSessionLEv @ 161 NONAME
+	_ZN23CMmMtpDpAccessSingleton17GetAccessWrapperLEv @ 162 NONAME
+	_ZN23CMmMtpDpAccessSingleton24ActiveToIdleStatusChangeEv @ 163 NONAME
+	_ZN23CMmMtpDpAccessSingleton30CancelActiveToIdleStatusChangeEv @ 164 NONAME
+	_ZN23CMmMtpDpAccessSingleton7CreateLER25MMTPDataProviderFramework @ 165 NONAME
+	_ZN23CMmMtpDpAccessSingleton7ReleaseEv @ 166 NONAME
+	_ZN23CPropertySettingUtility20SetMetaDataToWrapperER14MMmMtpDpConfigtR8MMTPTypeRK18CMTPObjectMetaData @ 167 NONAME
+	_ZN23CPropertySettingUtilityC2Ev @ 168 NONAME
+	_ZN23CPropertySettingUtilityD0Ev @ 169 NONAME
+	_ZN23CPropertySettingUtilityD1Ev @ 170 NONAME
+	_ZN23CPropertySettingUtilityD2Ev @ 171 NONAME
+	_ZN24CGetObjectPropsSupported4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 172 NONAME
+	_ZN24CGetObjectPropsSupported8ServiceLEv @ 173 NONAME
+	_ZN24CGetObjectPropsSupportedD0Ev @ 174 NONAME
+	_ZN24CGetObjectPropsSupportedD1Ev @ 175 NONAME
+	_ZN24CGetObjectPropsSupportedD2Ev @ 176 NONAME
+	_ZN26CGetInterdependentPropDesc10ConstructLEv @ 177 NONAME
+	_ZN26CGetInterdependentPropDesc13CheckRequestLEv @ 178 NONAME
+	_ZN26CGetInterdependentPropDesc4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 179 NONAME
+	_ZN26CGetInterdependentPropDesc8ServiceLEv @ 180 NONAME
+	_ZN26CGetInterdependentPropDescC1ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 181 NONAME
+	_ZN26CGetInterdependentPropDescC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 182 NONAME
+	_ZN26CGetInterdependentPropDescD0Ev @ 183 NONAME
+	_ZN26CGetInterdependentPropDescD1Ev @ 184 NONAME
+	_ZN26CGetInterdependentPropDescD2Ev @ 185 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper10AddObjectLERK18CMTPObjectMetaData @ 186 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper13AddDummyFileLERK7TDesC16 @ 187 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper13DeleteObjectLERK18CMTPObjectMetaData @ 188 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper13RenameObjectLERK18CMTPObjectMetaDataRK7TDesC16 @ 189 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper13SetReferenceLERK18CMTPObjectMetaDataR12CDesC16Array @ 190 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper15CreateDummyFileERK7TDesC16 @ 191 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper15DeleteDummyFileERK7TDesC16 @ 192 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper16CleanupDatabaseLEv @ 193 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper16GetAllReferenceLEP9CMPXMediaR12CDesC16Array @ 194 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper19GetModifiedContentLERK7TDesC16RiR12CDesC16Array @ 195 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper20GetAllAbstractMediaLERK7TDesC16PP14CMPXMediaArray19TMPXGeneralCategory @ 196 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper21GetAbstractMediaNameLEP9CMPXMedia19TMPXGeneralCategory @ 197 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper22UpdateMusicCollectionLERK7TDesC16 @ 198 NONAME
+	_ZN29CMmMtpDpMetadataAccessWrapper23GetObjectMetadataValueLEtR8MMTPTypeRK18CMTPObjectMetaData @ 199 NONAME
+	_ZNK11CSendObject12HasDataphaseEv @ 200 NONAME
+	_ZNK11CSendObject5MatchERK15TMTPTypeRequestR14MMTPConnection @ 201 NONAME
+	_ZNK15CRequestUnknown5MatchERK15TMTPTypeRequestR14MMTPConnection @ 202 NONAME
+	_ZNK17CRequestProcessor10ConnectionEv @ 203 NONAME
+	_ZNK17CRequestProcessor12HasDataphaseEv @ 204 NONAME
+	_ZNK17CRequestProcessor5MatchERK13TMTPTypeEventR14MMTPConnection @ 205 NONAME
+	_ZNK17CRequestProcessor5MatchERK15TMTPTypeRequestR14MMTPConnection @ 206 NONAME
+	_ZNK17CRequestProcessor7RequestEv @ 207 NONAME
+	_ZNK18CSetObjectPropList12HasDataphaseEv @ 208 NONAME
+	_ZNK19CSetObjectPropValue12HasDataphaseEv @ 209 NONAME
+	_ZNK20CSetObjectReferences12HasDataphaseEv @ 210 NONAME
+	_ZTI10CGetObject @ 211 NONAME
+	_ZTI11CCopyObject @ 212 NONAME
+	_ZTI11CMoveObject @ 213 NONAME
+	_ZTI11CSendObject @ 214 NONAME
+	_ZTI13CDeleteObject @ 215 NONAME
+	_ZTI13CRenameObject @ 216 NONAME
+	_ZTI14CGetObjectInfo @ 217 NONAME
+	_ZTI15CRequestChecker @ 218 NONAME
+	_ZTI15CRequestUnknown @ 219 NONAME
+	_ZTI15TMTPTypeFlatBuf @ 220 NONAME
+	_ZTI17CGetPartialObject @ 221 NONAME
+	_ZTI17CRequestProcessor @ 222 NONAME
+	_ZTI18CGetObjectPropDesc @ 223 NONAME
+	_ZTI18CGetObjectPropList @ 224 NONAME
+	_ZTI18CHXMetaDataUtility @ 225 NONAME
+	_ZTI18CSetObjectPropList @ 226 NONAME
+	_ZTI19CDescriptionUtility @ 227 NONAME
+	_ZTI19CGetObjectPropValue @ 228 NONAME
+	_ZTI19CSetObjectPropValue @ 229 NONAME
+	_ZTI20CGetObjectReferences @ 230 NONAME
+	_ZTI20CSetObjectReferences @ 231 NONAME
+	_ZTI22CGetFormatCapabilities @ 232 NONAME
+	_ZTI23CMmMtpDpAccessSingleton @ 233 NONAME
+	_ZTI23CPropertySettingUtility @ 234 NONAME
+	_ZTI24CGetObjectPropsSupported @ 235 NONAME
+	_ZTI25CMmMtpDpMetadataMpxAccess @ 236 NONAME
+	_ZTI26CGetInterdependentPropDesc @ 237 NONAME
+	_ZTI27CMmMtpDpMetadataVideoAccess @ 238 NONAME
+	_ZTI29CMmMtpDpMetadataAccessWrapper @ 239 NONAME
+	_ZTV10CGetObject @ 240 NONAME
+	_ZTV11CCopyObject @ 241 NONAME
+	_ZTV11CMoveObject @ 242 NONAME
+	_ZTV11CSendObject @ 243 NONAME
+	_ZTV13CDeleteObject @ 244 NONAME
+	_ZTV13CRenameObject @ 245 NONAME
+	_ZTV14CGetObjectInfo @ 246 NONAME
+	_ZTV15CRequestChecker @ 247 NONAME
+	_ZTV15CRequestUnknown @ 248 NONAME
+	_ZTV15TMTPTypeFlatBuf @ 249 NONAME
+	_ZTV17CGetPartialObject @ 250 NONAME
+	_ZTV17CRequestProcessor @ 251 NONAME
+	_ZTV18CGetObjectPropDesc @ 252 NONAME
+	_ZTV18CGetObjectPropList @ 253 NONAME
+	_ZTV18CHXMetaDataUtility @ 254 NONAME
+	_ZTV18CSetObjectPropList @ 255 NONAME
+	_ZTV19CDescriptionUtility @ 256 NONAME
+	_ZTV19CGetObjectPropValue @ 257 NONAME
+	_ZTV19CSetObjectPropValue @ 258 NONAME
+	_ZTV20CGetObjectReferences @ 259 NONAME
+	_ZTV20CSetObjectReferences @ 260 NONAME
+	_ZTV22CGetFormatCapabilities @ 261 NONAME
+	_ZTV23CMmMtpDpAccessSingleton @ 262 NONAME
+	_ZTV23CPropertySettingUtility @ 263 NONAME
+	_ZTV24CGetObjectPropsSupported @ 264 NONAME
+	_ZTV25CMmMtpDpMetadataMpxAccess @ 265 NONAME
+	_ZTV26CGetInterdependentPropDesc @ 266 NONAME
+	_ZTV27CMmMtpDpMetadataVideoAccess @ 267 NONAME
+	_ZTV29CMmMtpDpMetadataAccessWrapper @ 268 NONAME
+	_ZThn28_N11CSendObject13UsbDisconnectEv @ 269 NONAME
+	_ZThn28_N17CRequestProcessor12HandleEventLERK13TMTPTypeEvent @ 270 NONAME
+	_ZThn28_N17CRequestProcessor13UsbDisconnectEv @ 271 NONAME
+	_ZThn28_N17CRequestProcessor14HandleRequestLERK15TMTPTypeRequest20TMTPTransactionPhase @ 272 NONAME
+	_ZThn28_N17CRequestProcessor7ReleaseEv @ 273 NONAME
+	_ZThn28_N17CRequestProcessor9SessionIdEv @ 274 NONAME
+	_ZThn28_NK11CSendObject5MatchERK15TMTPTypeRequestR14MMTPConnection @ 275 NONAME
+	_ZThn28_NK15CRequestUnknown5MatchERK15TMTPTypeRequestR14MMTPConnection @ 276 NONAME
+	_ZThn28_NK17CRequestProcessor10ConnectionEv @ 277 NONAME
+	_ZThn28_NK17CRequestProcessor5MatchERK13TMTPTypeEventR14MMTPConnection @ 278 NONAME
+	_ZThn28_NK17CRequestProcessor5MatchERK15TMTPTypeRequestR14MMTPConnection @ 279 NONAME
+	_ZThn28_NK17CRequestProcessor7RequestEv @ 280 NONAME
 
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/crequestprocessor.h	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/crequestprocessor.h	Fri May 28 13:15:37 2010 +0100
@@ -311,7 +311,6 @@
     /**
     * Set P&S Status to avoid MPX access conflict
     */
-    void SetPSStatus();
 
 private:
     /**
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/ccopyobject.cpp	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/ccopyobject.cpp	Fri May 28 13:15:37 2010 +0100
@@ -107,10 +107,6 @@
 EXPORT_C void CCopyObject::ConstructL()
     {
     iPropertyList = CMTPTypeObjectPropList::NewL();
-
-    // Set the CenRep value of MTP status,
-    // also need to do in other processors which related to MPX
-    SetPSStatus();
     }
 
 // -----------------------------------------------------------------------------
@@ -122,6 +118,7 @@
     {
     PRINT( _L( "MM MTP => CCopyObject::ServiceL" ) );
 
+    MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive);
     CopyObjectL();
 
     PRINT( _L( "MM MTP <= CCopyObject::ServiceL" ) );
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cdeleteobject.cpp	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cdeleteobject.cpp	Fri May 28 13:15:37 2010 +0100
@@ -64,7 +64,6 @@
 void CDeleteObject::ConstructL()
     {
     CActiveScheduler::Add( this );
-    SetPSStatus();
     }
 
 // -----------------------------------------------------------------------------
@@ -104,6 +103,8 @@
 //
 EXPORT_C void CDeleteObject::ServiceL()
     {
+    MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive);
+    
     iObjectsToDelete.Reset();
     iDeleteError = KErrNone;
     TUint32 objectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 );
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobject.cpp	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobject.cpp	Fri May 28 13:15:37 2010 +0100
@@ -19,6 +19,7 @@
 #include <mtp/cmtptypefile.h>
 
 #include "cgetobject.h"
+#include "mmmtpdputility.h"
 #include "mmmtpdplogger.h"
 
 // -----------------------------------------------------------------------------
@@ -60,7 +61,6 @@
 //
 void CGetObject::ConstructL()
     {
-    SetPSStatus();
     }
 
 // -----------------------------------------------------------------------------
@@ -99,6 +99,8 @@
 void CGetObject::ServiceL()
     {
     PRINT( _L( "MM MTP => CGetObject::ServiceL" ) );
+    
+    MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive);
 
     // Get the objectinfo
     TUint32 objectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 );
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectinfo.cpp	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectinfo.cpp	Fri May 28 13:15:37 2010 +0100
@@ -96,8 +96,6 @@
 EXPORT_C void CGetObjectInfo::ConstructL()
     {
     CActiveScheduler::Add( this );
-
-    SetPSStatus();
     }
 
 // -----------------------------------------------------------------------------
@@ -108,6 +106,8 @@
 void CGetObjectInfo::ServiceL()
     {
     PRINT( _L( "MM MTP => CGetObjectInfo::ServiceL" ) );
+    
+    MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive);
 
     delete iObjectInfo;
     iObjectInfo = NULL;
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectproplist.cpp	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectproplist.cpp	Fri May 28 13:15:37 2010 +0100
@@ -98,8 +98,6 @@
 
     iPropertyList = CMTPTypeObjectPropList::NewL();
 
-    SetPSStatus();
-
 #if defined(_DEBUG) || defined(MMMTPDP_PERFLOG)
     iPerfLog = CMmMtpDpPerfLog::NewL( _L( "MediaMtpDataProviderEnumerator" ) );
 #endif
@@ -143,6 +141,8 @@
 //
 EXPORT_C void CGetObjectPropList::ServiceL()
     {
+    MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive);
+    
     GetObjectHandlesL();
     TInt numOfObjects = iHandles.Count();
     PRINT2( _L( "MM MTP <> CGetObjectPropList::ServiceL, numOfObjects = %d, iPropCode = 0x%x" ),
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectpropvalue.cpp	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectpropvalue.cpp	Fri May 28 13:15:37 2010 +0100
@@ -70,7 +70,6 @@
         KMTPGetObjectPropValuePolicy ),
     iDpConfig( aDpConfig )
     {
-    SetPSStatus();
     PRINT( _L( "Operation: GetObjectPropValue(0x9803)" ) );
     }
 
@@ -130,6 +129,8 @@
 EXPORT_C void CGetObjectPropValue::ServiceL()
     {
     PRINT( _L( "MM MTP => CGetObjectPropValue::ServiceL" ) );
+    
+    MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive);
 
     //Get the request information
     TUint32 objectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 );
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectreferences.cpp	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectreferences.cpp	Fri May 28 13:15:37 2010 +0100
@@ -24,6 +24,7 @@
 #endif
 
 #include "cgetobjectreferences.h"
+#include "mmmtpdputility.h"
 #include "mmmtpdplogger.h"
 
 // -----------------------------------------------------------------------------
@@ -67,7 +68,6 @@
 //
 void CGetObjectReferences::ConstructL()
     {
-    SetPSStatus();
     }
 
 // -----------------------------------------------------------------------------
@@ -103,6 +103,8 @@
 void CGetObjectReferences::ServiceL()
     {
     PRINT( _L( "MM MTP => CGetObjectReferences::ServiceL" ) );
+    
+    MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive);
 
     TUint32 objectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 );
     PRINT1( _L( "MM MTP <> CGetObjectReferences::ServiceL objectHandle = 0x%x" ),
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetpartialobject.cpp	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetpartialobject.cpp	Fri May 28 13:15:37 2010 +0100
@@ -19,6 +19,7 @@
 #include <mtp/cmtptypefile.h>
 
 #include "cgetpartialobject.h"
+#include "mmmtpdputility.h"
 #include "mmmtpdplogger.h"
 #include "tmmmtpdppanic.h"
 #include "mmmtpdpconfig.h"
@@ -80,7 +81,6 @@
 //
 void CGetPartialObject::ConstructL()
     {
-    SetPSStatus();
     }
 
 // -----------------------------------------------------------------------------
@@ -147,6 +147,8 @@
 EXPORT_C void CGetPartialObject::ServiceL()
     {
     PRINT( _L( "MM MTP => CGetPartialObject::ServiceL" ) );
+    
+    MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive);
 
     // Get file information
     CMTPObjectMetaData* objectInfo = iRequestChecker->GetObjectInfo( iObjectHandle );
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cmoveobject.cpp	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cmoveobject.cpp	Fri May 28 13:15:37 2010 +0100
@@ -105,10 +105,6 @@
 EXPORT_C void CMoveObject::ConstructL()
     {
     iPropertyList = CMTPTypeObjectPropList::NewL();
-
-    // Set the CenRep value of MTP status,
-    // also need to do in other processors which related to MPX
-    SetPSStatus();
     }
 
 // -----------------------------------------------------------------------------
@@ -119,7 +115,8 @@
 EXPORT_C void CMoveObject::ServiceL()
     {
     PRINT( _L( "MM MTP => CMoveObject::ServiceL" ) );
-
+    
+    MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive);
     MoveObjectL();
 
     PRINT( _L( "MM MTP <= CMoveObject::ServiceL" ) );
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crenameobject.cpp	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crenameobject.cpp	Fri May 28 13:15:37 2010 +0100
@@ -25,6 +25,7 @@
 #include "mmmtpdplogger.h"
 #include "cmmmtpdpmetadataaccesswrapper.h"
 #include "crequestprocessor.h" // refer to KMmMtpRArrayGranularity
+#include "mmmtpdputility.h"
 
 // -----------------------------------------------------------------------------
 // CRenameObject::NewL
@@ -98,6 +99,8 @@
     PRINT1( _L( "MM MTP <> CRenameObject::StartL, handle count = %d" ), iCount );
     if ( iCount > 0 )
         {
+        MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive);
+        
         // get the old/new folder full file name
         GetParentSuidL( aParentHandle, aOldFolderName );
 
@@ -169,6 +172,8 @@
         {
         if( iRenameWaiter->IsStarted() )
             iRenameWaiter->AsyncStop();
+        
+        MmMtpDpUtility::SetPSStatus(EMtpPSStatusReadyToSync);  
         }
 
     PRINT( _L( "MM MTP <= CRenameObject::RunL" ) );
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crequestprocessor.cpp	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crequestprocessor.cpp	Fri May 28 13:15:37 2010 +0100
@@ -21,11 +21,10 @@
 #include <mtp/tmtptypeevent.h>
 #include <mtp/mmtpconnection.h>
 #include <mtp/mmtpobjectmgr.h>
-#include <e32property.h>
-#include <mtpprivatepskeys.h>
 
 #include "crequestprocessor.h"
 #include "crequestchecker.h"
+#include "mmmtpdputility.h"
 #include "mmmtpdplogger.h"
 
 static const TInt KNullBufferSize = 4096;
@@ -214,6 +213,7 @@
             break;
 
         case ECompletingPhase:
+            MmMtpDpUtility::SetPSStatus(EMtpPSStatusReadyToSync);
             result = DoHandleCompletingPhaseL();
             break;
 
@@ -427,23 +427,6 @@
     }
 
 // -----------------------------------------------------------------------------
-// CRequestProcessor::SetPSStatus
-// Set P&S Status to avoid MPX access conflict
-// -----------------------------------------------------------------------------
-//
-void CRequestProcessor::SetPSStatus()
-    {
-    TInt mtpStatus;
-    RProperty::Get( KMtpPSUid, KMtpPSStatus, mtpStatus);
-
-    if ( mtpStatus != EMtpPSStatusActive )
-        {
-        TInt err = RProperty::Set( KMtpPSUid, KMtpPSStatus, EMtpPSStatusActive );
-        PRINT1( _L("MM MTP <> CRequestProcessor::SetPSStatus err = %d" ), err );
-        }
-    }
-
-// -----------------------------------------------------------------------------
 // CRequestProcessor::ExtractSessionTransactionId
 // retrieve the session id and transaction code from the current request
 // -----------------------------------------------------------------------------
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csendobject.cpp	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csendobject.cpp	Fri May 28 13:15:37 2010 +0100
@@ -129,7 +129,7 @@
 
     PRINT1( _L( "MM MTP <> CSendObject::ConstructL DataProviderId = 0x%x" ), iFramework.DataProviderId());
 
-    SetPSStatus();
+  
     PRINT( _L( "MM MTP <= CSendObject::ConstructL" ) );
     }
 
@@ -324,6 +324,8 @@
 EXPORT_C void CSendObject::ServiceL()
     {
     PRINT( _L( "MM MTP => CSendObject::ServiceL" ) );
+    
+    MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive);
 
     if ( iProgress == EObjectNone )
         {
@@ -596,7 +598,7 @@
             // Commits into MTP data object enumeration store the object handle and
             // storage space previously reserved for the specified object.
             iFramework.ObjectMgr().CommitReservedObjectHandleL( *iReceivedObjectInfo );
-            iRollbackList.Append( RemoveObjectFromDbL );
+            iRollbackList.Append( &CSendObject::RemoveObjectFromDbL );
             }
 
         // Commit object to MTP data store
@@ -1139,7 +1141,7 @@
     // by the specified object information record.
     TRAP( err, iObjectMgr.ReserveObjectHandleL( *iReceivedObjectInfo,
         iObjectSize ) );
-    iRollbackList.Append( UnreserveObjectL );
+    iRollbackList.Append( &CSendObject::UnreserveObjectL );
 
     PRINT2( _L( "MM MTP => CSendObject::ReserveObjectL iObjectsize = %Lu, Operation: 0x%x" ), iObjectSize, iOperationCode );
     if ( err != KErrNone )
@@ -1152,7 +1154,7 @@
         delete iFileReceived;
         iFileReceived = NULL;
         PRINT2( _L( "MM MTP <> CSendObject::ServiceObjectL, iFullPath is %S, iObjectSize: %Lu" ), &iFullPath, iObjectSize );
-        iRollbackList.Append( RemoveObjectFromFs );
+        iRollbackList.Append( &CSendObject::RemoveObjectFromFs );
         TRAP( err, iFileReceived = CMTPTypeFile::NewL( iFs, iFullPath, EFileWrite ) );
 
         PRINT1( _L("MM MTP <> CMTPTypeFile::NewL Leave Code is: %d"), err );
@@ -1269,7 +1271,7 @@
     TRAPD( err, AddMediaToStoreL() );
 
     if ( err != KErrNone )
-        iRollbackList.Append( RemoveObjectFromDbL );
+        iRollbackList.Append( &CSendObject::RemoveObjectFromDbL );
     else
         iRollbackList.Reset();
 
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectproplist.cpp	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectproplist.cpp	Fri May 28 13:15:37 2010 +0100
@@ -73,7 +73,6 @@
     CActiveScheduler::Add( this );
 
     iPropertyList = CMTPTypeObjectPropList::NewL();
-    SetPSStatus();
     }
 
 // -----------------------------------------------------------------------------
@@ -115,6 +114,9 @@
 EXPORT_C void CSetObjectPropList::ServiceL()
     {
     PRINT( _L( "MM MTP => CSetObjectPropList::ServiceL" ) );
+    
+    MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive);
+    
     // Recieve the data from the property list
     ReceiveDataL( *iPropertyList );
     PRINT( _L( "MM MTP <= CSetObjectPropList::ServiceL" ) );
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectpropvalue.cpp	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectpropvalue.cpp	Fri May 28 13:15:37 2010 +0100
@@ -74,7 +74,6 @@
     iDpConfig( aDpConfig ),
     iFs( aFramework.Fs() )
     {
-    SetPSStatus();
     PRINT( _L( "Operation: SetObjectPropValue(0x9804)" ) );
     }
 
@@ -199,6 +198,9 @@
 EXPORT_C void CSetObjectPropValue::ServiceL()
     {
     PRINT( _L( "MM MTP => CSetObjectPropValue::ServiceL" ) );
+    
+    MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive);
+    
     __ASSERT_DEBUG( iRequestChecker, Panic( EMmMTPDpRequestCheckNull ) );
     TUint32 handle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 );
     PRINT1( _L( "MM MTP <> CSetObjectPropValue::ServiceL handle = 0x%x" ), handle );
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectreferences.cpp	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectreferences.cpp	Fri May 28 13:15:37 2010 +0100
@@ -70,7 +70,6 @@
 //
 void CSetObjectReferences::ConstructL()
     {
-    SetPSStatus();
     }
 
 // -----------------------------------------------------------------------------
@@ -126,6 +125,9 @@
 EXPORT_C void CSetObjectReferences::ServiceL()
     {
     PRINT( _L( "MM MTP => CSetObjectReferences::ServiceL" ) );
+    
+    MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive);
+    
     delete iReferences;
     iReferences = NULL;
     iReferences = CMTPTypeArray::NewL( EMTPTypeAUINT32 );
--- a/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpaccesssingleton.cpp	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpaccesssingleton.cpp	Fri May 28 13:15:37 2010 +0100
@@ -21,6 +21,7 @@
 #include "cmmmtpdpaccesssingleton.h"
 #include "cmmmtpdpmetadataaccesswrapper.h"
 #include "mmmtpdplogger.h"
+#include "mmmtpdputility.h"
 
 // -----------------------------------------------------------------------------
 // CMmMtpDpAccessSingleton::~CMmMtpDpAccessSingleton
@@ -30,6 +31,12 @@
 CMmMtpDpAccessSingleton::~CMmMtpDpAccessSingleton()
     {
     delete iWrapper;
+    
+    if (iDelayStatusChanger)
+        {
+        iDelayStatusChanger->Cancel();
+        delete iDelayStatusChanger;
+        }
     }
 
 // -----------------------------------------------------------------------------
@@ -151,7 +158,73 @@
 void CMmMtpDpAccessSingleton::ConstructL( MMTPDataProviderFramework& aFramework )
     {
     iWrapper = CMmMtpDpMetadataAccessWrapper::NewL( aFramework );
+    iDelayStatusChanger = CIdle::NewL(CActive::EPriorityIdle);
+    }
+
+// -----------------------------------------------------------------------------
+// CMmMtpDpAccessSingleton::ActiveToIdleStatusChange
+// Issue ActiveToIdle Status Change (ActiveObject)
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMmMtpDpAccessSingleton::ActiveToIdleStatusChange()
+    {
+    PRINT( _L( "CMmMtpDpAccessSingleton::ActiveToIdleStatusChange" ) );
+    CMmMtpDpAccessSingleton* self = CMmMtpDpAccessSingleton::Instance();
+    
+    if (self != NULL)
+        {
+        CMmMtpDpAccessSingleton::CancelActiveToIdleStatusChange();
+    
+        if (self->DelayStatusChanger() != NULL)
+            self->DelayStatusChanger()->Start(TCallBack(DoActiveToIdleStatusChange, self));
+        }
     }
 
+// -----------------------------------------------------------------------------
+// CMmMtpDpAccessSingleton::CancelActiveToIdleChange
+// Cancel Outstanding ActiveToIdle Status Change
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMmMtpDpAccessSingleton::CancelActiveToIdleStatusChange()
+    {
+    CMmMtpDpAccessSingleton* self = CMmMtpDpAccessSingleton::Instance();
+    
+    if ((self != NULL) && (self->DelayStatusChanger() != NULL))
+        {
+        if (self->DelayStatusChanger()->IsActive())
+            {
+            PRINT( _L( "CMmMtpDpAccessSingleton::CancelActiveToIdleStatusChange, cancel outstanding request" ) );
+            self->DelayStatusChanger()->Cancel();
+            }
+        }
+    }
+    
+// -----------------------------------------------------------------------------
+// CMmMtpDpAccessSingleton::DelayStatusChanger
+// get DelayStatusChanger instance, internal use only
+// -----------------------------------------------------------------------------
+//
+CIdle* CMmMtpDpAccessSingleton::DelayStatusChanger()
+    {
+    CIdle* delayStatusChanger = NULL;
+    CMmMtpDpAccessSingleton* self = CMmMtpDpAccessSingleton::Instance();
+    
+    if (self != NULL)
+        delayStatusChanger = self->iDelayStatusChanger;
+    
+    return delayStatusChanger;
+    }
+
+// -----------------------------------------------------------------------------
+// CMmMtpDpAccessSingleton::DoActiveToIdleChange
+// Perform actural ActiveToIdle Status Change after active object callback
+// -----------------------------------------------------------------------------
+//
+TInt CMmMtpDpAccessSingleton::DoActiveToIdleStatusChange(TAny* /*Any*/)
+    {
+    PRINT( _L( "CMmMtpDpAccessSingleton::DoActiveToIdleStatusChange ") );
+    MmMtpDpUtility::DoSetPSStatus(EMtpPSStatusReadyToSync);
+    return KErrNone;
+    }
 
 // end of file
--- a/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadataaccesswrapper.cpp	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadataaccesswrapper.cpp	Fri May 28 13:15:37 2010 +0100
@@ -25,6 +25,7 @@
 #include <e32property.h>
 #include <mtpprivatepskeys.h>
 
+#include "mmmtpdp_variant.hrh"
 #include "cmmmtpdpmetadataaccesswrapper.h"
 #include "cmmmtpdpmetadatampxaccess.h"
 #include "cmmmtpdpmetadatavideoaccess.h"
@@ -76,6 +77,12 @@
                        KKeyReadPolicy,
                        KKeyWritePolicy);
 
+#ifdef MMMTPDP_RESET_STATUS_CLOSESESSION
+    MmMtpDpUtility::SetPSStatus(EMtpPSStatusUninitialized);
+#else
+    MmMtpDpUtility::SetPSStatus(EMtpPSStatusReadyToSync);
+#endif // MMMTPDP_RESET_STATUS_CLOSESESSION    
+    
     PRINT( _L( "MM MTP <= CMmMtpDpMetadataAccessWrapper::ConstructL" ) );
     }
 
@@ -95,9 +102,8 @@
     delete iMmMtpDpMetadataMpxAccess;
 
     // unblock MPX
-    RProperty::Set( KMtpPSUid,
-                    KMtpPSStatus,
-                    EMtpPSStatusUninitialized );
+    MmMtpDpUtility::SetPSStatus(EMtpPSStatusUninitialized);
+    
     PRINT( _L( "MM MTP <= CMmMtpDpMetadataAccessWrapper::~CMmMtpDpMetadataAccessWrapper" ) );
     }
 
@@ -337,6 +343,11 @@
 void CMmMtpDpMetadataAccessWrapper::OpenSessionL()
     {
     iOpenCount++;
+
+#ifdef MMMTPDP_RESET_STATUS_CLOSESESSION
+    if (iOpenCount == 1)
+        MmMtpDpUtility::SetPSStatus(EMtpPSStatusReadyToSync);
+#endif // MMMTPDP_RESET_STATUS_CLOSESESSION
     }
 
 // -----------------------------------------------------------------------------
@@ -355,8 +366,12 @@
         if ( iOpenCount == 0 )
             {
             PRINT( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::CloseSessionL close" ) );
-            iMmMtpDpMetadataMpxAccess->CloseSession();
+            iMmMtpDpMetadataMpxAccess->CloseSession();    // trigger close and flush CollectionHelper
             iMmMtpDpMetadataVideoAccess->CloseSessionL();
+            
+#ifdef MMMTPDP_RESET_STATUS_CLOSESESSION
+            MmMtpDpUtility::SetPSStatus(EMtpPSStatusUninitialized);
+#endif // MMMTPDP_RESET_STATUS_CLOSESESSION
             }
         }
     else
--- a/mmappcomponents/mmmtpdataprovider/src/mmmtpdputility.cpp	Tue May 18 16:08:19 2010 +0100
+++ b/mmappcomponents/mmmtpdataprovider/src/mmmtpdputility.cpp	Fri May 28 13:15:37 2010 +0100
@@ -27,6 +27,7 @@
 #include <mtp/mmtpdataproviderframework.h>
 #include <mtp/mmtpobjectmgr.h>
 #include <mtp/tmtptypeuint32.h>
+#include <e32property.h>    // for RProperty
 
 // for asf mimetype parsing
 #ifdef __WINDOWS_MEDIA
@@ -39,6 +40,7 @@
 #include "tobjectdescription.h"
 #include "mmmtpdplogger.h"
 #include "mmmtpdp_variant.hrh"
+#include "cmmmtpdpaccesssingleton.h"
 
 using namespace ContentAccess;
 
@@ -702,4 +704,36 @@
     return drmStatus;
     }
 
+EXPORT_C void MmMtpDpUtility::SetPSStatus( TMtpPSStatus aStatus )
+    {
+    TBool changeScheduled = EFalse;
+    CMmMtpDpAccessSingleton::CancelActiveToIdleStatusChange();  // cancel any outstanding delay status change
+    
+    if ( aStatus == EMtpPSStatusReadyToSync )
+        {
+        TInt mtpStatus;
+        RProperty::Get( KMtpPSUid, KMtpPSStatus, mtpStatus );
+        
+        if ( mtpStatus == EMtpPSStatusActive )
+            {
+            CMmMtpDpAccessSingleton::ActiveToIdleStatusChange();
+            changeScheduled = ETrue;
+            }
+        }
+
+    if ( !changeScheduled )
+        DoSetPSStatus( aStatus );
+    }
+
+void MmMtpDpUtility::DoSetPSStatus( TMtpPSStatus aStatus )
+    {
+    TInt mtpStatus;
+    RProperty::Get( KMtpPSUid, KMtpPSStatus, mtpStatus );
+
+    if ( mtpStatus != aStatus )
+        {
+        TInt err = RProperty::Set( KMtpPSUid, KMtpPSStatus, aStatus );
+        PRINT3( _L("MM MTP <> CRequestProcessor::DoSetPSStatus err = %d, previous = %d, current = %d" ), err , mtpStatus, aStatus);
+        }
+    }
 // end of file
--- a/mpx/playbackframework/playbackengine/inc/mpxplaybackengine.h	Tue May 18 16:08:19 2010 +0100
+++ b/mpx/playbackframework/playbackengine/inc/mpxplaybackengine.h	Fri May 28 13:15:37 2010 +0100
@@ -192,13 +192,6 @@
     inline TProcessId LastActiveProcessId() const;
 
     /**
-     *  Retursn last inactive process id
-     *
-     *  @return process id of last inactive process
-     */
-    inline TProcessId LastInactiveProcessId() const;
-
-    /**
     *  Initializes the player with a song in the collection
     *
     *  @param aCollectionPath collection path
--- a/mpx/playbackframework/playbackengine/inc/mpxplaybackengine.inl	Tue May 18 16:08:19 2010 +0100
+++ b/mpx/playbackframework/playbackengine/inc/mpxplaybackengine.inl	Fri May 28 13:15:37 2010 +0100
@@ -156,15 +156,6 @@
     }
 
 // ----------------------------------------------------------------------------
-// Return last inactive process id
-// ----------------------------------------------------------------------------
-//
-inline TProcessId CMPXPlaybackEngine::LastInactiveProcessId() const
-    {
-    return iLastInactiveProcess;
-    }
-
-// ----------------------------------------------------------------------------
 // CPlaybackCallbackReflector constructor
 // ----------------------------------------------------------------------------
 //
--- a/mpx/playbackframework/playbackengine/src/mpxplaybackengine.cpp	Tue May 18 16:08:19 2010 +0100
+++ b/mpx/playbackframework/playbackengine/src/mpxplaybackengine.cpp	Fri May 28 13:15:37 2010 +0100
@@ -530,12 +530,6 @@
                 iLastActiveProcess = aCmd.ValueTObjectL<TProcessId>(
                                            KMPXCommandPlaybackGeneralClientPid);
                 }
-            else if (EPbCmdStop == cmd)
-                {
-                ASSERT(aCmd.IsSupported(KMPXCommandPlaybackGeneralClientPid));
-                iLastInactiveProcess = aCmd.ValueTObjectL<TProcessId>(
-                                           KMPXCommandPlaybackGeneralClientPid);
-                }
             TInt data(0);
             if (aCmd.IsSupported(KMPXCommandPlaybackGeneralData))
                 {
@@ -651,6 +645,7 @@
             break;
         case EPbPropertyMute:
             MPX_DEBUG2( "CMPXPlaybackEngine::SetL EPbPropertyMute %d", aValue );
+            iProperties[EPbPropertyMute] = aValue; // set now, needed when EPSetComplete is converted to EPropertyChanged 
             if ( iPluginHandler->Plugin() )
                 {
                 PluginL()->SetL( aProperty, aValue );
@@ -1134,14 +1129,12 @@
                 }
             case EPMuteChanged:
                 {
-                if ( iProperties[EPbPropertyMute] != aData )
-                    {
-                    iProperties[EPbPropertyMute] = aData;
-                    iClientList->SendMsgL(
-                        TMPXPlaybackMessage(TMPXPlaybackMessage::EPropertyChanged,
+				// property changed broadcast message after successful return from plugins
+                iProperties[EPbPropertyMute] = aData;
+                iClientList->SendMsgL(
+                TMPXPlaybackMessage(TMPXPlaybackMessage::EPropertyChanged,
                                             EPbPropertyMute,
                                             iProperties[EPbPropertyMute]));
-                    }
                 break;
                 }
             case EPPositionChanged:
--- a/mpx/playbackframework/playbackserver/src/mpxplaybackserversession.cpp	Tue May 18 16:08:19 2010 +0100
+++ b/mpx/playbackframework/playbackserver/src/mpxplaybackserversession.cpp	Fri May 28 13:15:37 2010 +0100
@@ -475,10 +475,6 @@
             CMPXCommand* cmd( NULL );
             ::NewFromMessageL<CMPXMedia>(aMessage, 1, cmd);
             CleanupStack::PushL(cmd);
-            if (aMessage.Int0())
-                { // aSync command
-                SetAsync(aMessage);
-                } // else sync command
             iPlayer->CommandL(*cmd, *iMessageQueue);
             CleanupStack::PopAndDestroy(cmd);
             break;
--- a/mpx/playbackframework/playbackutility/src/mpxplaybackutilityimpl.cpp	Tue May 18 16:08:19 2010 +0100
+++ b/mpx/playbackframework/playbackutility/src/mpxplaybackutilityimpl.cpp	Fri May 28 13:15:37 2010 +0100
@@ -386,6 +386,7 @@
     TPtr8 ptr = buf->Ptr(0);
     if (asyncVar)
         { // async request
+        MPX_DEBUG1("CMPXPlaybackUtility::CommandL asynchronous command");		
         ASSERT(aCallback); // callback must be provided for asynchronous command
         // Increase reference count on command ownership transferred
         CMPXCommand* ref = CMPXCommand::NewL(aCmd);