Revision: 201013 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 14 Apr 2010 16:28:17 +0300
branchRCL_3
changeset 19 51035f0751c2
parent 17 780c925249c1
child 22 8add8cccb322
child 23 4740b34b83ce
Revision: 201013 Kit: 201015
mmappcomponents/audiofetcher/src/audiofetcherdialog.cpp
mmappcomponents/harvester/filehandler/src/mpxharvesterdbmanager.cpp
mmappcomponents/harvester/filehandler/src/mpxharvesterfilehandlerimp.cpp
mmappcomponents/harvester/metadataextractor/src/mpxfileinfoutility.cpp
mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp
mmappcomponents/harvester/server/group/mpxharvester.mmp
mmappcomponents/harvester/server/inc/mpxharvesterengine.h
mmappcomponents/harvester/server/inc/mpxmediaremovalmonitor.h
mmappcomponents/harvester/server/inc/mpxmmcejectmonitor.h
mmappcomponents/harvester/server/src/mpxfsformatmonitor.cpp
mmappcomponents/harvester/server/src/mpxharvesterengine.cpp
mmappcomponents/harvester/server/src/mpxmediaremovalmonitor.cpp
mmappcomponents/harvester/server/src/mpxmmcejectmonitor.cpp
mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpmetadataaccesswrapper.h
mmappcomponents/mmmtpdataprovider/install/rom/mmmtpdpstub.pkg
mmappcomponents/mmmtpdataprovider/install/rom/mmmtpdpupdate.pkg
mmappcomponents/mmmtpdataprovider/install/rom/mmmtpdpupdatedebug.pkg
mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataproviderenumerator.h
mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovider.cpp
mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderenumerator.cpp
mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderrenameobject.cpp
mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/mediamtpdataproviderconst.h
mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/bwins/mmmtpdprequestprocessoru.def
mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/eabi/mmmtpdprequestprocessoru.def
mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cmoveobject.cpp
mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crenameobject.cpp
mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csendobject.cpp
mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadataaccesswrapper.cpp
mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatampxaccess.cpp
mmappcomponents/mmmtpdataprovider/src/mmmtpdputility.cpp
mmappfw_plat/harvester_server_api/inc/mpxharvestercommon.h
mpx/collectionframework/collectionengine/inc/mpxcollectionengine.h
mpx/collectionframework/collectionengine/src/mpxcollectionclientcontext.cpp
mpx/collectionframework/collectionengine/src/mpxcollectionengine.cpp
mpx/collectionframework/collectionserver/src/mpxcollectionserversession.cpp
mpx/commonframework/common/src/mpxdataarray.cpp
mpx/playbackframework/playbackengine/src/mpxplaybackengine.cpp
--- a/mmappcomponents/audiofetcher/src/audiofetcherdialog.cpp	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappcomponents/audiofetcher/src/audiofetcherdialog.cpp	Wed Apr 14 16:28:17 2010 +0300
@@ -196,7 +196,7 @@
         case EAknSoftkeySelect :
             {       
             TInt index = CurrentItemListIndex();
-            TBuf<128> fileName;
+            TFileName fileName;
             
             iFileHandler->GetAttribute( index, CAudioFetcherFileHandler::EAttrFullName, fileName, 0 );
             iSelectedFiles.AppendL( fileName );
@@ -928,7 +928,7 @@
     TBool closeDialog = EFalse;
     
     TInt index = CurrentItemListIndex();
-    TBuf<128> fileName;
+    TFileName fileName;
     
     iFileHandler->GetAttribute( index, CAudioFetcherFileHandler::EAttrFullName, fileName, 0 );
     iSelectedFiles.AppendL( fileName );
--- a/mmappcomponents/harvester/filehandler/src/mpxharvesterdbmanager.cpp	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappcomponents/harvester/filehandler/src/mpxharvesterdbmanager.cpp	Wed Apr 14 16:28:17 2010 +0300
@@ -168,6 +168,7 @@
             TRAP( check, GetDatabaseL(static_cast<TDriveNumber>(driveNum)) );
             if( check == KErrNotFound )
                 {
+                MPX_DEBUG1("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: re-creating database");
                 CMPXHarvesterDB* dB = CMPXHarvesterDB::NewL(
                     static_cast<TDriveNumber>(driveNum), iFs );
                 CleanupStack::PushL( dB );
@@ -179,6 +180,7 @@
                     }
                 else
                     {
+                    MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: opening failed, error=%d, removing database", openError);
                     CleanupStack::PopAndDestroy( dB );
                     }
                 }
@@ -187,6 +189,7 @@
                 TRAPD(openError, GetDatabaseL(static_cast<TDriveNumber>(driveNum)).OpenL() );
                 if(openError != KErrNone)
                     {
+                    MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: opening failed, error=%d, removing database", openError);
                     TRAP_IGNORE( RemoveDatabaseL(static_cast<TDriveNumber>(driveNum)));
                     }
                 }
@@ -293,6 +296,19 @@
             if ( db->GetDbDrive() == aDrive)
                 {
                 db->Close();
+#ifdef __RAMDISK_PERF_ENABLE                
+                if( iRAMDiskPerfEnabled && db->IsUseRamDrive() )
+                    {
+                    MPX_DEBUG1("CMPXHarvesterDatabaseManager::CloseDatabase DB is on RAM");
+                    db->SetRamDriveInfo( iRAMDrive, EFalse ); 
+                    TRAPD( err, DoCopyDBFromRamL(aDrive) );
+                    if ( err )
+                        {
+                        MPX_DEBUG2("CMPXHarvesterDatabaseManager::CloseDatabase DB copy error=%d", err);                
+                        RemoveDummyFile(i);
+                        }
+                    }
+#endif
                 break;
                 }
             }
@@ -589,6 +605,8 @@
 
     if( iRAMDiskPerfEnabled )
        {
+        // Should not leave until all the databases have been copied from RAM drive. 
+        TInt leaveError = KErrNone;
         TInt count(iDatabases.Count());
         for (TInt i = 0; i < count; ++i)
             {
@@ -605,8 +623,19 @@
             iDatabases[i]->SetRamDriveInfo( iRAMDrive, EFalse );
             // Get the db state in order to restore it later.
             TDbState dbState = iDatabases[i]->GetDbState();
-            iDatabases[i]->SetDbStateL(EDbClose);
-            TRAP( err, DoCopyDBFromRamL(drive) );
+            TRAP( err, iDatabases[i]->SetDbStateL(EDbClose) );
+            if ( err == KErrNone )
+                {
+                TRAP( err, DoCopyDBFromRamL(drive) );
+                }
+            else
+                {
+                // Error closing db on RAM drive, try to delete it.
+                TFileName ramDB;
+                ramDB = GenerateHarvesterDbName( drive, ETrue );
+                BaflUtils::DeleteFile(iFs, ramDB);
+                }
+            
             if ( err )
                 {
                 MPX_DEBUG2("CMPXHarvesterDatabaseManager::CopyDBsFromRamL copy error=%d", err);                
@@ -615,8 +644,13 @@
                 }
 
             // Restore the db state.
-            iDatabases[i]->SetDbStateL( dbState );
+            TRAPD( error, iDatabases[i]->SetDbStateL( dbState ) );
+            if ( error && !leaveError )
+                {
+                leaveError = error;
+                }
             }
+        User::LeaveIfError( leaveError );
         }
     }
 
@@ -635,14 +669,13 @@
     src = GenerateHarvesterDbName( aDriveUnit, ETrue );
     MPX_DEBUG3("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL from %S to %S", &src, &dst );
 
-    // Rename the temp file into real Db name
     TFileName dummyDbFileName = GenerateDummyDbName( aDriveUnit ); 
 
     //Copy Db from RAM to replace dummy file
     err = BaflUtils::CopyFile(iFs, src, dummyDbFileName);
     MPX_DEBUG2("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL database copied from ram drive err=%d.", err);
     
-    // delete db in ram drive.
+    // delete db on ram drive.
     TInt delErr = BaflUtils::DeleteFile(iFs, src);
     MPX_DEBUG3("CMPXHarvesterDatabaseManager::DoCopyDBFromRamL db on ram drive deleted file=%S, err=%d", &src, delErr);
 
--- a/mmappcomponents/harvester/filehandler/src/mpxharvesterfilehandlerimp.cpp	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappcomponents/harvester/filehandler/src/mpxharvesterfilehandlerimp.cpp	Wed Apr 14 16:28:17 2010 +0300
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:  Handles all file related activities
-*  Version     : %version: e003sa33#72.1.14.2.4.1.4.1.2.1.3 % << Don't touch! Updated by Synergy at check-out.
+*  Version     : %version: da1mmcf#72.1.14.2.4.1.4.1.2.1.4 % << Don't touch! Updated by Synergy at check-out.
 *
 */
 
@@ -438,6 +438,7 @@
     // 4: USB end we re-open all db and scan for new files
     // 5: MTP start we stop monitoring for new files (no dismount)
     // 6: MTP end we re-open all db, files added already, restart monitor
+    // 7: Disk dismount: stop scanning, close the dismounting DB
     //
 #ifdef RD_MULTIPLE_DRIVE
     // Get all visible drives
@@ -632,9 +633,11 @@
 #endif //__RAMDISK_PERF_ENABLE
             break;
             }
-        case EPowerKeyEjectEvent:
+        case EDiskDismountEvent:
             {
+            MPX_DEBUG2("Disk dismount notification, drive %d", aData);
             CancelScan();
+            iDBManager->CloseDatabase( (TDriveNumber) aData );
             break;
             }
         default:
--- a/mmappcomponents/harvester/metadataextractor/src/mpxfileinfoutility.cpp	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappcomponents/harvester/metadataextractor/src/mpxfileinfoutility.cpp	Wed Apr 14 16:28:17 2010 +0300
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:  This class is responsible for reading file info
-*  Version     : %version: da1mmcf#5.1.3.1.6 % << Don't touch! Updated by Synergy at check-out.
+*  Version     : %version: da1mmcf#5.1.3.1.8 % << Don't touch! Updated by Synergy at check-out.
 *
 *  Copyright © 2005 Nokia. All rights reserved.
 */
@@ -65,6 +65,8 @@
 // Destructor
 CMPXFileInfoUtility::~CMPXFileInfoUtility()
     {
+    MPX_DEBUG1("CMPXFileInfoUtility::~CMPXFileInfoUtility()<---");
+    
     iAudioControllers.ResetAndDestroy();
     //Reset();
     // Close all MMF controllers in the cache
@@ -88,6 +90,9 @@
         }
     
     REComSession::FinalClose();
+    
+    MPX_DEBUG1("CMPXFileInfoUtility::~CMPXFileInfoUtility()--->");
+    
     }
 
 // ----------------------------------------------------------------------------
@@ -106,7 +111,7 @@
 void CMPXFileInfoUtility::OpenFileL(RFile& aFile,
                                     const TDesC& aMimeType /*= KNullDesC*/)
     {
-    MPX_DEBUG1("CMPXFileInfoUtility::OpenFileL()");
+    MPX_DEBUG1("CMPXFileInfoUtility::OpenFileL()<---");
     Reset();
 
     HBufC* fileNameBuf = HBufC::NewLC(KMaxFileName);
@@ -125,10 +130,8 @@
     TBool enableUI = EFalse;
 
     //Code taken from TMMFileHandleSource
-
-
-    //{//build custom mmf message packet
-     //based on CMMFileSourceSink::DoCreateFileHandleSourceConfigDataL()
+    //build custom mmf message packet
+    //based on CMMFileSourceSink::DoCreateFileHandleSourceConfigDataL()
     CBufFlat* buf = CBufFlat::NewL(KMCExpandSize);
     CleanupStack::PushL(buf);
     RBufWriteStream stream;
@@ -152,22 +155,21 @@
 
     stream.CommitL();
     CleanupStack::PopAndDestroy(&stream);
-    //iSourceSinkData = buf->Ptr(0).AllocL();
 
-    //CleanupStack::PopAndDestroy(buf);
-    //}
-
-    // User::LeaveIfError(iController->Reset());
+    // Add new data source
+    MPX_DEBUG1("CMPXFileInfoUtility::OpenFileL()- AddDataSource()");
     
-   
-   // Add new data source
     User::LeaveIfError(iController->AddDataSource(KUidMmfFileSource,
                                                  buf->Ptr(0),
                                                  dataSource));
     
+    MPX_DEBUG1("CMPXFileInfoUtility::OpenFileL()- AddDataSink()");
     User::LeaveIfError(iController->AddDataSink(KUidMmfAudioOutput,
                                                KNullDesC8));
     CleanupStack::PopAndDestroy(buf);
+    
+    MPX_DEBUG1("CMPXFileInfoUtility::OpenFileL()--->");
+    
     }
 
 // ----------------------------------------------------------------------------
@@ -176,21 +178,25 @@
 //
 void CMPXFileInfoUtility::Reset()
     {
-    // Reset the controller
+    MPX_DEBUG1("CMPXFileInfoUtility::Reset()<---");
+    
     if(iController)
         {
-        if(iCurrentControllerUid == 0x101FAFB1 || iCurrentControllerUid == 0x10283351
-            || iCurrentControllerUid == 0x10207B65 )
+        // This is just for RA, WMA does not use controller 
+        if( iCurrentControllerUid == 0x10207B65 )  // Helix Controller UID
             {
+            MPX_DEBUG1("CMPXFileInfoUtility::Reset(), Close Controller - only for RA ");
             iController->Close();
             delete iController;
             iController = NULL;
             }
         else
             {
-           	iController->Reset();
+            MPX_DEBUG1("CMPXFileInfoUtility::Reset(), Reset Controller ");
+            iController->Reset();
             }
-    	}
+        }
+    MPX_DEBUG1("CMPXFileInfoUtility::Reset()--->");
     
     }
 
@@ -200,13 +206,15 @@
 //
 TTimeIntervalMicroSeconds CMPXFileInfoUtility::Duration()
     {
-    MPX_DEBUG1("CMPXFileInfoUtility::Duration()");
+    MPX_DEBUG1("CMPXFileInfoUtility::Duration()<---");
     TTimeIntervalMicroSeconds duration;
     TInt err = iController->GetDuration(duration);
     if(err != KErrNone)
         {
         duration = TInt64(0);
         }
+    MPX_DEBUG2("CMPXFileInfoUtility::Duration(), duration = %ld --->", duration );
+
     return duration;
     }
 
@@ -216,11 +224,16 @@
 //
 TUint CMPXFileInfoUtility::BitRate()
     {
+    MPX_DEBUG1("CMPXFileInfoUtility::BitRate()<---");
+
     RMMFAudioControllerCustomCommands customCommands(*iController);
 
     TUint bitRate(0);
     //Ignore return value, bitRate remain 0 if error
     customCommands.GetSourceBitRate(bitRate);
+    
+    MPX_DEBUG2("CMPXFileInfoUtility::BitRate(), bit rate = %d --->", bitRate);
+
     return bitRate;
     }
 
@@ -230,11 +243,16 @@
 //
 TUint CMPXFileInfoUtility::SampleRate()
     {
+    MPX_DEBUG1("CMPXFileInfoUtility::SampleRate()<---");
+    
     RMMFAudioControllerCustomCommands  customCommands(*iController);
 
     TUint sampleRate(0) ;
     //Ignore return value, sampleRate remain 0 if error
     customCommands.GetSourceSampleRate(sampleRate);
+    
+    MPX_DEBUG2("CMPXFileInfoUtility::SampleRate(), sample rate = %d --->", sampleRate);
+    
     return sampleRate;
     }
 
@@ -245,7 +263,8 @@
                                          const TDesC& aMimeType,
                                          TUid& aUid)
     {
-    MPX_DEBUG1("CMPXFileInfoUtility::FindControllerL()");
+    MPX_DEBUG1("CMPXFileInfoUtility::FindControllerL()<---");
+    
     TBool found(EFalse);
     TInt i(0);
     TInt j(0);
@@ -292,6 +311,9 @@
                 }
             }
         }
+    
+    MPX_DEBUG1("CMPXFileInfoUtility::FindControllerL()--->");
+    
     }
 
 // ----------------------------------------------------------------------------
@@ -302,11 +324,10 @@
 // ----------------------------------------------------------------------------
 void CMPXFileInfoUtility::OpenControllerL(const TUid& aUid)
     {
-    MPX_DEBUG1("CMPXFileInfoUtility::OpenControllerL()");
-    
-    // 3gp and helix (wma) do not allow controller caching
-    if(aUid.iUid == 0x101FAFB1 || aUid.iUid == 0x10283351
-        || aUid.iUid == 0x10207B65 )
+    MPX_DEBUG1("CMPXFileInfoUtility::OpenControllerL()<---");
+
+    // RA does not allow controller caching
+    if( aUid.iUid == 0x10207B65 )  // RA Controller Uid
         {
          iCurrentControllerUid = aUid.iUid;
          TMMFPrioritySettings prioritySettings;
@@ -319,9 +340,11 @@
          User::LeaveIfError(iController->Open(aUid, prioritySettings));  
 
          iCurrentControllerUid = aUid.iUid;
+         MPX_DEBUG1("CMPXFileInfoUtility::OpenControllerL(), RA Controller open --->");
+         
          return;
         }
-    
+     
     // check if we already have controller open for this UID in the cache
      RMMFController* controller = const_cast<RMMFController*>(iMMFControllers.Find(aUid.iUid));
 
@@ -335,10 +358,11 @@
     	
     	TUint32* key = new (ELeave) TUint32(aUid.iUid);
     	CleanupStack::PushL(key);
-    // Now instantiate the first controller in the array
-    TMMFPrioritySettings prioritySettings;
-    prioritySettings.iPriority = EMdaPriorityNormal;
-    prioritySettings.iPref = EMdaPriorityPreferenceTimeAndQuality;
+    	
+        // Now instantiate the first controller in the array
+        TMMFPrioritySettings prioritySettings;
+        prioritySettings.iPriority = EMdaPriorityNormal;
+        prioritySettings.iPref = EMdaPriorityPreferenceTimeAndQuality;
 
 	    // Try to open controller
 	    User::LeaveIfError(controller->Open(aUid,
@@ -353,7 +377,9 @@
 	
 	iController = controller;
 	iCurrentControllerUid = aUid.iUid;
-                       
+
+    MPX_DEBUG1("CMPXFileInfoUtility::OpenControllerL()--->");
+
     }
 
 // -----------------------------------------------------------------------------
@@ -362,6 +388,8 @@
 //
 void CMPXFileInfoUtility::CreateAudioFormatsArrayL()
     {
+    MPX_DEBUG1("CMPXFileInfoUtility::CreateAudioFormatsArrayL()<---");
+    
     CMMFControllerPluginSelectionParameters* cSelect =
             CMMFControllerPluginSelectionParameters::NewLC();
     CMMFFormatSelectionParameters* fSelect =
@@ -381,6 +409,9 @@
     cSelect->ListImplementationsL(iAudioControllers);
     // Clean up
     CleanupStack::PopAndDestroy(3); //fSelect, cSelect, mediaIds
+    
+    MPX_DEBUG1("CMPXFileInfoUtility::CreateAudioFormatsArrayL()--->");
+    
     }
 
 // End of File
--- a/mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp	Wed Apr 14 16:28:17 2010 +0300
@@ -12,11 +12,10 @@
 * Contributors:
 *
 * Description:  Extracts metadata from a file
-*  Version     : %version: da1mmcf#38.1.4.2.6.1.7 % << Don't touch! Updated by Synergy at check-out.
+*  Version     : %version: da1mmcf#38.1.4.2.6.1.9 % << Don't touch! Updated by Synergy at check-out.
 *
 */
 
-
 #include <e32base.h>
 #include <badesca.h>
 #include <apgcli.h>
@@ -45,10 +44,14 @@
 
 #include "mpxmetadataextractor.h"
 #include "mpxfileinfoutility.h"
+
+_LIT( KWmaMimeType, "audio/x-ms-wma" );
+_LIT( KWmaCafMimeType, "x-caf-audio/x-ms-wma" );
+
 #ifdef RD_MPX_TNM_INTEGRATION
 _LIT( KImageFileType, "image/jpeg" );
 const TInt KMPXTimeoutTimer = 3000000; // 3 seconds
-const TInt KMPXMaxThumbnailRequest = 5; 
+const TInt KMPXMaxThumbnailRequest = 2; 
 #endif //RD_MPX_TNM_INTEGRATION
 
 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
@@ -239,6 +242,8 @@
     TInt err = file.Open( iFs, *fileName, EFileRead | EFileShareReadersOrWriters );
     CleanupClosePushL(file);
     
+    // Initially set default tags.
+    SetDefaultL( *media );
     // Metadata related
     //
     if( err == KErrNone )
@@ -247,32 +252,18 @@
         HBufC8* mimeType8 = HBufC8::NewLC( mimeType.Length() );
         mimeType8->Des().Append( mimeType );
         TRAPD( metadataerror, iMetadataUtility->OpenFileL( file, *mimeType8 ) );
+        MPX_DEBUG2("CMPXMetadataExtractor::CreateMediaL, error %d parsing metadata", 
+            metadataerror );
         CleanupStack::PopAndDestroy( mimeType8 );
-
-        // No problem
-        if( KErrNone == metadataerror )
-            {
-            // Add TRAPD to capture exception KErrNoMemory.
-            //If album art size is too large, trap this exception and SetDefaultL.
-            //Fix EYLU-7ESE5L
-            TRAPD( err, SetMediaPropertiesL( *media, *fileName ) );
-            if ( KErrNoMemory == err )
-                {
-                SetDefaultL( *media );
-                }
-            }
-        else  // Error, Set defaults
-            {
-            SetDefaultL( *media );
-            }
+        
+        // Even if there is error extracting metadata, fill extracted tags.
+        TRAP( metadataerror, SetMediaPropertiesL( *media, *fileName ) ); 
+        MPX_DEBUG2("CMPXMetadataExtractor::CreateMediaL, error %d setting tags", 
+            metadataerror );
 
         // Reset the utility
         iMetadataUtility->ResetL();
         }
-    else // Error, Set defaults
-        {
-        SetDefaultL( *media );
-        }
     
     // Common properties that we can extract
     //
@@ -461,11 +452,17 @@
                 if ( KErrNone != err )
                     {
                     MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL - error jpeg = %i", err);           
-                    User::Leave( err );  
-                    }                 
-                CleanupStack::PushL( value8 );
-                AddMediaAlbumArtL( aMedia, aFile, *value8 );
-                CleanupStack::Pop( value8 );
+                    }
+                else
+                    {
+                    CleanupStack::PushL( value8 );
+                    TRAPD( err, AddMediaAlbumArtL( aMedia, aFile, *value8 ) );
+                    if ( KErrNone != err )
+                        {
+                        MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL - error album art = %i", err);           
+                        }
+                    CleanupStack::Pop( value8 );
+                    }
                 MPX_PERF_END(CMPXMetadataExtractor_SetMediaPropertiesL_JPEG_TNM);
 #else //RD_MPX_TNM_INTEGRATION
                 aMedia.SetTextValueL( KMPXMediaMusicAlbumArtFileName,
@@ -479,11 +476,33 @@
                                       *value );
                 break;
                 }
+            case EMetaDataDuration:     
+                {                  
+                const TDesC& mimeType = aMedia.ValueText( KMPXMediaGeneralMimeType );
+                MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, mimeType = %S", &mimeType);   
+                
+                // Verify if WMA, get the duration
+                if( mimeType.Compare(KWmaMimeType) == 0 || mimeType.Compare(KWmaCafMimeType) == 0 )
+                    {
+                    MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL- WMA");                         
+
+                    // Perform the duration conversion
+                    TLex lexer( *value );
+                    TInt32 duration ( 0 );
+                    lexer.Val( duration );   // [second]      
+                    duration *= 1000;        // [msec]
+                
+                    aMedia.SetTObjectValueL<TInt32>( KMPXMediaGeneralDuration,
+                                                duration );      
+                
+                    MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL- duration = %i", duration);  
+                    }
+                break;
+                }
             case EMetaDataOriginalArtist:  // fall through
             case EMetaDataVendor:          // fall through
             case EMetaDataRating:          // fall through
             case EMetaDataUniqueFileIdentifier:  // fall through
-            case EMetaDataDuration:        // fall through
             case EMetaDataDate:            // fall through
                 {
                 // not used
@@ -580,33 +599,49 @@
     
     iDrmMediaUtility->Close();
     
-    // File Size
+    //
+    // File Size --- The following needs MMF support
     //
     TInt size( 0 );
     if( aFileErr == KErrNone )
         {
-        aFileHandle.Size( size );
-        aProp.SetTObjectValueL<TInt>( KMPXMediaGeneralSize,
-                                      size );
+        const TDesC& mimeType = aProp.ValueText( KMPXMediaGeneralMimeType );
+        MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, mimeType = %S", &mimeType);   
+        
+        // Verify if WMA, skip getting info from MMF
+        if( mimeType.Compare(KWmaMimeType) == 0 || mimeType.Compare(KWmaCafMimeType) == 0 )
+            {
+            // No need to get MMF support
+            MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL, skip MMF ");   
+            }
+        else
+            {
+            MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL, get MMF controller");   
+            aFileHandle.Size( size );
+            aProp.SetTObjectValueL<TInt>( KMPXMediaGeneralSize, size );
 
-        // Duration, bitrate, samplerate, etc
-        //
-        if( !aMetadataOnly )
+            // Duration, bitrate, samplerate, etc
+            //
+            if( !aMetadataOnly )
             {
-            TRAPD(err2, iFileInfoUtil->OpenFileL(
+                TRAPD(err2, iFileInfoUtil->OpenFileL(
                           aFileHandle, 
                           aProp.ValueText(KMPXMediaGeneralMimeType)));
-            MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, file info util error %i", err2);
-            if( KErrNone == err2 )
-                {
-                aProp.SetTObjectValueL<TUint>( KMPXMediaAudioBitrate,
-                                               iFileInfoUtil->BitRate() );
-                aProp.SetTObjectValueL<TUint>( KMPXMediaAudioSamplerate,
-                                               iFileInfoUtil->SampleRate() );
-                TInt64 duration = (TInt64) iFileInfoUtil->Duration().Int64() / 1000; // ms
-                aProp.SetTObjectValueL<TInt32>( KMPXMediaGeneralDuration,
-                                              duration );
-                MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL -- duration %i", duration);
+                MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, file info util error %i", err2);
+                if( KErrNone == err2 )
+                    {
+                    aProp.SetTObjectValueL<TUint>( KMPXMediaAudioBitrate,
+                                                   iFileInfoUtil->BitRate() );
+                    aProp.SetTObjectValueL<TUint>( KMPXMediaAudioSamplerate,
+                                                   iFileInfoUtil->SampleRate() );
+                    TInt64 duration = (TInt64) iFileInfoUtil->Duration().Int64() / 1000; // ms
+                    aProp.SetTObjectValueL<TInt32>( KMPXMediaGeneralDuration,
+                                                    duration );
+
+                    MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL -- duration %i", duration);
+                    }
+                
+                iFileInfoUtil->Reset();
                 }
             }
         }
@@ -618,8 +653,6 @@
     //
     aProp.SetTObjectValueL( KMPXMediaGeneralFlags,
                             dbFlags );
-
-    iFileInfoUtil->Reset();
     
     MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL --->");
     }
@@ -667,8 +700,10 @@
         MThumbnailData& /*aThumbnail*/, TThumbnailRequestId /*aId*/ )
     {
     MPX_FUNC("CMPXMetadataExtractor::ThumbnailReady()");
+    MPX_DEBUG2("CMPXMetadataExtractor::ThumbnailReady(): iOutstandingThumbnailRequest %d",
+        iOutstandingThumbnailRequest);
     iOutstandingThumbnailRequest--;
-    if ( iOutstandingThumbnailRequest <= KMPXMaxThumbnailRequest )
+    if ( iOutstandingThumbnailRequest < KMPXMaxThumbnailRequest )
         {
         StopWaitLoop();
         }
@@ -867,8 +902,10 @@
      {
      MPX_FUNC("CMPXMetadataExtractor::CheckBeforeSendRequest()");
 #ifdef RD_MPX_TNM_INTEGRATION
+    MPX_DEBUG2("CMPXMetadataExtractor::CheckBeforeSendRequest(): iOutstandingThumbnailRequest %d",
+        iOutstandingThumbnailRequest);
 	// If thumbnail creation is ongoing, wait til it is done
-    if ( iOutstandingThumbnailRequest > KMPXMaxThumbnailRequest )
+    if ( iOutstandingThumbnailRequest >= KMPXMaxThumbnailRequest )
         {
         MPX_DEBUG1("CMPXMetadataExtractor::CheckBeforeSendRequest(): Thumbnail creation ongoing!");
         iTNMBlockCount++;
--- a/mmappcomponents/harvester/server/group/mpxharvester.mmp	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappcomponents/harvester/server/group/mpxharvester.mmp	Wed Apr 14 16:28:17 2010 +0300
@@ -23,8 +23,12 @@
 TARGET                  mpxharvesterserver.exe
 TARGETTYPE              exe
 UID                     0 0x101FFCA9
+#ifdef WINSCW
 EPOCHEAPSIZE            0x1000 0x500000
-EPOCSTACKSIZE 0X5000
+#else
+EPOCHEAPSIZE            0x1000 0x800000
+#endif
+EPOCSTACKSIZE           0x5000
 
 CAPABILITY              CAP_SERVER DRM AllFiles
 VENDORID                VID_DEFAULT
@@ -40,7 +44,6 @@
 SOURCE                  mpxfsformatmonitor.cpp
 SOURCE                  mpxmediaremovalmonitor.cpp
 SOURCE                  mpxusbeventhandler.cpp
-SOURCE                  mpxmmcejectmonitor.cpp
 
 USERINCLUDE             ../inc
 USERINCLUDE             ../../inc
@@ -60,3 +63,4 @@
 #ifdef RD_MULTIPLE_DRIVE
 LIBRARY                 PlatformEnv.lib
 #endif //RD_MULTIPLE_DRIVE
+LIBRARY                 disknotifyhandler.lib
--- a/mmappcomponents/harvester/server/inc/mpxharvesterengine.h	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappcomponents/harvester/server/inc/mpxharvesterengine.h	Wed Apr 14 16:28:17 2010 +0300
@@ -32,7 +32,6 @@
 class CMPXFsFormatMonitor;
 class CMPXMediaRemovalMonitor;
 class CMPXUsbEventHandler;
-class CMPXMMCEjectMonitor;
 class CMPXMedia;
 class CMPXActiveTaskQueue;
 class CMPXPlaylistEngine;
@@ -306,7 +305,6 @@
     CMPXFsFormatMonitor*      iFormatMonitor;
     CMPXMediaRemovalMonitor*  iMediaRemovalMonitor;
     CMPXUsbEventHandler*      iUSBMonitor;
-    CMPXMMCEjectMonitor*      iMMCMonitor;
 
     // Internal task queue for async operations
     CMPXActiveTaskQueue*      iTaskQueue;
--- a/mmappcomponents/harvester/server/inc/mpxmediaremovalmonitor.h	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappcomponents/harvester/server/inc/mpxmediaremovalmonitor.h	Wed Apr 14 16:28:17 2010 +0300
@@ -20,21 +20,35 @@
 #define CMPXMEDIAREMOVALMONITOR_H
 
 #include <e32base.h>
+#include <disknotifyhandler.h>
 #include "mpxsystemeventobserver.h"
 
 /**
  *  Class to monitors for File System dismount events
+ * 
+ *  The monitor emits events to MMPXSystemEventObserver
+ * 
+ *     EDiskDismountEvent whenever a drive is about to be dismounted (see RFs::NotifyDismount).
+ *     EDiskRemovedEvent  whenever a specified drive has been dismounted or removed
+ *     EDiskInsertedEvent whenever a specified drive has been inserted
+ *
+ *  The observer is expected to prepare the drive for dismounting during the EDiskDismountEvent.
+ *
+ *  Dismount monitoring is automatically subscribed for all non-remote drives.
+ *  Inserted/Removed monitor is subscribed only for the drive given in the constructor.
+ *
  *  @lib Harvester
  *  @since S60 3.0
  */
-class CMPXMediaRemovalMonitor : public CActive
+class CMPXMediaRemovalMonitor : public CBase, 
+                                public MDiskNotifyHandlerCallback
     {
 
 public:
 
     /**
     * Two-phase constructor
-    * @param aDrive drive to monitor
+    * @param aDrive drive to monitor for insertions and removals
     * @param aFs file server session
     * @param aObserver observer to the event
     */
@@ -55,24 +69,24 @@
     * Virtual destructor
     */
     virtual ~CMPXMediaRemovalMonitor();
-
-protected: // From base class 
     
-    /*
-    * From CActive
+    /**
+    * Check the status of the monitored disks
+    *
+    * This check should be done whenever there is a risk that we got
+    * a NotifyDismount even though the drives actually weren't dismounted.
+    * 
     */
-    void RunL();
-    
-    /*
-    * From CActive
-    */
-    void DoCancel();
+    void CheckDriveStatus();
+
+protected: // From Base Class
 
     /**
-    *  From CActive
+    * From MDiskNotifyHandlerCallback
     */
-    TInt RunError(TInt aError);    
-        
+    void HandleNotifyDismount( TInt aError, const TDismountEvent& aEvent );
+    void HandleNotifyDisk( TInt aError, const TDiskEvent& aEvent );
+
 private:
 
     /**
@@ -89,6 +103,7 @@
 
 private: // data
     
+    CDiskNotifyHandler*  iDiskNotifyHandler;  // Disk notification handler
     TInt iDrive;        // Drive that is being monitored
     RFs& iFs;           // File Session, not owned
     TBool iDiskRemoved; // Is the disk inserted
--- a/mmappcomponents/harvester/server/inc/mpxmmcejectmonitor.h	Wed Mar 31 22:26:09 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-/*
-* Copyright (c) 2007 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:  MMC Eject monitor
-*
-*/
-
-
-#ifndef C_MPXMMCEJECTMONITOR_H
-#define C_MPXMMCEJECTMONITOR_H
-
-#include <mpxpskeyobserver.h>
-#include "mpxsystemeventobserver.h"
-
-// FORWARD DECLARATIONS
-class CMPXPSKeyWatcher;
-
-/**
- *  Monitors a SysAp cenrep key for the "eject" mmc menu option
- *
- *  @lib mpxharvester.exe
- *  @since S60 3.1
- */
-NONSHARABLE_CLASS( CMPXMMCEjectMonitor ) : public CBase,
-                                           public MMPXPSKeyObserver
-    {
-
-public:
-
-    /**
-    * Two-phased constructor
-    */
-    static CMPXMMCEjectMonitor* NewL( MMPXSystemEventObserver& aObserver );
-
-    /**
-    * Destructor
-    */
-    virtual ~CMPXMMCEjectMonitor();
-
-protected: // From Base Class
-
-    /**
-    * From MMPXPSKeyObserver
-    */
-    void HandlePSEvent( TUid aUid, TInt aKey );
-
-private:
-    
-    /**
-    * 2nd phase constructor
-    */
-    void ConstructL();
-    
-    /**
-    * Private Constructor
-    */
-    CMPXMMCEjectMonitor( MMPXSystemEventObserver& aObserver );
-    
-private: // data
-
-    CMPXPSKeyWatcher*  iPSKeyWatcher;  // PS key watcher for USB PS key
-   
-    /*
-    * Observer interface to callback to an observer
-    */
-    MMPXSystemEventObserver& iObserver; // Not owned
-    };
-
-#endif // C_MPXMMCEJECTMONITOR_H
--- a/mmappcomponents/harvester/server/src/mpxfsformatmonitor.cpp	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappcomponents/harvester/server/src/mpxfsformatmonitor.cpp	Wed Apr 14 16:28:17 2010 +0300
@@ -142,6 +142,12 @@
         }
     else  // TOperationType::EEnd or TOperationType::EAbort
         {
+        //Ignore if formatting is ongoing
+        TBool formatting = iBackupSession->IsBackupOperationRunning();
+        if ( formatting )
+        	{
+            return;
+        	}
         for(TInt i=0; i<KDriveCount; ++i)
             {
             iObserver.HandleSystemEventL(EFormatEndEvent, iBackupDrives[i]);
--- a/mmappcomponents/harvester/server/src/mpxharvesterengine.cpp	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappcomponents/harvester/server/src/mpxharvesterengine.cpp	Wed Apr 14 16:28:17 2010 +0300
@@ -38,7 +38,6 @@
 #include "mpxfsformatmonitor.h"
 #include "mpxmediaremovalmonitor.h"
 #include "mpxusbeventhandler.h"
-#include "mpxmmcejectmonitor.h"
 #include "mpxharvesterfilehandler.h"
 #include "mpxharvesterengineobserver.h"
 #include "mpxhvsmsg.h"
@@ -64,7 +63,6 @@
     delete iFormatMonitor;
     delete iMediaRemovalMonitor;
     delete iUSBMonitor;
-    delete iMMCMonitor;
 
     delete iFileHandler;
     iFsSession.Close();
@@ -110,8 +108,6 @@
     // USB Event monitor
     iUSBMonitor = CMPXUsbEventHandler::NewL( *this );
 
-    // MMC Event handling
-    iMMCMonitor = CMPXMMCEjectMonitor::NewL( *this );
 
     // File handler to handle file related events
     iFileHandler = CMPXHarvesterFileHandler::NewL( iFsSession );
@@ -455,7 +451,7 @@
     TBool notify(ETrue);
     switch( aEvent )
         {
-        case EPowerKeyEjectEvent:
+        case EDiskDismountEvent:
             {
             notify=EFalse;
             TRAP_IGNORE( DoStopPlaybackL() );
@@ -470,16 +466,15 @@
             iDiskOpActive = ETrue;
             TRAP_IGNORE( DoStopPlaybackL() );
             }
-        default: //lint !e616 !e825
-            if( !iTempCollectionUtil )
-                {
-                iTempCollectionUtil = MMPXCollectionUtility::NewL( NULL, KMcModeDefault );
-                }
             break;
         }
 
     // Send a message to the collection server about the event
     //
+    if( !iTempCollectionUtil )
+        {
+        iTempCollectionUtil = MMPXCollectionUtility::NewL( NULL, KMcModeDefault );
+        }
     if( notify )
         {
         TRAP_IGNORE(
@@ -487,6 +482,13 @@
                                                           aData )
              );
         }
+	else if ( aEvent == EDiskDismountEvent ) 
+	    {
+        TRAP_IGNORE
+		    ( 
+            iTempCollectionUtil->Collection().CommandL ( EMcCloseCollection, aData ) 
+            );
+		}
 
     // Avoid Message queue already exist problem
     //
@@ -514,6 +516,15 @@
                 iTempCollectionUtil = NULL;
                 }
         }
+        
+    if ( aEvent == EUSBMassStorageEndEvent )
+        {
+        // In some cases visit to USB Mass Storage mode can be so brief
+        // that drives are actually not dismounted at all even though we
+        // get a NotifyDismount event. In such cases we need to re-issue
+        // the NotifyDismount requests.
+        iMediaRemovalMonitor->CheckDriveStatus();
+        }
     }
 
 // ---------------------------------------------------------------------------
--- a/mmappcomponents/harvester/server/src/mpxmediaremovalmonitor.cpp	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappcomponents/harvester/server/src/mpxmediaremovalmonitor.cpp	Wed Apr 14 16:28:17 2010 +0300
@@ -18,6 +18,7 @@
 
 #include <e32base.h>
 #include <f32file.h>
+#include <driveinfo.h>
 #include <mpxlog.h>
 #include "mpxmediaremovalmonitor.h"
 
@@ -27,14 +28,12 @@
 //
 CMPXMediaRemovalMonitor::CMPXMediaRemovalMonitor
                   ( TInt aDrive, RFs& aFs, MMPXSystemEventObserver& aObserver ) 
-                                                       : CActive(EPriorityHigh),
-                                                         iDrive( aDrive ),
+                                                       : iDrive( aDrive ),
                                                          iFs( aFs ),
                                                          iDiskRemoved( EFalse ),
                                                          iObserver( aObserver )
                                                          
     {
-    CActiveScheduler::Add(this);
     }
 
 
@@ -44,19 +43,11 @@
 //
 void CMPXMediaRemovalMonitor::ConstructL()
     {
-    MPX_DEBUG1(_L("CMPXMediaRemovalMonitor::ConstructL <---"));
+    MPX_FUNC("CMPXMediaRemovalMonitor::ConstructL");    	
+    iDiskNotifyHandler = CDiskNotifyHandler::NewL(*this, iFs);
+    CheckDriveStatus();
     
-    // Initial state
-    TDriveInfo drive;
-	User::LeaveIfError(iFs.Drive(drive, TInt(iDrive)));
-   	iDiskRemoved = (drive.iType == EMediaNotPresent);
-
-    // Start listening
-    TNotifyType notType(ENotifyDisk);
-    iFs.NotifyChange( notType, iStatus );
-    SetActive();
-    
-    MPX_DEBUG1(_L("CMPXMediaRemovalMonitor::ConstructL --->"));
+    iDiskNotifyHandler->NotifyDisk();
     }
 
 
@@ -99,74 +90,95 @@
 //
 CMPXMediaRemovalMonitor::~CMPXMediaRemovalMonitor()
     {
-    Cancel();
+    delete iDiskNotifyHandler;
+    }
+    
+void CMPXMediaRemovalMonitor::CheckDriveStatus()
+    {
+    TDriveList driveList;
+    TInt driveCount(0);
+    TInt error = DriveInfo::GetUserVisibleDrives( iFs, driveList, driveCount );
+    if ( error != KErrNone )
+        {
+        MPX_DEBUG2("CMPXMediaRemovalMonitor::CheckDriveStatus GetUserVisibleDrives failed, error %d", error);
+        return;
+        }
+    for( TInt driveNum = EDriveA; driveNum < EDriveZ; driveNum++ )
+        {
+        if ( driveNum != EDriveC && driveList[driveNum] )
+            {
+            TDriveInfo driveInfo;
+            if (iFs.Drive(driveInfo, driveNum) == KErrNone)
+               {
+               if ( (driveInfo.iType != EMediaNotPresent) && ! (driveInfo.iDriveAtt & KDriveAttRemote) )
+                   {
+                   TInt error = iDiskNotifyHandler->NotifyDismount( driveNum );
+                   MPX_DEBUG3("CMPXMediaRemovalMonitor::CheckDriveStatus monitoring drive %d for dismounts, error %d", driveNum, error);
+                   }
+                }
+            if ( driveNum == iDrive )
+                {
+                iDiskRemoved = driveInfo.iType == EMediaNotPresent;
+                }
+            }
+        }
     }
 
-    
 // ---------------------------------------------------------------------------
-// Service the request
+// Callback when disk state has changed
 // ---------------------------------------------------------------------------
 //
-void CMPXMediaRemovalMonitor::RunL()
+void CMPXMediaRemovalMonitor::HandleNotifyDisk( TInt aError, const TDiskEvent& aEvent )
     {
-    MPX_DEBUG1(_L("CMPXMediaRemovalMonitor::RunL <---"));
-    
-    // Re-subscribe to event.
-    TNotifyType notType(ENotifyDisk);
-    iFs.NotifyChange( notType, iStatus );
-    SetActive();
-    
-    // Check state
-    TDriveInfo drive;
-	User::LeaveIfError(iFs.Drive(drive, TInt(iDrive)));
-	
-	// Notify Observer
-    switch(drive.iType)
-        {
-        case EMediaNotPresent:
-            {
-            if (!iDiskRemoved)
+    MPX_DEBUG4("-->CMPXMediaRemovalMonitor::HandleNotifyDisk aError=%d event=%d drive=%d", aError, aEvent.iType, aEvent.iDrive);
+	  if ( aError == KErrNone )
+	      {
+	      if ( aEvent.iType == EDiskRemoved
+             || aEvent.iType == EDiskStatusChanged && aEvent.iInfo.iType == EMediaNotPresent )
+	          {
+	          if ( aEvent.iDrive == iDrive && !iDiskRemoved )
                 {
                 iObserver.HandleSystemEventL( EDiskRemovedEvent, iDrive );
+                iDiskRemoved = ETrue;
                 }
-            iDiskRemoved = ETrue;
-            break;
-            }
-        default:
-            {
-            if ( iDiskRemoved &&
-        		 ( drive.iMediaAtt & ( KMediaAttLockable|KMediaAttLocked|KMediaAttHasPassword ) ) != 
- 				 ( KMediaAttLockable|KMediaAttLocked|KMediaAttHasPassword ) ) 
+        
+	          }
+	      else if ( ( aEvent.iType == EDiskAdded || aEvent.iType == EDiskStatusChanged ) 
+                  && aEvent.iInfo.iType != EMediaNotPresent )
+	          {
+            if ( aEvent.iDrive == iDrive 
+            	   && iDiskRemoved 
+                 && ( aEvent.iInfo.iMediaAtt & ( KMediaAttLockable|KMediaAttLocked|KMediaAttHasPassword ) ) 
+                    != ( KMediaAttLockable|KMediaAttLocked|KMediaAttHasPassword ) )
                 {
                 iObserver.HandleSystemEventL( EDiskInsertedEvent, iDrive );
                 iDiskRemoved = EFalse;
                 }
-            break;
-            }
+                
+            if ( !( aEvent.iInfo.iDriveAtt & KDriveAttRemote ) ) 
+                {
+                TInt error = iDiskNotifyHandler->NotifyDismount( aEvent.iDrive );
+                MPX_DEBUG3("CMPXMediaRemovalMonitor::HandleNotifyDisk monitoring drive %d for dismounts, error %d", aEvent.iDrive, error);
+                }
+	          }
         }
-    
+            
+    MPX_DEBUG1("<--CMPXMediaRemovalMonitor::HandleNotifyDisk");
+    }   
 
-    MPX_DEBUG1(_L("CMPXMediaRemovalMonitor::RunL --->"));
-    }
     
 // ---------------------------------------------------------------------------
-// Cancel NotifyChange request from file system
+// Callback when disk is about to be dismounted
 // ---------------------------------------------------------------------------
 //
-void CMPXMediaRemovalMonitor::DoCancel()
+void CMPXMediaRemovalMonitor::HandleNotifyDismount( TInt aError, const TDismountEvent& aEvent )
     {
-    iFs.NotifyChangeCancel();
+    MPX_DEBUG3("-->CMPXMediaRemovalMonitor::HandleNotifyDismount aError=%d drive=%d", aError, aEvent.iDrive);
+    if (aError == KErrNone)
+        {
+        TRAP_IGNORE( iObserver.HandleSystemEventL( EDiskDismountEvent, aEvent.iDrive ) );
+        TInt error = iDiskNotifyHandler->AllowDismount( aEvent.iDrive );
+        MPX_DEBUG3("CMPXMediaRemovalMonitor::HandleNotifyDismount allowed dismount of drive %d, error %d", aEvent.iDrive, error);
+        }
+    MPX_DEBUG1("<--CMPXMediaRemovalMonitor::HandleNotifyDismount");
     }
-    
-// ----------------------------------------------------------------------------
-// Handles a leave occurring in the request completion event handler RunL()
-// Don't care if client has a User::Leave() in RunL(), keep monitoring for events
-// ----------------------------------------------------------------------------
-//
-TInt CMPXMediaRemovalMonitor::RunError(TInt aError)
-    {
-    MPX_DEBUG2("CMPXMediaRemovalMonitor::RunError(%d)", aError );
-    (void) aError;  // avoid compile warning in urel
-    
-    return KErrNone;
-    }           
--- a/mmappcomponents/harvester/server/src/mpxmmcejectmonitor.cpp	Wed Mar 31 22:26:09 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,98 +0,0 @@
-/*
-* Copyright (c) 2007 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:  Monitor for PS Key changes from SysAp ( ME specific )
-*
-*/
-
-
-#include <e32base.h>
-#include <e32property.h>
-#include <mpxpskeywatcher.h>
-#include <mpxlog.h>
-#include "mpxmmcejectmonitor.h"
-
-// CONSTANTS
-const TUid  KMmcEjectAppUid = { 0x101FFAFC };
-const TUint KKeyMmcEjectOperation = 10;
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// Constructor
-// ---------------------------------------------------------------------------
-//
-CMPXMMCEjectMonitor::CMPXMMCEjectMonitor( MMPXSystemEventObserver& aObserver ) :
-                                        iObserver( aObserver )
-    {
-    
-    }
-
-
-// ---------------------------------------------------------------------------
-// 2nd phased Constructor
-// ---------------------------------------------------------------------------
-//
-void CMPXMMCEjectMonitor::ConstructL()
-    {
-    MPX_DEBUG1(_L("CMPXMMCEjectMonitor::ConstructL <---"));
-    
-    iPSKeyWatcher = CMPXPSKeyWatcher::NewL( KMmcEjectAppUid, 
-                                            KKeyMmcEjectOperation,
-                                            this );
-    MPX_DEBUG1(_L("CMPXMMCEjectMonitor::ConstructL --->"));
-    }
-
-
-// ---------------------------------------------------------------------------
-// Two-Phase Constructor
-// ---------------------------------------------------------------------------
-//
-CMPXMMCEjectMonitor* CMPXMMCEjectMonitor::NewL( MMPXSystemEventObserver& aObserver )
-    {
-    CMPXMMCEjectMonitor* self = new( ELeave ) CMPXMMCEjectMonitor( aObserver );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// Destructor
-// ---------------------------------------------------------------------------
-//
-CMPXMMCEjectMonitor::~CMPXMMCEjectMonitor()
-    {
-    delete iPSKeyWatcher;
-    }
-
-// ---------------------------------------------------------------------------
-// Callback when a cenrep key is modified
-// ---------------------------------------------------------------------------
-//
-void CMPXMMCEjectMonitor::HandlePSEvent( TUid /*aUid*/, TInt /*aKey*/ )
-    {
-    MPX_DEBUG1(_L("CMPXMMCEjectMonitor::HandlePSEvent <---"));
-    TInt value;
-    iPSKeyWatcher->GetValue( value );
-    
-    // MMC About to be ejected from power key menu
-    //
-    if( value == 1 )
-        {
-        TRAP_IGNORE( iObserver.HandleSystemEventL( EPowerKeyEjectEvent, 0 ) );
-        }
-    MPX_DEBUG1(_L("CMPXMMCEjectMonitor::HandlePSEvent --->"));
-    }
-
-// END OF FILE
--- a/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpmetadataaccesswrapper.h	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpmetadataaccesswrapper.h	Wed Apr 14 16:28:17 2010 +0300
@@ -124,7 +124,7 @@
     * Deletes metadata information associated with the object
     * @param aObject, the object need to be deleted
     */
-    void DeleteObjectL( const CMTPObjectMetaData& aObject );
+    IMPORT_C void DeleteObjectL( const CMTPObjectMetaData& aObject );
 
     /**
     * Set current  drive info
@@ -228,7 +228,7 @@
     TBool iOpenSession;
 
     MMTPDataProviderFramework& iFramework;
-    RFs& iFs;	// should not remove this member data!!!
+    RFs& iFs;    // should not remove this member data!!!
 
     CDesCArray* iAbstractMediaArray;
 
Binary file mmappcomponents/mmmtpdataprovider/install/rom/mmmtpdpstub.pkg has changed
Binary file mmappcomponents/mmmtpdataprovider/install/rom/mmmtpdpupdate.pkg has changed
Binary file mmappcomponents/mmmtpdataprovider/install/rom/mmmtpdpupdatedebug.pkg has changed
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataproviderenumerator.h	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataproviderenumerator.h	Wed Apr 14 16:28:17 2010 +0300
@@ -99,10 +99,6 @@
         TInt aError = KErrNone );
 
     void InitStorageL( );
-
-    /**
-    * Scan next storage
-    */
     void ScanNextL();
 
     /**
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovider.cpp	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovider.cpp	Wed Apr 14 16:28:17 2010 +0300
@@ -118,7 +118,7 @@
     iSupportedPropPlaylist.Close();
     iSupportedPropAll.Close();
 
-    PRINT( _L( "MM MTP => CAbstractMediaMtpDataProvider::~CAbstractMediaMtpDataProvider" ) );
+    PRINT( _L( "MM MTP <= CAbstractMediaMtpDataProvider::~CAbstractMediaMtpDataProvider" ) );
     }
 
 void CAbstractMediaMtpDataProvider::Cancel()
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderenumerator.cpp	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderenumerator.cpp	Wed Apr 14 16:28:17 2010 +0300
@@ -269,7 +269,7 @@
 //
 void CAbstractMediaMtpDataProviderEnumerator::ScanNextL()
     {
-    while (iStorages.Count() > 0)
+    while ( iStorages.Count() > 0 )
         {
         while ( iEnumState < EEnumCount )
             {
@@ -284,14 +284,15 @@
                 return;
                 }
             ++iEnumState;
-            if (iEnumState == EEnumCount)
+            if ( iEnumState == EEnumCount )
                 {
                 break;
                 }
             InitStorageL();
             }
+
         iStorages.Remove( 0 );
-        if (iStorages.Count() == 0)
+        if ( iStorages.Count() == 0 )
             {
             break;
             }
@@ -313,8 +314,6 @@
 //
 void CAbstractMediaMtpDataProviderEnumerator::RunL()
     {
-    PRINT( _L( "MM MTP => CAbstractMediaMtpDataProviderEnumerator::RunL" ) );
-
     // insert all abstract medias into handle db of framework
     CMPXMedia* media = ( *iAbstractMedias )[iCurrentIndex];
     
@@ -411,21 +410,39 @@
     TUint32 parentHandle = iFramework.ObjectMgr().HandleL( parser.DriveAndPath() );
     PERFLOGSTOP( KObjectManagerObjectUid );
 
-    object->SetUint( CMTPObjectMetaData::EParentHandle, parentHandle );
-
-    PERFLOGSTART( KObjectManagerInsert );
-    iObjectMgr.InsertObjectL( *object );
-    PERFLOGSTOP( KObjectManagerInsert );
-
-    CleanupStack::PopAndDestroy( object );// - object
+    // MTP FW returns KMTPHandleNone for parentHandle in two situations:
+    // 1. The path doesn't exist
+    // 2. The object is under root directory
+    if ( parentHandle == KMTPHandleNone )
+        {
+        if ( BaflUtils::PathExists( iFramework.Fs(), parser.DriveAndPath() ) )
+            {
+            parentHandle = KMTPHandleNoParent;
+            }
+        else
+            {
+            iDataProvider.GetWrapperL().DeleteObjectL( *object );
+            }
+        }
 
-    //Only remember the playlist file for clean up
-    if( iEnumState == EEnumPlaylist )
+    if ( parentHandle != KMTPHandleNone )
         {
-        iDataProvider.GetWrapperL().CreateDummyFile( aSuid );
+        object->SetUint( CMTPObjectMetaData::EParentHandle, parentHandle );
+
+        PERFLOGSTART( KObjectManagerInsert );
+        iObjectMgr.InsertObjectL( *object );
+        PERFLOGSTOP( KObjectManagerInsert );
+
+        CleanupStack::PopAndDestroy( object );// - object
 
-        // remember the abstract media file for clean up
-        iDataProvider.GetWrapperL().AddDummyFileL( aSuid );
+        //Only remember the playlist file for clean up
+        if( iEnumState == EEnumPlaylist )
+            {
+            iDataProvider.GetWrapperL().CreateDummyFile( aSuid );
+
+            // remember the abstract media file for clean up
+            iDataProvider.GetWrapperL().AddDummyFileL( aSuid );
+            }
         }
 
     PRINT( _L( "MM MTP <= CAbstractMediaMtpDataProviderEnumerator::AddEntryL" ) );
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderrenameobject.cpp	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderrenameobject.cpp	Wed Apr 14 16:28:17 2010 +0300
@@ -89,14 +89,12 @@
         iWrapper.AddDummyFileL( iFileName );
         // Do not update MPX db to keep the same behavior in mass storage and device file manager.
         }
-    else
-        {
-        TRAPD( err, iWrapper.RenameObjectL( *iObjectInfo, iFileName ) );
+
+     TRAPD( err, iWrapper.RenameObjectL( *iObjectInfo, iFileName ) );
 
-         // should not fail for 1 file, keep it going, as folder already renamed
-         if ( err != KErrNone )
-             PRINT1( _L( "MM MTP <> CRenameObject::PerformAdditionalActionL err = %d" ), err );
-        }
+     // should not fail for 1 file, keep it going, as folder already renamed
+     if ( err != KErrNone )
+         PRINT1( _L( "MM MTP <> CRenameObject::PerformAdditionalActionL err = %d" ), err );
 
     // the reference DB use PUID
     // so we needn't to update the reference DB
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/mediamtpdataproviderconst.h	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/mediamtpdataproviderconst.h	Wed Apr 14 16:28:17 2010 +0300
@@ -111,7 +111,7 @@
 enum TMmMtpFramesPerThousandSecondsRange
     {
     EMTPMinFramesPerThousandSeconds  = 0x00000000,
-    EMTPMaxFramesPerThousandSeconds  = 0x00007530,  // 30000 frame per ms (30 frame/s), standard for progressive content
+    EMTPMaxFramesPerThousandSeconds  = 0x00007530,  // 30000 frame per thousand seconds (30 frame/s), standard for progressive content
     EMTPStepFramesPerThousandSeconds = 0x00000001
     };
 
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/bwins/mmmtpdprequestprocessoru.def	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/bwins/mmmtpdprequestprocessoru.def	Wed Apr 14 16:28:17 2010 +0300
@@ -4,156 +4,157 @@
 	?NewL@CDeleteObject@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 3 NONAME ; class MMmRequestProcessor * CDeleteObject::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
 	?StartL@CRenameObject@@QAEXKABVTDesC16@@@Z @ 4 NONAME ; void CRenameObject::StartL(unsigned long, class TDesC16 const &)
 	??1CRequestUnknown@@UAE@XZ @ 5 NONAME ; CRequestUnknown::~CRequestUnknown(void)
-	?Release@CRequestProcessor@@MAEXXZ @ 6 NONAME ; void CRequestProcessor::Release(void)
-	?HandleRequestL@CRequestProcessor@@MAEHABVTMTPTypeRequest@@W4TMTPTransactionPhase@@@Z @ 7 NONAME ; int CRequestProcessor::HandleRequestL(class TMTPTypeRequest const &, enum TMTPTransactionPhase)
-	??1CGetInterdependentPropDesc@@UAE@XZ @ 8 NONAME ; CGetInterdependentPropDesc::~CGetInterdependentPropDesc(void)
-	?OpenSessionL@CMmMtpDpAccessSingleton@@SAXXZ @ 9 NONAME ; void CMmMtpDpAccessSingleton::OpenSessionL(void)
-	?ServiceL@CGetPartialObject@@MAEXXZ @ 10 NONAME ; void CGetPartialObject::ServiceL(void)
-	??0CGetObjectInfo@@AAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 11 NONAME ; CGetObjectInfo::CGetObjectInfo(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?DoHandleResponsePhaseL@CRequestProcessor@@MAEHXZ @ 12 NONAME ; int CRequestProcessor::DoHandleResponsePhaseL(void)
-	?NewL@CGetObjectPropDesc@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 13 NONAME ; class MMmRequestProcessor * CGetObjectPropDesc::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	??0CGetObjectPropValue@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 14 NONAME ; CGetObjectPropValue::CGetObjectPropValue(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?CheckRequestL@CSetObjectPropList@@MAE?AW4TMTPResponseCode@@XZ @ 15 NONAME ; enum TMTPResponseCode CSetObjectPropList::CheckRequestL(void)
-	?RunL@CRequestProcessor@@MAEXXZ @ 16 NONAME ; void CRequestProcessor::RunL(void)
-	?ServiceL@CDeleteObject@@MAEXXZ @ 17 NONAME ; void CDeleteObject::ServiceL(void)
-	?DoCancel@CSetObjectPropList@@MAEXXZ @ 18 NONAME ; void CSetObjectPropList::DoCancel(void)
-	?CleanupDatabaseL@CMmMtpDpMetadataAccessWrapper@@QAEXXZ @ 19 NONAME ; void CMmMtpDpMetadataAccessWrapper::CleanupDatabaseL(void)
-	?ServiceL@CGetObjectPropsSupported@@MAEXXZ @ 20 NONAME ; void CGetObjectPropsSupported::ServiceL(void)
-	?NewL@CSetObjectReferences@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 21 NONAME ; class MMmRequestProcessor * CSetObjectReferences::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?Release@CMmMtpDpAccessSingleton@@SAXXZ @ 22 NONAME ; void CMmMtpDpAccessSingleton::Release(void)
-	?UsbDisconnect@CSendObject@@MAEXXZ @ 23 NONAME ; void CSendObject::UsbDisconnect(void)
-	?ServiceL@CGetFormatCapabilities@@MAEXXZ @ 24 NONAME ; void CGetFormatCapabilities::ServiceL(void)
-	?GetAllReferenceL@CMmMtpDpMetadataAccessWrapper@@QAEXPAVCMPXMedia@@AAVCDesC16Array@@@Z @ 25 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetAllReferenceL(class CMPXMedia *, class CDesC16Array &)
-	??1CSetObjectPropList@@UAE@XZ @ 26 NONAME ; CSetObjectPropList::~CSetObjectPropList(void)
-	?ServiceL@CSetObjectPropList@@MAEXXZ @ 27 NONAME ; void CSetObjectPropList::ServiceL(void)
-	??0CMoveObject@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 28 NONAME ; CMoveObject::CMoveObject(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	??0CRequestUnknown@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@@Z @ 29 NONAME ; CRequestUnknown::CRequestUnknown(class MMTPDataProviderFramework &, class MMTPConnection &)
-	?ConstructL@CGetObjectPropList@@IAEXXZ @ 30 NONAME ; void CGetObjectPropList::ConstructL(void)
-	??1CSendObject@@UAE@XZ @ 31 NONAME ; CSendObject::~CSendObject(void)
-	?ServiceMetaDataFromWrapperL@CGetObjectPropValue@@IAEXGAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 32 NONAME ; void CGetObjectPropValue::ServiceMetaDataFromWrapperL(unsigned short, class MMTPType &, class CMTPObjectMetaData const &)
-	?NewL@CGetObject@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 33 NONAME ; class MMmRequestProcessor * CGetObject::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	??1CGetObjectPropValue@@UAE@XZ @ 34 NONAME ; CGetObjectPropValue::~CGetObjectPropValue(void)
-	?CreateL@CMmMtpDpAccessSingleton@@SAXAAVMMTPDataProviderFramework@@@Z @ 35 NONAME ; void CMmMtpDpAccessSingleton::CreateL(class MMTPDataProviderFramework &)
-	??1CGetFormatCapabilities@@UAE@XZ @ 36 NONAME ; CGetFormatCapabilities::~CGetFormatCapabilities(void)
-	?ServiceL@CSetObjectReferences@@EAEXXZ @ 37 NONAME ; void CSetObjectReferences::ServiceL(void)
-	?DoHandleDataIToRPhaseL@CRequestProcessor@@MAEHXZ @ 38 NONAME ; int CRequestProcessor::DoHandleDataIToRPhaseL(void)
-	??0CGetObjectPropList@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 39 NONAME ; CGetObjectPropList::CGetObjectPropList(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?ConstructL@CCopyObject@@IAEXXZ @ 40 NONAME ; void CCopyObject::ConstructL(void)
-	?SetMetaDataToWrapper@CPropertySettingUtility@@QAE?AW4TMTPResponseCode@@AAVMMmMtpDpConfig@@GAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 41 NONAME ; enum TMTPResponseCode CPropertySettingUtility::SetMetaDataToWrapper(class MMmMtpDpConfig &, unsigned short, class MMTPType &, class CMTPObjectMetaData const &)
-	?ServiceL@CGetObjectPropValue@@MAEXXZ @ 42 NONAME ; void CGetObjectPropValue::ServiceL(void)
-	??1CRenameObject@@UAE@XZ @ 43 NONAME ; CRenameObject::~CRenameObject(void)
-	?Match@CRequestProcessor@@MBEHABVTMTPTypeEvent@@AAVMMTPConnection@@@Z @ 44 NONAME ; int CRequestProcessor::Match(class TMTPTypeEvent const &, class MMTPConnection &) const
-	?DoHandleCompletingPhaseL@CSendObject@@MAEHXZ @ 45 NONAME ; int CSendObject::DoHandleCompletingPhaseL(void)
-	?GetDrmStatus@MmMtpDpUtility@@SAHABVTDesC16@@@Z @ 46 NONAME ; int MmMtpDpUtility::GetDrmStatus(class TDesC16 const &)
-	?RunL@CRenameObject@@MAEXXZ @ 47 NONAME ; void CRenameObject::RunL(void)
-	??0CSetObjectReferences@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 48 NONAME ; CSetObjectReferences::CSetObjectReferences(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	??0CRequestProcessor@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@HPBUTMTPRequestElementInfo@@@Z @ 49 NONAME ; CRequestProcessor::CRequestProcessor(class MMTPDataProviderFramework &, class MMTPConnection &, int, struct TMTPRequestElementInfo const *)
-	?ServiceL@CSendObject@@MAEXXZ @ 50 NONAME ; void CSendObject::ServiceL(void)
-	?Request@CRequestProcessor@@MBEABVTMTPTypeRequest@@XZ @ 51 NONAME ; class TMTPTypeRequest const & CRequestProcessor::Request(void) const
-	?DoCancel@CRequestProcessor@@MAEXXZ @ 52 NONAME ; void CRequestProcessor::DoCancel(void)
-	?CheckRequestL@CGetPartialObject@@MAE?AW4TMTPResponseCode@@XZ @ 53 NONAME ; enum TMTPResponseCode CGetPartialObject::CheckRequestL(void)
-	?NewL@CRequestUnknown@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@@Z @ 54 NONAME ; class MMmRequestProcessor * CRequestUnknown::NewL(class MMTPDataProviderFramework &, class MMTPConnection &)
-	??0CGetFormatCapabilities@@AAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 55 NONAME ; CGetFormatCapabilities::CGetFormatCapabilities(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?ConstructL@CGetObjectInfo@@AAEXXZ @ 56 NONAME ; void CGetObjectInfo::ConstructL(void)
-	?UsbDisconnect@CRequestProcessor@@MAEXXZ @ 57 NONAME ; void CRequestProcessor::UsbDisconnect(void)
-	?UpdateMusicCollectionL@CMmMtpDpMetadataAccessWrapper@@QAEXXZ @ 58 NONAME ; void CMmMtpDpMetadataAccessWrapper::UpdateMusicCollectionL(void)
-	??1CMoveObject@@UAE@XZ @ 59 NONAME ; CMoveObject::~CMoveObject(void)
-	?CheckRequestL@CSendObject@@MAE?AW4TMTPResponseCode@@XZ @ 60 NONAME ; enum TMTPResponseCode CSendObject::CheckRequestL(void)
-	??1CRequestProcessor@@MAE@XZ @ 61 NONAME ; CRequestProcessor::~CRequestProcessor(void)
-	?DoCancel@CDeleteObject@@MAEXXZ @ 62 NONAME ; void CDeleteObject::DoCancel(void)
-	??1CGetObject@@UAE@XZ @ 63 NONAME ; CGetObject::~CGetObject(void)
-	?NewL@CGetInterdependentPropDesc@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 64 NONAME ; class MMmRequestProcessor * CGetInterdependentPropDesc::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?DoHandleResponsePhaseL@CSetObjectReferences@@EAEHXZ @ 65 NONAME ; int CSetObjectReferences::DoHandleResponsePhaseL(void)
-	?GetAccessWrapperL@CMmMtpDpAccessSingleton@@SAAAVCMmMtpDpMetadataAccessWrapper@@XZ @ 66 NONAME ; class CMmMtpDpMetadataAccessWrapper & CMmMtpDpAccessSingleton::GetAccessWrapperL(void)
-	??1CGetObjectPropsSupported@@UAE@XZ @ 67 NONAME ; CGetObjectPropsSupported::~CGetObjectPropsSupported(void)
-	?CheckRequestL@CGetObjectPropList@@MAE?AW4TMTPResponseCode@@XZ @ 68 NONAME ; enum TMTPResponseCode CGetObjectPropList::CheckRequestL(void)
-	?HasDataphase@CRequestProcessor@@MBEHXZ @ 69 NONAME ; int CRequestProcessor::HasDataphase(void) const
-	?NewL@CGetObjectPropsSupported@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 70 NONAME ; class MMmRequestProcessor * CGetObjectPropsSupported::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?Connection@CRequestProcessor@@MBEAAVMMTPConnection@@XZ @ 71 NONAME ; class MMTPConnection & CRequestProcessor::Connection(void) const
-	?ConstructL@CGetFormatCapabilities@@AAEXXZ @ 72 NONAME ; void CGetFormatCapabilities::ConstructL(void)
-	??1CPropertySettingUtility@@UAE@XZ @ 73 NONAME ; CPropertySettingUtility::~CPropertySettingUtility(void)
-	??1CGetPartialObject@@UAE@XZ @ 74 NONAME ; CGetPartialObject::~CGetPartialObject(void)
-	?NewL@CGetObjectInfo@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 75 NONAME ; class MMmRequestProcessor * CGetObjectInfo::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?RunError@CSetObjectPropList@@MAEHH@Z @ 76 NONAME ; int CSetObjectPropList::RunError(int)
-	?CheckRequestL@CGetInterdependentPropDesc@@MAE?AW4TMTPResponseCode@@XZ @ 77 NONAME ; enum TMTPResponseCode CGetInterdependentPropDesc::CheckRequestL(void)
-	?Match@CRequestUnknown@@MBEHABVTMTPTypeRequest@@AAVMMTPConnection@@@Z @ 78 NONAME ; int CRequestUnknown::Match(class TMTPTypeRequest const &, class MMTPConnection &) const
-	?ServiceL@CMoveObject@@MAEXXZ @ 79 NONAME ; void CMoveObject::ServiceL(void)
-	?CreateDummyFile@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@@Z @ 80 NONAME ; void CMmMtpDpMetadataAccessWrapper::CreateDummyFile(class TDesC16 const &)
-	?CheckRequestL@CGetObjectPropDesc@@MAE?AW4TMTPResponseCode@@XZ @ 81 NONAME ; enum TMTPResponseCode CGetObjectPropDesc::CheckRequestL(void)
-	?DoHandleRToIPhaseL@CRequestProcessor@@MAEHXZ @ 82 NONAME ; int CRequestProcessor::DoHandleRToIPhaseL(void)
-	?ServiceMetaDataToWrapperL@CSetObjectPropValue@@IAE?AW4TMTPResponseCode@@GAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 83 NONAME ; enum TMTPResponseCode CSetObjectPropValue::ServiceMetaDataToWrapperL(unsigned short, class MMTPType &, class CMTPObjectMetaData const &)
-	?NewCommonObjectPropertyL@CDescriptionUtility@@QAEPAVCMTPTypeObjectPropDesc@@G@Z @ 84 NONAME ; class CMTPTypeObjectPropDesc * CDescriptionUtility::NewCommonObjectPropertyL(unsigned short)
-	?FormatFromFilename@MmMtpDpUtility@@SA?AW4TMTPFormatCode@@ABVTDesC16@@@Z @ 85 NONAME ; enum TMTPFormatCode MmMtpDpUtility::FormatFromFilename(class TDesC16 const &)
-	?CheckRequestL@CSetObjectPropValue@@MAE?AW4TMTPResponseCode@@XZ @ 86 NONAME ; enum TMTPResponseCode CSetObjectPropValue::CheckRequestL(void)
-	??0CPropertySettingUtility@@IAE@XZ @ 87 NONAME ; CPropertySettingUtility::CPropertySettingUtility(void)
-	?Match@CRequestProcessor@@MBEHABVTMTPTypeRequest@@AAVMMTPConnection@@@Z @ 88 NONAME ; int CRequestProcessor::Match(class TMTPTypeRequest const &, class MMTPConnection &) const
-	??0CCopyObject@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 89 NONAME ; CCopyObject::CCopyObject(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?CheckRequestL@CRequestProcessor@@MAE?AW4TMTPResponseCode@@XZ @ 90 NONAME ; enum TMTPResponseCode CRequestProcessor::CheckRequestL(void)
-	?SendResponseL@CRequestProcessor@@IAEXW4TMTPResponseCode@@HPAK@Z @ 91 NONAME ; void CRequestProcessor::SendResponseL(enum TMTPResponseCode, int, unsigned long *)
-	??0CGetPartialObject@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@@Z @ 92 NONAME ; CGetPartialObject::CGetPartialObject(class MMTPDataProviderFramework &, class MMTPConnection &)
-	?DoHandleCompletingPhaseL@CRequestProcessor@@MAEHXZ @ 93 NONAME ; int CRequestProcessor::DoHandleCompletingPhaseL(void)
-	?DeleteDummyFile@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@@Z @ 94 NONAME ; void CMmMtpDpMetadataAccessWrapper::DeleteDummyFile(class TDesC16 const &)
-	?DoSetObjectReferencesL@CSetObjectReferences@@IAEXABVCMTPObjectMetaData@@@Z @ 95 NONAME ; void CSetObjectReferences::DoSetObjectReferencesL(class CMTPObjectMetaData const &)
-	??1CGetObjectInfo@@UAE@XZ @ 96 NONAME ; CGetObjectInfo::~CGetObjectInfo(void)
-	?ServiceL@CRequestUnknown@@MAEXXZ @ 97 NONAME ; void CRequestUnknown::ServiceL(void)
-	?HasDataphase@CSetObjectPropList@@MBEHXZ @ 98 NONAME ; int CSetObjectPropList::HasDataphase(void) const
-	?NewL@CGetObjectReferences@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 99 NONAME ; class MMmRequestProcessor * CGetObjectReferences::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?DoCancel@CRenameObject@@MAEXXZ @ 100 NONAME ; void CRenameObject::DoCancel(void)
-	??1CSetObjectReferences@@UAE@XZ @ 101 NONAME ; CSetObjectReferences::~CSetObjectReferences(void)
-	?Match@CSendObject@@MBEHABVTMTPTypeRequest@@AAVMMTPConnection@@@Z @ 102 NONAME ; int CSendObject::Match(class TMTPTypeRequest const &, class MMTPConnection &) const
-	?NewL@CSetObjectPropList@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 103 NONAME ; class MMmRequestProcessor * CSetObjectPropList::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?GetAllAbstractMediaL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@PAPAVCMPXMediaArray@@W4TMPXGeneralCategory@@@Z @ 104 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetAllAbstractMediaL(class TDesC16 const &, class CMPXMediaArray * *, enum TMPXGeneralCategory)
-	??1CCopyObject@@UAE@XZ @ 105 NONAME ; CCopyObject::~CCopyObject(void)
-	?GetModifiedContentL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@AAHAAVCDesC16Array@@@Z @ 106 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetModifiedContentL(class TDesC16 const &, int &, class CDesC16Array &)
+	?DeleteObjectL@CMmMtpDpMetadataAccessWrapper@@QAEXABVCMTPObjectMetaData@@@Z @ 6 NONAME ; void CMmMtpDpMetadataAccessWrapper::DeleteObjectL(class CMTPObjectMetaData const &)
+	?Release@CRequestProcessor@@MAEXXZ @ 7 NONAME ; void CRequestProcessor::Release(void)
+	?HandleRequestL@CRequestProcessor@@MAEHABVTMTPTypeRequest@@W4TMTPTransactionPhase@@@Z @ 8 NONAME ; int CRequestProcessor::HandleRequestL(class TMTPTypeRequest const &, enum TMTPTransactionPhase)
+	??1CGetInterdependentPropDesc@@UAE@XZ @ 9 NONAME ; CGetInterdependentPropDesc::~CGetInterdependentPropDesc(void)
+	?OpenSessionL@CMmMtpDpAccessSingleton@@SAXXZ @ 10 NONAME ; void CMmMtpDpAccessSingleton::OpenSessionL(void)
+	?ServiceL@CGetPartialObject@@MAEXXZ @ 11 NONAME ; void CGetPartialObject::ServiceL(void)
+	??0CGetObjectInfo@@AAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 12 NONAME ; CGetObjectInfo::CGetObjectInfo(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?DoHandleResponsePhaseL@CRequestProcessor@@MAEHXZ @ 13 NONAME ; int CRequestProcessor::DoHandleResponsePhaseL(void)
+	?NewL@CGetObjectPropDesc@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 14 NONAME ; class MMmRequestProcessor * CGetObjectPropDesc::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	??0CGetObjectPropValue@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 15 NONAME ; CGetObjectPropValue::CGetObjectPropValue(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?CheckRequestL@CSetObjectPropList@@MAE?AW4TMTPResponseCode@@XZ @ 16 NONAME ; enum TMTPResponseCode CSetObjectPropList::CheckRequestL(void)
+	?RunL@CRequestProcessor@@MAEXXZ @ 17 NONAME ; void CRequestProcessor::RunL(void)
+	?ServiceL@CDeleteObject@@MAEXXZ @ 18 NONAME ; void CDeleteObject::ServiceL(void)
+	?DoCancel@CSetObjectPropList@@MAEXXZ @ 19 NONAME ; void CSetObjectPropList::DoCancel(void)
+	?CleanupDatabaseL@CMmMtpDpMetadataAccessWrapper@@QAEXXZ @ 20 NONAME ; void CMmMtpDpMetadataAccessWrapper::CleanupDatabaseL(void)
+	?ServiceL@CGetObjectPropsSupported@@MAEXXZ @ 21 NONAME ; void CGetObjectPropsSupported::ServiceL(void)
+	?NewL@CSetObjectReferences@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 22 NONAME ; class MMmRequestProcessor * CSetObjectReferences::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?Release@CMmMtpDpAccessSingleton@@SAXXZ @ 23 NONAME ; void CMmMtpDpAccessSingleton::Release(void)
+	?UsbDisconnect@CSendObject@@MAEXXZ @ 24 NONAME ; void CSendObject::UsbDisconnect(void)
+	?ServiceL@CGetFormatCapabilities@@MAEXXZ @ 25 NONAME ; void CGetFormatCapabilities::ServiceL(void)
+	?GetAllReferenceL@CMmMtpDpMetadataAccessWrapper@@QAEXPAVCMPXMedia@@AAVCDesC16Array@@@Z @ 26 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetAllReferenceL(class CMPXMedia *, class CDesC16Array &)
+	??1CSetObjectPropList@@UAE@XZ @ 27 NONAME ; CSetObjectPropList::~CSetObjectPropList(void)
+	?ServiceL@CSetObjectPropList@@MAEXXZ @ 28 NONAME ; void CSetObjectPropList::ServiceL(void)
+	??0CMoveObject@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 29 NONAME ; CMoveObject::CMoveObject(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	??0CRequestUnknown@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@@Z @ 30 NONAME ; CRequestUnknown::CRequestUnknown(class MMTPDataProviderFramework &, class MMTPConnection &)
+	?ConstructL@CGetObjectPropList@@IAEXXZ @ 31 NONAME ; void CGetObjectPropList::ConstructL(void)
+	??1CSendObject@@UAE@XZ @ 32 NONAME ; CSendObject::~CSendObject(void)
+	?ServiceMetaDataFromWrapperL@CGetObjectPropValue@@IAEXGAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 33 NONAME ; void CGetObjectPropValue::ServiceMetaDataFromWrapperL(unsigned short, class MMTPType &, class CMTPObjectMetaData const &)
+	?NewL@CGetObject@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 34 NONAME ; class MMmRequestProcessor * CGetObject::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	??1CGetObjectPropValue@@UAE@XZ @ 35 NONAME ; CGetObjectPropValue::~CGetObjectPropValue(void)
+	?CreateL@CMmMtpDpAccessSingleton@@SAXAAVMMTPDataProviderFramework@@@Z @ 36 NONAME ; void CMmMtpDpAccessSingleton::CreateL(class MMTPDataProviderFramework &)
+	??1CGetFormatCapabilities@@UAE@XZ @ 37 NONAME ; CGetFormatCapabilities::~CGetFormatCapabilities(void)
+	?ServiceL@CSetObjectReferences@@EAEXXZ @ 38 NONAME ; void CSetObjectReferences::ServiceL(void)
+	?DoHandleDataIToRPhaseL@CRequestProcessor@@MAEHXZ @ 39 NONAME ; int CRequestProcessor::DoHandleDataIToRPhaseL(void)
+	??0CGetObjectPropList@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 40 NONAME ; CGetObjectPropList::CGetObjectPropList(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?ConstructL@CCopyObject@@IAEXXZ @ 41 NONAME ; void CCopyObject::ConstructL(void)
+	?SetMetaDataToWrapper@CPropertySettingUtility@@QAE?AW4TMTPResponseCode@@AAVMMmMtpDpConfig@@GAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 42 NONAME ; enum TMTPResponseCode CPropertySettingUtility::SetMetaDataToWrapper(class MMmMtpDpConfig &, unsigned short, class MMTPType &, class CMTPObjectMetaData const &)
+	?ServiceL@CGetObjectPropValue@@MAEXXZ @ 43 NONAME ; void CGetObjectPropValue::ServiceL(void)
+	??1CRenameObject@@UAE@XZ @ 44 NONAME ; CRenameObject::~CRenameObject(void)
+	?Match@CRequestProcessor@@MBEHABVTMTPTypeEvent@@AAVMMTPConnection@@@Z @ 45 NONAME ; int CRequestProcessor::Match(class TMTPTypeEvent const &, class MMTPConnection &) const
+	?DoHandleCompletingPhaseL@CSendObject@@MAEHXZ @ 46 NONAME ; int CSendObject::DoHandleCompletingPhaseL(void)
+	?GetDrmStatus@MmMtpDpUtility@@SAHABVTDesC16@@@Z @ 47 NONAME ; int MmMtpDpUtility::GetDrmStatus(class TDesC16 const &)
+	?RunL@CRenameObject@@MAEXXZ @ 48 NONAME ; void CRenameObject::RunL(void)
+	??0CSetObjectReferences@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 49 NONAME ; CSetObjectReferences::CSetObjectReferences(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	??0CRequestProcessor@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@HPBUTMTPRequestElementInfo@@@Z @ 50 NONAME ; CRequestProcessor::CRequestProcessor(class MMTPDataProviderFramework &, class MMTPConnection &, int, struct TMTPRequestElementInfo const *)
+	?ServiceL@CSendObject@@MAEXXZ @ 51 NONAME ; void CSendObject::ServiceL(void)
+	?Request@CRequestProcessor@@MBEABVTMTPTypeRequest@@XZ @ 52 NONAME ; class TMTPTypeRequest const & CRequestProcessor::Request(void) const
+	?DoCancel@CRequestProcessor@@MAEXXZ @ 53 NONAME ; void CRequestProcessor::DoCancel(void)
+	?CheckRequestL@CGetPartialObject@@MAE?AW4TMTPResponseCode@@XZ @ 54 NONAME ; enum TMTPResponseCode CGetPartialObject::CheckRequestL(void)
+	?NewL@CRequestUnknown@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@@Z @ 55 NONAME ; class MMmRequestProcessor * CRequestUnknown::NewL(class MMTPDataProviderFramework &, class MMTPConnection &)
+	??0CGetFormatCapabilities@@AAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 56 NONAME ; CGetFormatCapabilities::CGetFormatCapabilities(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?ConstructL@CGetObjectInfo@@AAEXXZ @ 57 NONAME ; void CGetObjectInfo::ConstructL(void)
+	?UsbDisconnect@CRequestProcessor@@MAEXXZ @ 58 NONAME ; void CRequestProcessor::UsbDisconnect(void)
+	?UpdateMusicCollectionL@CMmMtpDpMetadataAccessWrapper@@QAEXXZ @ 59 NONAME ; void CMmMtpDpMetadataAccessWrapper::UpdateMusicCollectionL(void)
+	??1CMoveObject@@UAE@XZ @ 60 NONAME ; CMoveObject::~CMoveObject(void)
+	?CheckRequestL@CSendObject@@MAE?AW4TMTPResponseCode@@XZ @ 61 NONAME ; enum TMTPResponseCode CSendObject::CheckRequestL(void)
+	??1CRequestProcessor@@MAE@XZ @ 62 NONAME ; CRequestProcessor::~CRequestProcessor(void)
+	?DoCancel@CDeleteObject@@MAEXXZ @ 63 NONAME ; void CDeleteObject::DoCancel(void)
+	??1CGetObject@@UAE@XZ @ 64 NONAME ; CGetObject::~CGetObject(void)
+	?NewL@CGetInterdependentPropDesc@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 65 NONAME ; class MMmRequestProcessor * CGetInterdependentPropDesc::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?DoHandleResponsePhaseL@CSetObjectReferences@@EAEHXZ @ 66 NONAME ; int CSetObjectReferences::DoHandleResponsePhaseL(void)
+	?GetAccessWrapperL@CMmMtpDpAccessSingleton@@SAAAVCMmMtpDpMetadataAccessWrapper@@XZ @ 67 NONAME ; class CMmMtpDpMetadataAccessWrapper & CMmMtpDpAccessSingleton::GetAccessWrapperL(void)
+	??1CGetObjectPropsSupported@@UAE@XZ @ 68 NONAME ; CGetObjectPropsSupported::~CGetObjectPropsSupported(void)
+	?CheckRequestL@CGetObjectPropList@@MAE?AW4TMTPResponseCode@@XZ @ 69 NONAME ; enum TMTPResponseCode CGetObjectPropList::CheckRequestL(void)
+	?HasDataphase@CRequestProcessor@@MBEHXZ @ 70 NONAME ; int CRequestProcessor::HasDataphase(void) const
+	?NewL@CGetObjectPropsSupported@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 71 NONAME ; class MMmRequestProcessor * CGetObjectPropsSupported::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?Connection@CRequestProcessor@@MBEAAVMMTPConnection@@XZ @ 72 NONAME ; class MMTPConnection & CRequestProcessor::Connection(void) const
+	?ConstructL@CGetFormatCapabilities@@AAEXXZ @ 73 NONAME ; void CGetFormatCapabilities::ConstructL(void)
+	??1CPropertySettingUtility@@UAE@XZ @ 74 NONAME ; CPropertySettingUtility::~CPropertySettingUtility(void)
+	??1CGetPartialObject@@UAE@XZ @ 75 NONAME ; CGetPartialObject::~CGetPartialObject(void)
+	?NewL@CGetObjectInfo@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 76 NONAME ; class MMmRequestProcessor * CGetObjectInfo::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?RunError@CSetObjectPropList@@MAEHH@Z @ 77 NONAME ; int CSetObjectPropList::RunError(int)
+	?CheckRequestL@CGetInterdependentPropDesc@@MAE?AW4TMTPResponseCode@@XZ @ 78 NONAME ; enum TMTPResponseCode CGetInterdependentPropDesc::CheckRequestL(void)
+	?Match@CRequestUnknown@@MBEHABVTMTPTypeRequest@@AAVMMTPConnection@@@Z @ 79 NONAME ; int CRequestUnknown::Match(class TMTPTypeRequest const &, class MMTPConnection &) const
+	?ServiceL@CMoveObject@@MAEXXZ @ 80 NONAME ; void CMoveObject::ServiceL(void)
+	?CreateDummyFile@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@@Z @ 81 NONAME ; void CMmMtpDpMetadataAccessWrapper::CreateDummyFile(class TDesC16 const &)
+	?CheckRequestL@CGetObjectPropDesc@@MAE?AW4TMTPResponseCode@@XZ @ 82 NONAME ; enum TMTPResponseCode CGetObjectPropDesc::CheckRequestL(void)
+	?DoHandleRToIPhaseL@CRequestProcessor@@MAEHXZ @ 83 NONAME ; int CRequestProcessor::DoHandleRToIPhaseL(void)
+	?ServiceMetaDataToWrapperL@CSetObjectPropValue@@IAE?AW4TMTPResponseCode@@GAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 84 NONAME ; enum TMTPResponseCode CSetObjectPropValue::ServiceMetaDataToWrapperL(unsigned short, class MMTPType &, class CMTPObjectMetaData const &)
+	?NewCommonObjectPropertyL@CDescriptionUtility@@QAEPAVCMTPTypeObjectPropDesc@@G@Z @ 85 NONAME ; class CMTPTypeObjectPropDesc * CDescriptionUtility::NewCommonObjectPropertyL(unsigned short)
+	?FormatFromFilename@MmMtpDpUtility@@SA?AW4TMTPFormatCode@@ABVTDesC16@@@Z @ 86 NONAME ; enum TMTPFormatCode MmMtpDpUtility::FormatFromFilename(class TDesC16 const &)
+	?CheckRequestL@CSetObjectPropValue@@MAE?AW4TMTPResponseCode@@XZ @ 87 NONAME ; enum TMTPResponseCode CSetObjectPropValue::CheckRequestL(void)
+	??0CPropertySettingUtility@@IAE@XZ @ 88 NONAME ; CPropertySettingUtility::CPropertySettingUtility(void)
+	?Match@CRequestProcessor@@MBEHABVTMTPTypeRequest@@AAVMMTPConnection@@@Z @ 89 NONAME ; int CRequestProcessor::Match(class TMTPTypeRequest const &, class MMTPConnection &) const
+	??0CCopyObject@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 90 NONAME ; CCopyObject::CCopyObject(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?CheckRequestL@CRequestProcessor@@MAE?AW4TMTPResponseCode@@XZ @ 91 NONAME ; enum TMTPResponseCode CRequestProcessor::CheckRequestL(void)
+	?SendResponseL@CRequestProcessor@@IAEXW4TMTPResponseCode@@HPAK@Z @ 92 NONAME ; void CRequestProcessor::SendResponseL(enum TMTPResponseCode, int, unsigned long *)
+	??0CGetPartialObject@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@@Z @ 93 NONAME ; CGetPartialObject::CGetPartialObject(class MMTPDataProviderFramework &, class MMTPConnection &)
+	?DoHandleCompletingPhaseL@CRequestProcessor@@MAEHXZ @ 94 NONAME ; int CRequestProcessor::DoHandleCompletingPhaseL(void)
+	?DeleteDummyFile@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@@Z @ 95 NONAME ; void CMmMtpDpMetadataAccessWrapper::DeleteDummyFile(class TDesC16 const &)
+	?DoSetObjectReferencesL@CSetObjectReferences@@IAEXABVCMTPObjectMetaData@@@Z @ 96 NONAME ; void CSetObjectReferences::DoSetObjectReferencesL(class CMTPObjectMetaData const &)
+	??1CGetObjectInfo@@UAE@XZ @ 97 NONAME ; CGetObjectInfo::~CGetObjectInfo(void)
+	?ServiceL@CRequestUnknown@@MAEXXZ @ 98 NONAME ; void CRequestUnknown::ServiceL(void)
+	?HasDataphase@CSetObjectPropList@@MBEHXZ @ 99 NONAME ; int CSetObjectPropList::HasDataphase(void) const
+	?NewL@CGetObjectReferences@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 100 NONAME ; class MMmRequestProcessor * CGetObjectReferences::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?DoCancel@CRenameObject@@MAEXXZ @ 101 NONAME ; void CRenameObject::DoCancel(void)
+	??1CSetObjectReferences@@UAE@XZ @ 102 NONAME ; CSetObjectReferences::~CSetObjectReferences(void)
+	?Match@CSendObject@@MBEHABVTMTPTypeRequest@@AAVMMTPConnection@@@Z @ 103 NONAME ; int CSendObject::Match(class TMTPTypeRequest const &, class MMTPConnection &) const
+	?NewL@CSetObjectPropList@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 104 NONAME ; class MMmRequestProcessor * CSetObjectPropList::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?GetAllAbstractMediaL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@PAPAVCMPXMediaArray@@W4TMPXGeneralCategory@@@Z @ 105 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetAllAbstractMediaL(class TDesC16 const &, class CMPXMediaArray * *, enum TMPXGeneralCategory)
+	??1CCopyObject@@UAE@XZ @ 106 NONAME ; CCopyObject::~CCopyObject(void)
 	?RunL@CGetObjectPropList@@MAEXXZ @ 107 NONAME ; void CGetObjectPropList::RunL(void)
-	?NewRangeFormDescriptionL@CDescriptionUtility@@QAEPAVCMTPTypeObjectPropDesc@@GKKKH@Z @ 108 NONAME ; class CMTPTypeObjectPropDesc * CDescriptionUtility::NewRangeFormDescriptionL(unsigned short, unsigned long, unsigned long, unsigned long, int)
-	?RunError@CRequestProcessor@@MAEHH@Z @ 109 NONAME ; int CRequestProcessor::RunError(int)
-	?SessionId@CRequestProcessor@@MAEKXZ @ 110 NONAME ; unsigned long CRequestProcessor::SessionId(void)
-	??0CDescriptionUtility@@IAE@XZ @ 111 NONAME ; CDescriptionUtility::CDescriptionUtility(void)
-	?HandleEventL@CRequestProcessor@@MAEXABVTMTPTypeEvent@@@Z @ 112 NONAME ; void CRequestProcessor::HandleEventL(class TMTPTypeEvent const &)
-	?NewL@CGetPartialObject@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 113 NONAME ; class MMmRequestProcessor * CGetPartialObject::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?HasDataphase@CSetObjectReferences@@EBEHXZ @ 114 NONAME ; int CSetObjectReferences::HasDataphase(void) const
-	?ConstructL@CGetInterdependentPropDesc@@IAEXXZ @ 115 NONAME ; void CGetInterdependentPropDesc::ConstructL(void)
-	?RunError@CGetObjectPropList@@MAEHH@Z @ 116 NONAME ; int CGetObjectPropList::RunError(int)
-	?DoHandleResponsePhaseL@CSetObjectPropList@@MAEHXZ @ 117 NONAME ; int CSetObjectPropList::DoHandleResponsePhaseL(void)
-	??0CDeleteObject@@AAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 118 NONAME ; CDeleteObject::CDeleteObject(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?NewL@CRenameObject@@SAPAV1@AAVMMTPDataProviderFramework@@AAVCMmMtpDpMetadataAccessWrapper@@@Z @ 119 NONAME ; class CRenameObject * CRenameObject::NewL(class MMTPDataProviderFramework &, class CMmMtpDpMetadataAccessWrapper &)
-	?RenameObjectL@CMmMtpDpMetadataAccessWrapper@@QAEXABVCMTPObjectMetaData@@ABVTDesC16@@@Z @ 120 NONAME ; void CMmMtpDpMetadataAccessWrapper::RenameObjectL(class CMTPObjectMetaData const &, class TDesC16 const &)
-	?GetObjectMetadataValueL@CMmMtpDpMetadataAccessWrapper@@QAEXGAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 121 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetObjectMetadataValueL(unsigned short, class MMTPType &, class CMTPObjectMetaData const &)
-	?AddDummyFileL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@@Z @ 122 NONAME ; void CMmMtpDpMetadataAccessWrapper::AddDummyFileL(class TDesC16 const &)
-	??0CGetObjectPropDesc@@AAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 123 NONAME ; CGetObjectPropDesc::CGetObjectPropDesc(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?ConstructL@CGetObjectPropDesc@@AAEXXZ @ 124 NONAME ; void CGetObjectPropDesc::ConstructL(void)
-	??0CGetInterdependentPropDesc@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 125 NONAME ; CGetInterdependentPropDesc::CGetInterdependentPropDesc(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	??1CGetObjectPropDesc@@UAE@XZ @ 126 NONAME ; CGetObjectPropDesc::~CGetObjectPropDesc(void)
-	?ServiceL@CGetObjectPropDesc@@MAEXXZ @ 127 NONAME ; void CGetObjectPropDesc::ServiceL(void)
-	?HasDataphase@CSetObjectPropValue@@MBEHXZ @ 128 NONAME ; int CSetObjectPropValue::HasDataphase(void) const
-	?ServiceL@CCopyObject@@MAEXXZ @ 129 NONAME ; void CCopyObject::ServiceL(void)
-	?CheckRequestL@CGetObjectPropValue@@MAE?AW4TMTPResponseCode@@XZ @ 130 NONAME ; enum TMTPResponseCode CGetObjectPropValue::CheckRequestL(void)
-	?CloseSessionL@CMmMtpDpAccessSingleton@@SAXXZ @ 131 NONAME ; void CMmMtpDpAccessSingleton::CloseSessionL(void)
-	?NewL@CGetFormatCapabilities@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 132 NONAME ; class MMmRequestProcessor * CGetFormatCapabilities::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	?ReceiveDataL@CRequestProcessor@@IAEXAAVMMTPType@@@Z @ 133 NONAME ; void CRequestProcessor::ReceiveDataL(class MMTPType &)
-	??1CDescriptionUtility@@UAE@XZ @ 134 NONAME ; CDescriptionUtility::~CDescriptionUtility(void)
-	?RunL@CSetObjectPropList@@MAEXXZ @ 135 NONAME ; void CSetObjectPropList::RunL(void)
-	?ConstructL@CMoveObject@@IAEXXZ @ 136 NONAME ; void CMoveObject::ConstructL(void)
-	?NewL@CSendObject@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 137 NONAME ; class MMmRequestProcessor * CSendObject::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	??1CGetObjectReferences@@UAE@XZ @ 138 NONAME ; CGetObjectReferences::~CGetObjectReferences(void)
-	?HasDataphase@CSendObject@@MBEHXZ @ 139 NONAME ; int CSendObject::HasDataphase(void) const
-	??1CSetObjectPropValue@@UAE@XZ @ 140 NONAME ; CSetObjectPropValue::~CSetObjectPropValue(void)
-	?ConstructL@CRenameObject@@IAEXXZ @ 141 NONAME ; void CRenameObject::ConstructL(void)
-	?SendDataL@CRequestProcessor@@IAEXABVMMTPType@@@Z @ 142 NONAME ; void CRequestProcessor::SendDataL(class MMTPType const &)
-	?DoHandleResponsePhaseL@CSendObject@@MAEHXZ @ 143 NONAME ; int CSendObject::DoHandleResponsePhaseL(void)
-	?SetReferenceL@CMmMtpDpMetadataAccessWrapper@@QAEXABVCMTPObjectMetaData@@AAVCDesC16Array@@@Z @ 144 NONAME ; void CMmMtpDpMetadataAccessWrapper::SetReferenceL(class CMTPObjectMetaData const &, class CDesC16Array &)
-	?DoCancel@CGetObjectPropList@@MAEXXZ @ 145 NONAME ; void CGetObjectPropList::DoCancel(void)
-	?ServiceL@CGetInterdependentPropDesc@@MAEXXZ @ 146 NONAME ; void CGetInterdependentPropDesc::ServiceL(void)
-	?DoHandleRequestPhaseL@CRequestProcessor@@MAEHXZ @ 147 NONAME ; int CRequestProcessor::DoHandleRequestPhaseL(void)
-	?GetAbstractMediaNameL@CMmMtpDpMetadataAccessWrapper@@QAEPAVHBufC16@@PAVCMPXMedia@@W4TMPXGeneralCategory@@@Z @ 148 NONAME ; class HBufC16 * CMmMtpDpMetadataAccessWrapper::GetAbstractMediaNameL(class CMPXMedia *, enum TMPXGeneralCategory)
-	?ServiceL@CSetObjectPropValue@@MAEXXZ @ 149 NONAME ; void CSetObjectPropValue::ServiceL(void)
-	?RunError@CRenameObject@@MAEHH@Z @ 150 NONAME ; int CRenameObject::RunError(int)
-	??1CDeleteObject@@UAE@XZ @ 151 NONAME ; CDeleteObject::~CDeleteObject(void)
-	?DoHandleResponsePhaseL@CGetPartialObject@@MAEHXZ @ 152 NONAME ; int CGetPartialObject::DoHandleResponsePhaseL(void)
-	?CheckRequestL@CGetFormatCapabilities@@MAE?AW4TMTPResponseCode@@XZ @ 153 NONAME ; enum TMTPResponseCode CGetFormatCapabilities::CheckRequestL(void)
-	??0CSetObjectPropValue@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 154 NONAME ; CSetObjectPropValue::CSetObjectPropValue(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
-	??1CGetObjectPropList@@UAE@XZ @ 155 NONAME ; CGetObjectPropList::~CGetObjectPropList(void)
-	?ServiceL@CGetObjectPropList@@MAEXXZ @ 156 NONAME ; void CGetObjectPropList::ServiceL(void)
-	??0CRenameObject@@IAE@AAVMMTPDataProviderFramework@@AAVCMmMtpDpMetadataAccessWrapper@@@Z @ 157 NONAME ; CRenameObject::CRenameObject(class MMTPDataProviderFramework &, class CMmMtpDpMetadataAccessWrapper &)
+	?GetModifiedContentL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@AAHAAVCDesC16Array@@@Z @ 108 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetModifiedContentL(class TDesC16 const &, int &, class CDesC16Array &)
+	?NewRangeFormDescriptionL@CDescriptionUtility@@QAEPAVCMTPTypeObjectPropDesc@@GKKKH@Z @ 109 NONAME ; class CMTPTypeObjectPropDesc * CDescriptionUtility::NewRangeFormDescriptionL(unsigned short, unsigned long, unsigned long, unsigned long, int)
+	?RunError@CRequestProcessor@@MAEHH@Z @ 110 NONAME ; int CRequestProcessor::RunError(int)
+	?SessionId@CRequestProcessor@@MAEKXZ @ 111 NONAME ; unsigned long CRequestProcessor::SessionId(void)
+	??0CDescriptionUtility@@IAE@XZ @ 112 NONAME ; CDescriptionUtility::CDescriptionUtility(void)
+	?HandleEventL@CRequestProcessor@@MAEXABVTMTPTypeEvent@@@Z @ 113 NONAME ; void CRequestProcessor::HandleEventL(class TMTPTypeEvent const &)
+	?NewL@CGetPartialObject@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 114 NONAME ; class MMmRequestProcessor * CGetPartialObject::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?HasDataphase@CSetObjectReferences@@EBEHXZ @ 115 NONAME ; int CSetObjectReferences::HasDataphase(void) const
+	?ConstructL@CGetInterdependentPropDesc@@IAEXXZ @ 116 NONAME ; void CGetInterdependentPropDesc::ConstructL(void)
+	?RunError@CGetObjectPropList@@MAEHH@Z @ 117 NONAME ; int CGetObjectPropList::RunError(int)
+	?DoHandleResponsePhaseL@CSetObjectPropList@@MAEHXZ @ 118 NONAME ; int CSetObjectPropList::DoHandleResponsePhaseL(void)
+	??0CDeleteObject@@AAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 119 NONAME ; CDeleteObject::CDeleteObject(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?NewL@CRenameObject@@SAPAV1@AAVMMTPDataProviderFramework@@AAVCMmMtpDpMetadataAccessWrapper@@@Z @ 120 NONAME ; class CRenameObject * CRenameObject::NewL(class MMTPDataProviderFramework &, class CMmMtpDpMetadataAccessWrapper &)
+	?RenameObjectL@CMmMtpDpMetadataAccessWrapper@@QAEXABVCMTPObjectMetaData@@ABVTDesC16@@@Z @ 121 NONAME ; void CMmMtpDpMetadataAccessWrapper::RenameObjectL(class CMTPObjectMetaData const &, class TDesC16 const &)
+	?GetObjectMetadataValueL@CMmMtpDpMetadataAccessWrapper@@QAEXGAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 122 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetObjectMetadataValueL(unsigned short, class MMTPType &, class CMTPObjectMetaData const &)
+	?AddDummyFileL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@@Z @ 123 NONAME ; void CMmMtpDpMetadataAccessWrapper::AddDummyFileL(class TDesC16 const &)
+	??0CGetObjectPropDesc@@AAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 124 NONAME ; CGetObjectPropDesc::CGetObjectPropDesc(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?ConstructL@CGetObjectPropDesc@@AAEXXZ @ 125 NONAME ; void CGetObjectPropDesc::ConstructL(void)
+	??0CGetInterdependentPropDesc@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 126 NONAME ; CGetInterdependentPropDesc::CGetInterdependentPropDesc(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	??1CGetObjectPropDesc@@UAE@XZ @ 127 NONAME ; CGetObjectPropDesc::~CGetObjectPropDesc(void)
+	?ServiceL@CGetObjectPropDesc@@MAEXXZ @ 128 NONAME ; void CGetObjectPropDesc::ServiceL(void)
+	?HasDataphase@CSetObjectPropValue@@MBEHXZ @ 129 NONAME ; int CSetObjectPropValue::HasDataphase(void) const
+	?ServiceL@CCopyObject@@MAEXXZ @ 130 NONAME ; void CCopyObject::ServiceL(void)
+	?CheckRequestL@CGetObjectPropValue@@MAE?AW4TMTPResponseCode@@XZ @ 131 NONAME ; enum TMTPResponseCode CGetObjectPropValue::CheckRequestL(void)
+	?CloseSessionL@CMmMtpDpAccessSingleton@@SAXXZ @ 132 NONAME ; void CMmMtpDpAccessSingleton::CloseSessionL(void)
+	?NewL@CGetFormatCapabilities@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 133 NONAME ; class MMmRequestProcessor * CGetFormatCapabilities::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	?ReceiveDataL@CRequestProcessor@@IAEXAAVMMTPType@@@Z @ 134 NONAME ; void CRequestProcessor::ReceiveDataL(class MMTPType &)
+	??1CDescriptionUtility@@UAE@XZ @ 135 NONAME ; CDescriptionUtility::~CDescriptionUtility(void)
+	?RunL@CSetObjectPropList@@MAEXXZ @ 136 NONAME ; void CSetObjectPropList::RunL(void)
+	?ConstructL@CMoveObject@@IAEXXZ @ 137 NONAME ; void CMoveObject::ConstructL(void)
+	?NewL@CSendObject@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 138 NONAME ; class MMmRequestProcessor * CSendObject::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	??1CGetObjectReferences@@UAE@XZ @ 139 NONAME ; CGetObjectReferences::~CGetObjectReferences(void)
+	?HasDataphase@CSendObject@@MBEHXZ @ 140 NONAME ; int CSendObject::HasDataphase(void) const
+	??1CSetObjectPropValue@@UAE@XZ @ 141 NONAME ; CSetObjectPropValue::~CSetObjectPropValue(void)
+	?ConstructL@CRenameObject@@IAEXXZ @ 142 NONAME ; void CRenameObject::ConstructL(void)
+	?SendDataL@CRequestProcessor@@IAEXABVMMTPType@@@Z @ 143 NONAME ; void CRequestProcessor::SendDataL(class MMTPType const &)
+	?DoHandleResponsePhaseL@CSendObject@@MAEHXZ @ 144 NONAME ; int CSendObject::DoHandleResponsePhaseL(void)
+	?SetReferenceL@CMmMtpDpMetadataAccessWrapper@@QAEXABVCMTPObjectMetaData@@AAVCDesC16Array@@@Z @ 145 NONAME ; void CMmMtpDpMetadataAccessWrapper::SetReferenceL(class CMTPObjectMetaData const &, class CDesC16Array &)
+	?DoCancel@CGetObjectPropList@@MAEXXZ @ 146 NONAME ; void CGetObjectPropList::DoCancel(void)
+	?ServiceL@CGetInterdependentPropDesc@@MAEXXZ @ 147 NONAME ; void CGetInterdependentPropDesc::ServiceL(void)
+	?DoHandleRequestPhaseL@CRequestProcessor@@MAEHXZ @ 148 NONAME ; int CRequestProcessor::DoHandleRequestPhaseL(void)
+	?GetAbstractMediaNameL@CMmMtpDpMetadataAccessWrapper@@QAEPAVHBufC16@@PAVCMPXMedia@@W4TMPXGeneralCategory@@@Z @ 149 NONAME ; class HBufC16 * CMmMtpDpMetadataAccessWrapper::GetAbstractMediaNameL(class CMPXMedia *, enum TMPXGeneralCategory)
+	?ServiceL@CSetObjectPropValue@@MAEXXZ @ 150 NONAME ; void CSetObjectPropValue::ServiceL(void)
+	?RunError@CRenameObject@@MAEHH@Z @ 151 NONAME ; int CRenameObject::RunError(int)
+	??1CDeleteObject@@UAE@XZ @ 152 NONAME ; CDeleteObject::~CDeleteObject(void)
+	?DoHandleResponsePhaseL@CGetPartialObject@@MAEHXZ @ 153 NONAME ; int CGetPartialObject::DoHandleResponsePhaseL(void)
+	?CheckRequestL@CGetFormatCapabilities@@MAE?AW4TMTPResponseCode@@XZ @ 154 NONAME ; enum TMTPResponseCode CGetFormatCapabilities::CheckRequestL(void)
+	??0CSetObjectPropValue@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 155 NONAME ; CSetObjectPropValue::CSetObjectPropValue(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &)
+	??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 &)
 
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/eabi/mmmtpdprequestprocessoru.def	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/eabi/mmmtpdprequestprocessoru.def	Wed Apr 14 16:28:17 2010 +0300
@@ -183,96 +183,97 @@
 	_ZN26CGetInterdependentPropDescD1Ev @ 182 NONAME
 	_ZN26CGetInterdependentPropDescD2Ev @ 183 NONAME
 	_ZN29CMmMtpDpMetadataAccessWrapper13AddDummyFileLERK7TDesC16 @ 184 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper13RenameObjectLERK18CMTPObjectMetaDataRK7TDesC16 @ 185 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper13SetReferenceLERK18CMTPObjectMetaDataR12CDesC16Array @ 186 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper15CreateDummyFileERK7TDesC16 @ 187 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper15DeleteDummyFileERK7TDesC16 @ 188 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper16CleanupDatabaseLEv @ 189 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper16GetAllReferenceLEP9CMPXMediaR12CDesC16Array @ 190 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper19GetModifiedContentLERK7TDesC16RiR12CDesC16Array @ 191 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper20GetAllAbstractMediaLERK7TDesC16PP14CMPXMediaArray19TMPXGeneralCategory @ 192 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper21GetAbstractMediaNameLEP9CMPXMedia19TMPXGeneralCategory @ 193 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper22UpdateMusicCollectionLEv @ 194 NONAME
-	_ZN29CMmMtpDpMetadataAccessWrapper23GetObjectMetadataValueLEtR8MMTPTypeRK18CMTPObjectMetaData @ 195 NONAME
-	_ZNK11CSendObject12HasDataphaseEv @ 196 NONAME
-	_ZNK11CSendObject5MatchERK15TMTPTypeRequestR14MMTPConnection @ 197 NONAME
-	_ZNK15CRequestUnknown5MatchERK15TMTPTypeRequestR14MMTPConnection @ 198 NONAME
-	_ZNK17CRequestProcessor10ConnectionEv @ 199 NONAME
-	_ZNK17CRequestProcessor12HasDataphaseEv @ 200 NONAME
-	_ZNK17CRequestProcessor5MatchERK13TMTPTypeEventR14MMTPConnection @ 201 NONAME
-	_ZNK17CRequestProcessor5MatchERK15TMTPTypeRequestR14MMTPConnection @ 202 NONAME
-	_ZNK17CRequestProcessor7RequestEv @ 203 NONAME
-	_ZNK18CSetObjectPropList12HasDataphaseEv @ 204 NONAME
-	_ZNK19CSetObjectPropValue12HasDataphaseEv @ 205 NONAME
-	_ZNK20CSetObjectReferences12HasDataphaseEv @ 206 NONAME
-	_ZTI10CGetObject @ 207 NONAME
-	_ZTI11CCopyObject @ 208 NONAME
-	_ZTI11CMoveObject @ 209 NONAME
-	_ZTI11CSendObject @ 210 NONAME
-	_ZTI13CDeleteObject @ 211 NONAME
-	_ZTI13CRenameObject @ 212 NONAME
-	_ZTI14CGetObjectInfo @ 213 NONAME
-	_ZTI15CRequestChecker @ 214 NONAME
-	_ZTI15CRequestUnknown @ 215 NONAME
-	_ZTI15TMTPTypeFlatBuf @ 216 NONAME
-	_ZTI17CGetPartialObject @ 217 NONAME
-	_ZTI17CRequestProcessor @ 218 NONAME
-	_ZTI18CGetObjectPropDesc @ 219 NONAME
-	_ZTI18CGetObjectPropList @ 220 NONAME
-	_ZTI18CHXMetaDataUtility @ 221 NONAME
-	_ZTI18CSetObjectPropList @ 222 NONAME
-	_ZTI19CDescriptionUtility @ 223 NONAME
-	_ZTI19CGetObjectPropValue @ 224 NONAME
-	_ZTI19CSetObjectPropValue @ 225 NONAME
-	_ZTI20CGetObjectReferences @ 226 NONAME
-	_ZTI20CSetObjectReferences @ 227 NONAME
-	_ZTI22CGetFormatCapabilities @ 228 NONAME
-	_ZTI23CMmMtpDpAccessSingleton @ 229 NONAME
-	_ZTI23CPropertySettingUtility @ 230 NONAME
-	_ZTI24CGetObjectPropsSupported @ 231 NONAME
-	_ZTI25CMmMtpDpMetadataMpxAccess @ 232 NONAME
-	_ZTI26CGetInterdependentPropDesc @ 233 NONAME
-	_ZTI27CMmMtpDpMetadataVideoAccess @ 234 NONAME
-	_ZTI29CMmMtpDpMetadataAccessWrapper @ 235 NONAME
-	_ZTV10CGetObject @ 236 NONAME
-	_ZTV11CCopyObject @ 237 NONAME
-	_ZTV11CMoveObject @ 238 NONAME
-	_ZTV11CSendObject @ 239 NONAME
-	_ZTV13CDeleteObject @ 240 NONAME
-	_ZTV13CRenameObject @ 241 NONAME
-	_ZTV14CGetObjectInfo @ 242 NONAME
-	_ZTV15CRequestChecker @ 243 NONAME
-	_ZTV15CRequestUnknown @ 244 NONAME
-	_ZTV15TMTPTypeFlatBuf @ 245 NONAME
-	_ZTV17CGetPartialObject @ 246 NONAME
-	_ZTV17CRequestProcessor @ 247 NONAME
-	_ZTV18CGetObjectPropDesc @ 248 NONAME
-	_ZTV18CGetObjectPropList @ 249 NONAME
-	_ZTV18CHXMetaDataUtility @ 250 NONAME
-	_ZTV18CSetObjectPropList @ 251 NONAME
-	_ZTV19CDescriptionUtility @ 252 NONAME
-	_ZTV19CGetObjectPropValue @ 253 NONAME
-	_ZTV19CSetObjectPropValue @ 254 NONAME
-	_ZTV20CGetObjectReferences @ 255 NONAME
-	_ZTV20CSetObjectReferences @ 256 NONAME
-	_ZTV22CGetFormatCapabilities @ 257 NONAME
-	_ZTV23CMmMtpDpAccessSingleton @ 258 NONAME
-	_ZTV23CPropertySettingUtility @ 259 NONAME
-	_ZTV24CGetObjectPropsSupported @ 260 NONAME
-	_ZTV25CMmMtpDpMetadataMpxAccess @ 261 NONAME
-	_ZTV26CGetInterdependentPropDesc @ 262 NONAME
-	_ZTV27CMmMtpDpMetadataVideoAccess @ 263 NONAME
-	_ZTV29CMmMtpDpMetadataAccessWrapper @ 264 NONAME
-	_ZThn28_N11CSendObject13UsbDisconnectEv @ 265 NONAME
-	_ZThn28_N17CRequestProcessor12HandleEventLERK13TMTPTypeEvent @ 266 NONAME
-	_ZThn28_N17CRequestProcessor13UsbDisconnectEv @ 267 NONAME
-	_ZThn28_N17CRequestProcessor14HandleRequestLERK15TMTPTypeRequest20TMTPTransactionPhase @ 268 NONAME
-	_ZThn28_N17CRequestProcessor7ReleaseEv @ 269 NONAME
-	_ZThn28_N17CRequestProcessor9SessionIdEv @ 270 NONAME
-	_ZThn28_NK11CSendObject5MatchERK15TMTPTypeRequestR14MMTPConnection @ 271 NONAME
-	_ZThn28_NK15CRequestUnknown5MatchERK15TMTPTypeRequestR14MMTPConnection @ 272 NONAME
-	_ZThn28_NK17CRequestProcessor10ConnectionEv @ 273 NONAME
-	_ZThn28_NK17CRequestProcessor5MatchERK13TMTPTypeEventR14MMTPConnection @ 274 NONAME
-	_ZThn28_NK17CRequestProcessor5MatchERK15TMTPTypeRequestR14MMTPConnection @ 275 NONAME
-	_ZThn28_NK17CRequestProcessor7RequestEv @ 276 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
+	_ZN29CMmMtpDpMetadataAccessWrapper22UpdateMusicCollectionLEv @ 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
 
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cmoveobject.cpp	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cmoveobject.cpp	Wed Apr 14 16:28:17 2010 +0300
@@ -22,6 +22,7 @@
 #include <mtp/cmtptypearray.h>
 #include <mtp/cmtptypestring.h>
 #include <mtp/cmtptypeobjectproplist.h>
+#include <mtp/mmtpreferencemgr.h>
 
 #include "cmoveobject.h"
 #include "mmmtpdplogger.h"
@@ -141,7 +142,7 @@
     newObjectName.CleanupClosePushL(); // + newObjectName
     newObjectName = *iDest;
 
-    const TDesC& suid( iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) );
+    TPtrC suid( iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) );
     TParsePtrC fileNameParser( suid );
     if ( ( newObjectName.Length() + fileNameParser.NameAndExt().Length() )
         <= newObjectName.MaxLength() )
@@ -419,7 +420,7 @@
         TUint32 handle = element.Uint32L( CMTPTypeObjectPropListElement::EObjectHandle );
         TUint16 propertyCode = element.Uint16L( CMTPTypeObjectPropListElement::EPropertyCode );
         TUint16 dataType = element.Uint16L( CMTPTypeObjectPropListElement::EDatatype );
-        PRINT3( _L( "MM MTP <> CCopyObject::SetPreviousPropertiesL = 0x%x, propertyCode = 0x%x, dataType = 0x%x" ),
+        PRINT3( _L( "MM MTP <> CMoveObject::SetPreviousPropertiesL = 0x%x, propertyCode = 0x%x, dataType = 0x%x" ),
             handle,
             propertyCode,
             dataType );
@@ -492,32 +493,45 @@
         {
         // This is used to keep the same behavior in mass storage and device file manager.
         PRINT( _L( "MM MTP <> CMoveObject::SetPropertiesL Playlist file do not update the MPX DB" ) );
-        }
-    else
-        // TODO: Need rollback mechanism for consistant with image dp in fw.
-        // Not sure if it should be trap if something wrong with MPX db.
-        {
-        if ( iSameStorage )
-            {
-            iDpConfig.GetWrapperL().RenameObjectL( *iObjectInfo, aNewFileName );
-            }
-        else    // if the two object in different storage, we should delete the old one and insert new one
-            {
-            iDpConfig.GetWrapperL().DeleteObjectL( *iObjectInfo );
-            iDpConfig.GetWrapperL().AddObjectL( *iObjectInfo );
-
-            // Only leave when getting proplist element from data received by fw.       
-            // It should not happen after ReceiveDataL in which construction of proplist already succeed.
-            SetPreviousPropertiesL();
-            }
+        iDpConfig.GetWrapperL().DeleteDummyFile( iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) );
+        iDpConfig.GetWrapperL().AddDummyFileL( aNewFileName );
         }
 
-    iObjectInfo->SetDesCL( CMTPObjectMetaData::ESuid, aNewFileName );
-    iObjectInfo->SetUint( CMTPObjectMetaData::EStorageId, iStorageId );
-    iObjectInfo->SetUint( CMTPObjectMetaData::EParentHandle, iNewParentHandle );
-    iFramework.ObjectMgr().ModifyObjectL( *iObjectInfo );
+    if (iSameStorage)
+        {
+        iDpConfig.GetWrapperL().RenameObjectL( *iObjectInfo, aNewFileName );
+        iObjectInfo->SetDesCL( CMTPObjectMetaData::ESuid, aNewFileName );
+        iObjectInfo->SetUint( CMTPObjectMetaData::EStorageId, iStorageId );
+        iObjectInfo->SetUint( CMTPObjectMetaData::EParentHandle, iNewParentHandle );
+        iFramework.ObjectMgr().ModifyObjectL( *iObjectInfo );
+        }
+    else // if the two object in different storage, we should delete the old one and insert new one
+        {
+        iDpConfig.GetWrapperL().DeleteObjectL( *iObjectInfo );
+
+        HBufC* oldFileName = iObjectInfo->DesC(CMTPObjectMetaData::ESuid).AllocLC(); // + oldFileName
+        iObjectInfo->SetDesCL( CMTPObjectMetaData::ESuid, aNewFileName );
+        iObjectInfo->SetUint( CMTPObjectMetaData::EStorageId, iStorageId );
+        iObjectInfo->SetUint( CMTPObjectMetaData::EParentHandle, iNewParentHandle );
+        iFramework.ObjectMgr().ModifyObjectL(*iObjectInfo);
 
-    // It's not necessary to change references of playlists since Reference DB is used PUID
+        iDpConfig.GetWrapperL().SetStorageRootL( aNewFileName );
+        iDpConfig.GetWrapperL().AddObjectL( *iObjectInfo );
+
+        if ( formatCode == EMTPFormatCodeAbstractAudioVideoPlaylist
+            || formatCode == EMTPFormatCodeAbstractAudioAlbum )
+            {
+            MMTPReferenceMgr& referenceMgr = iFramework.ReferenceMgr();
+            CDesCArray* references = referenceMgr.ReferencesLC( aNewFileName ); // + references
+            iDpConfig.GetWrapperL().SetReferenceL( *iObjectInfo, *references );
+            CleanupStack::PopAndDestroy( references ); // - references
+            }
+        CleanupStack::PopAndDestroy( oldFileName );     // - oldFileName
+
+        // Only leave when getting proplist element from data received by fw.
+        // It should not happen after ReceiveDataL in which construction of proplist already succeed.
+        SetPreviousPropertiesL();
+        }
 
     PRINT( _L( "MM MTP <= CMoveObject::SetPropertiesL" ) );
     }
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crenameobject.cpp	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crenameobject.cpp	Wed Apr 14 16:28:17 2010 +0300
@@ -145,12 +145,13 @@
 
             if ( iNewFolderName.Length() + iRightPartName.Length() <= KMaxFileName )
                 {
-                PerformAdditionalActionL();
-
                 iFileName.Zero();
                 iFileName.Append( iNewFolderName );
                 iFileName.Append( iRightPartName );
                 PRINT1( _L( "MM MTP <> CRenameObject::RunL new file name(%S)" ), &iFileName );
+
+                PerformAdditionalActionL();
+
                 // update framework metadata DB
                 iObjectInfo->SetDesCL( CMTPObjectMetaData::ESuid, iFileName );
                 iObjectInfo->SetUint( CMTPObjectMetaData::EObjectMetaDataUpdate, 1 );
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csendobject.cpp	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csendobject.cpp	Wed Apr 14 16:28:17 2010 +0300
@@ -1322,9 +1322,9 @@
 void CSendObject::Rollback()
     {
     // Delete this object from file system.
-    if ( iProgress == ESendObjectInProgress 
-            || iProgress == EObjectInfoSucceed 
-            ||iProgress == EObjectInfoFail )
+    if ( iProgress == ESendObjectInProgress )
+            // || iProgress == EObjectInfoSucceed   // this line is to be commented out until SetSize is done in SendObjectInfo/SendObjectPropList
+            //||iProgress == EObjectInfoFail )
         {
         PRINT1( _L( "MM MTP <> CSendObject::Rollback ROLLBACK_FILE %S" ), &iFullPath );
         // Close the interrupted transfer file by delete iFileReceived object
--- a/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadataaccesswrapper.cpp	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadataaccesswrapper.cpp	Wed Apr 14 16:28:17 2010 +0300
@@ -259,7 +259,7 @@
 // Deletes metadata information associated with the object
 // ---------------------------------------------------------------------------
 //
-void CMmMtpDpMetadataAccessWrapper::DeleteObjectL( const CMTPObjectMetaData& aObject )
+EXPORT_C void CMmMtpDpMetadataAccessWrapper::DeleteObjectL( const CMTPObjectMetaData& aObject )
     {
     TPtrC fileName( aObject.DesC( CMTPObjectMetaData::ESuid ) );
     PRINT1( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::DeleteObjectL name = %S" ), &fileName );
--- a/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatampxaccess.cpp	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatampxaccess.cpp	Wed Apr 14 16:28:17 2010 +0300
@@ -668,7 +668,6 @@
     CMPXMedia& aMediaProp )
     {
     PRINT1( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetMetadataValueL aPropCode = 0x%x" ), aPropCode );
-    CMTPTypeString* textData = CMTPTypeString::NewLC(); // + textData
     CMTPTypeArray* desData = NULL;
     TMTPTypeUint16 uint16Data;
     TMTPTypeUint32 uint32Data;
@@ -684,14 +683,12 @@
         case EMTPObjectPropCodeComposer:
         case EMTPObjectPropCodeAlbumArtist:
             {
-            PRINT1( _L( "MM MTP <> SetMetadataValueL Before Copy, string length = %d" ), aNewData.Size() );
-            MMTPType::CopyL( aNewData, *textData );
-            PRINT1( _L( "MM MTP <> SetMetadataValueL string length = %d" ), textData->StringChars().Length() );
-            aMediaProp.SetTextValueL( attrib, textData->StringChars() );
-            HBufC* log = textData->StringChars().AllocL();
-            PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL string = %S" ), log );
-            delete log;
-            log = NULL;
+            const CMTPTypeString& textData = static_cast<const CMTPTypeString&>( aNewData );
+            HBufC* string = textData.StringChars().AllocLC();    // + string
+            PRINT2( _L( "MM MTP <> SetMetadataValueL des.ptr() = 0x%x, string length = %d" ),string->Des().Ptr(), string->Des().Length() );
+            PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL string = %S" ), string );
+            aMediaProp.SetTextValueL( attrib, string->Des() );
+            CleanupStack::PopAndDestroy( string );               // - string
             }
             break;
 
@@ -735,10 +732,10 @@
 
         case EMTPObjectPropCodeOriginalReleaseDate:
             {
-            MMTPType::CopyL( aNewData, *textData );
+            const CMTPTypeString& textData = static_cast<const CMTPTypeString&>( aNewData );
 
             TBuf<KMtpMaxStringLength> data;
-            data.Copy( textData->StringChars().Left( KMtpMaxDateTimeStringLength ) );
+            data.Copy( textData.StringChars().Left( KMtpMaxDateTimeStringLength ) );
             PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL 0xDC99 date = %S" ),
                 &data );
             if ( data.Length() < KMtpMaxDateTimeStringLength )
@@ -821,23 +818,18 @@
             TUint length = desData->NumElements();
             PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL length = %d" ),
                 length );
-            if ( length != 0 )
-                {
-                length = ( length < KMTPMaxDescriptionLen ) ? length : KMTPMaxDescriptionLen;
-                HBufC* text = HBufC::NewLC( length );    // + text
-                TPtr ptr = text->Des();
+
+            length = ( length < KMTPMaxDescriptionLen ) ? length : KMTPMaxDescriptionLen;
+            HBufC* text = HBufC::NewLC( length );    // + text
+            TPtr ptr = text->Des();
 
-                for ( TUint i = 0; i < length; i++ )
-                    ptr.Append( desData->ElementUint( i ) );
-                PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL text = %S" ),
-                    text );
-                aMediaProp.SetTextValueL( KMPXMediaGeneralComment, *text );
-                CleanupStack::PopAndDestroy( text );    // - text
-                }
-            else
-                {
-                aMediaProp.SetTextValueL( KMPXMediaGeneralComment, KEmptyText );
-                }
+            for ( TUint i = 0; i < length; i++ )
+                ptr.Append( desData->ElementUint( i ) );
+            PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL text = %S" ),
+                text );
+            aMediaProp.SetTextValueL( KMPXMediaGeneralComment, text->Des() );
+            CleanupStack::PopAndDestroy( text );    // - text
+
             CleanupStack::PopAndDestroy( desData ); // - desData
 #endif //__MUSIC_ID_SUPPORT
             }
@@ -879,7 +871,6 @@
             break;
         }
 
-    CleanupStack::PopAndDestroy( textData ); // - textData
     PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::SetMetadataValueL" ) );
     }
 
@@ -1027,7 +1018,7 @@
     CleanupClosePushL( abstractMediaAttributes ); // + abstractMediaAttributes
     abstractMediaAttributes.AppendL( KMPXMediaGeneralId );
     abstractMediaAttributes.AppendL( KMPXMediaGeneralTitle );
-    if ( aCategory == EMPXPlaylist )
+    if ( aCategory == EMPXPlaylist )    // rollback until Rename is supported on MPX DB
         {
         abstractMediaAttributes.AppendL( KMPXMediaGeneralUri );
         }
@@ -1075,9 +1066,8 @@
         media->SetTextValueL( KMPXMediaGeneralUri, aFullFileName );
 
         TParsePtrC parse( aFullFileName );
-
         media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
-        if ( ( aCategory == EMPXPlaylist ) || ( aCategory == EMPXAbstractAlbum ) )
+        if ( aCategory == EMPXPlaylist )    // rollback until Rename is supported on MPX DB
             {
             media->SetTextValueL( KMPXMediaGeneralTitle, parse.Name() );
             }
@@ -1323,7 +1313,7 @@
     CleanupClosePushL( abstractMediaAttributes ); // + abstractMediaAttributes
     abstractMediaAttributes.AppendL( KMPXMediaGeneralId );
     abstractMediaAttributes.AppendL( KMPXMediaGeneralTitle );
-    if ( aCategory == EMPXPlaylist )
+    if ( aCategory == EMPXPlaylist )    // rollback until Rename is supported on MPX DB
         {
         abstractMediaAttributes.AppendL( KMPXMediaGeneralUri );
         }
@@ -1457,7 +1447,7 @@
     {
     PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetAbstractMediaNameL" ) );
     HBufC* name = NULL;
-    if ( aCategory == EMPXPlaylist )
+    if ( aCategory == EMPXPlaylist )    // rollback until Rename is supported on MPX DB
         {
         if( !aAbstractMedia->IsSupported( KMPXMediaGeneralUri ) )
             {
--- a/mmappcomponents/mmmtpdataprovider/src/mmmtpdputility.cpp	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/src/mmmtpdputility.cpp	Wed Apr 14 16:28:17 2010 +0300
@@ -38,6 +38,7 @@
 #include "mmmtpdpfiledefs.h"
 #include "tobjectdescription.h"
 #include "mmmtpdplogger.h"
+#include "mmmtpdp_variant.hrh"
 
 using namespace ContentAccess;
 
@@ -57,82 +58,77 @@
 //
 EXPORT_C TMTPFormatCode MmMtpDpUtility::FormatFromFilename( const TDesC& aFullFileName )
     {
+    TMTPFormatCode format = EMTPFormatCodeUndefined;
+
     if ( aFullFileName.Right( 1 ).CompareF( KTxtBackSlash ) == 0 ) // We have a directory name
         {
-        return EMTPFormatCodeAssociation;
+        format = EMTPFormatCodeAssociation;
         }
-
-    TParsePtrC file( aFullFileName );
-
-    if ( !file.ExtPresent() )
-        return EMTPFormatCodeUndefined;
-
-    // need to do it in popularity of format, to optmize performance
-    if ( file.Ext().CompareF( KTxtExtensionMP3 ) == 0 )
-            return EMTPFormatCodeMP3;
-
-#ifdef __WINDOWS_MEDIA
-    if ( file.Ext().CompareF( KTxtExtensionWMA ) == 0 )
-            return EMTPFormatCodeWMA;
-#endif // __WINDOWS_MEDIA
-
-    if ( ( file.Ext().CompareF( KTxtExtensionMP4 ) == 0 )
-        || ( file.Ext().CompareF( KTxtExtensionM4A ) == 0 ) )
-        return EMTPFormatCodeMP4Container;
-
-    if ( ( file.Ext().CompareF( KTxtExtension3GP ) == 0 )
-        || ( file.Ext().CompareF( KTxtExtension3G2 ) == 0 )
-        || ( file.Ext().CompareF( KTxtExtensionO4A ) == 0 )
-        || ( file.Ext().CompareF( KTxtExtensionO4V ) == 0 ) )
-        return EMTPFormatCode3GPContainer;
-
-    if ( file.Ext().CompareF( KTxtExtensionAAC ) == 0 )
-        return EMTPFormatCodeAAC;
+    else 
+        {
+        TParsePtrC file( aFullFileName );
 
-    if ( file.Ext().CompareF( KTxtExtensionWAV ) == 0 )
-        return EMTPFormatCodeWAV;
-
+        if ( file.ExtPresent() )
+            {
+            // need to do it in popularity of format, to optmize performance
+            if ( file.Ext().CompareF( KTxtExtensionMP3 ) == 0 )
+                format = EMTPFormatCodeMP3;
 #ifdef __WINDOWS_MEDIA
-    if ( file.Ext().CompareF( KTxtExtensionWMV ) == 0 )
-        return EMTPFormatCodeWMV;
-
-    if ( file.Ext().CompareF( KTxtExtensionASF ) == 0 )
-        return EMTPFormatCodeASF;
-
+            else if ( file.Ext().CompareF( KTxtExtensionWMA ) == 0 )
+                format = EMTPFormatCodeWMA;
 #endif // __WINDOWS_MEDIA
+            else if (( file.Ext().CompareF( KTxtExtensionPLA ) == 0 ) 
+                || ( file.Ext().CompareF( KTxtExtensionVIR ) == 0 ) )
+                format = EMTPFormatCodeAbstractAudioVideoPlaylist;
+            else if ( ( file.Ext().CompareF( KTxtExtensionMP4 ) == 0 )
+                || ( file.Ext().CompareF( KTxtExtensionM4A ) == 0 ) )
+                format = EMTPFormatCodeMP4Container;
+            else if ( ( file.Ext().CompareF( KTxtExtension3GP ) == 0 )
+                || ( file.Ext().CompareF( KTxtExtension3G2 ) == 0 )
+                || ( file.Ext().CompareF( KTxtExtensionO4A ) == 0 )
+                || ( file.Ext().CompareF( KTxtExtensionO4V ) == 0 ) )
+                format = EMTPFormatCode3GPContainer;
+            else if ( file.Ext().CompareF( KTxtExtensionAAC ) == 0 )
+                format = EMTPFormatCodeAAC;
+            else if ( file.Ext().CompareF( KTxtExtensionWAV ) == 0 )
+                format = EMTPFormatCodeWAV;
+#ifdef __WINDOWS_MEDIA
+            else if ( file.Ext().CompareF( KTxtExtensionWMV ) == 0 )
+                format = EMTPFormatCodeWMV;
+            else if ( file.Ext().CompareF( KTxtExtensionASF ) == 0 )
+                format = EMTPFormatCodeASF;
+#endif // __WINDOWS_MEDIA
+            else if ( file.Ext().CompareF( KTxtExtensionODF ) == 0 )
+                {
+                HBufC8* mime = MmMtpDpUtility::ContainerMimeType( file.FullName() );
+                if ( mime != NULL )
+                    {
+                    // 3GP
+                    if ( mime->CompareF( KMimeTypeAudio3gpp ) == 0
+                        || mime->CompareF( KMimeTypeVideo3gpp ) == 0 )
+                        {
+                        delete mime;
+                        mime = NULL;
+                        format = EMTPFormatCode3GPContainer;
+                        }
+                    }
 
-    if ( file.Ext().CompareF( KTxtExtensionODF ) == 0 )
-        {
-        HBufC8* mime = MmMtpDpUtility::ContainerMimeType( file.FullName() );
-        if ( mime != NULL )
-            {
-            // 3GP
-            if ( mime->CompareF( KMimeTypeAudio3gpp ) == 0
-                || mime->CompareF( KMimeTypeVideo3gpp ) == 0 )
-                {
-                delete mime;
-                mime = NULL;
-                return EMTPFormatCode3GPContainer;
+                if ( mime != NULL )
+                    {
+                    delete mime;
+                    mime = NULL;
+                    }
                 }
-            }
-
-        if ( mime != NULL )
-            {
-            delete mime;
-            mime = NULL;
+#ifdef MMMTPDP_ABSTRACTAUDIOALBUM_SUPPORT
+            else if ( file.Ext().CompareF( KTxtExtensionALB ) == 0 )
+                format = EMTPFormatCodeAbstractAudioAlbum;
+#endif // MMMTPDP_ABSTRACTAUDIOALBUM_SUPPORT
+            else if ( file.Ext().CompareF( KTxtExtensionM3U ) == 0 )
+                format = EMTPFormatCodeM3UPlaylist;
             }
         }
 
-    if ( file.Ext().CompareF( KTxtExtensionALB ) == 0 )
-        return EMTPFormatCodeAbstractAudioAlbum;
-
-    if (( file.Ext().CompareF( KTxtExtensionPLA ) == 0 ) || ( file.Ext().CompareF( KTxtExtensionVIR ) == 0 ) )
-        return EMTPFormatCodeAbstractAudioVideoPlaylist;
-
-    if ( file.Ext().CompareF( KTxtExtensionM3U ) == 0 )
-        return EMTPFormatCodeM3UPlaylist;
-
-    return EMTPFormatCodeUndefined;
+    return format;
     }
 
 // -----------------------------------------------------------------------------
--- a/mmappfw_plat/harvester_server_api/inc/mpxharvestercommon.h	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappfw_plat/harvester_server_api/inc/mpxharvestercommon.h	Wed Apr 14 16:28:17 2010 +0300
@@ -69,7 +69,7 @@
     EUSBMTPEndEvent,           // MTP end event
     EUSBMTPNotActiveEvent,     // MTP selected but not active
     ESystemEventMax,           // End of event enum
-    EPowerKeyEjectEvent        // Power key eject mmc
+    EDiskDismountEvent         // Disk dismount notification (MPX Harvester internal)
     };
 
 #endif // MPX_HARVESTER_COMMON_H
--- a/mpx/collectionframework/collectionengine/inc/mpxcollectionengine.h	Wed Mar 31 22:26:09 2010 +0300
+++ b/mpx/collectionframework/collectionengine/inc/mpxcollectionengine.h	Wed Apr 14 16:28:17 2010 +0300
@@ -79,6 +79,14 @@
     *  @param aData some data
     */
     IMPORT_C void NotifyL(TMPXCollectionBroadCastMsg aMsg, TInt aData);
+    
+    
+    /**
+    *  Broadcast a command to all plug-ins
+    *  @param aCmd command to send
+    *  @param aData some data
+    */
+    void Command(TMPXCollectionCommand aCmd, TInt aData);
 
     /**
     * Retrieves the set of supported file types in the collection server
--- a/mpx/collectionframework/collectionengine/src/mpxcollectionclientcontext.cpp	Wed Mar 31 22:26:09 2010 +0300
+++ b/mpx/collectionframework/collectionengine/src/mpxcollectionclientcontext.cpp	Wed Apr 14 16:28:17 2010 +0300
@@ -619,6 +619,13 @@
             iEngine.PluginPop();
             break;
             }
+        case EMcCloseCollection:
+            {
+            // Forward to all plug-ins; argument is drive number
+            iEngine.Command ( aCmd, aData );
+            break;
+            }
+
         default:
             {
             User::Leave(KErrNotSupported);
--- a/mpx/collectionframework/collectionengine/src/mpxcollectionengine.cpp	Wed Mar 31 22:26:09 2010 +0300
+++ b/mpx/collectionframework/collectionengine/src/mpxcollectionengine.cpp	Wed Apr 14 16:28:17 2010 +0300
@@ -253,12 +253,7 @@
         }
     if( command != KErrNotSupported )
         {
-        TArray<CMPXCollectionPlugin*> plugins = iPluginHandler->LoadedPlugins();
-        for( TInt i=0; i<plugins.Count(); ++i )
-            {
-            CMPXCollectionPlugin* plugin = plugins[i];
-            TRAP_IGNORE(plugin->CommandL( (TMPXCollectionCommand)command, data));
-            }
+        Command( (TMPXCollectionCommand)command, data );
         }
 
     if( clearCache )
@@ -295,6 +290,16 @@
         }
     }
 
+void CMPXCollectionEngine::Command( TMPXCollectionCommand aCmd, TInt aData )
+    {
+    TArray<CMPXCollectionPlugin*> plugins = iPluginHandler->LoadedPlugins();
+    for( TInt i=0; i<plugins.Count(); ++i )
+        {
+        CMPXCollectionPlugin* plugin = plugins[i];
+        TRAP_IGNORE(plugin->CommandL( aCmd, aData));
+        }
+    }
+
 // ----------------------------------------------------------------------------
 // Retrieves all of the supported types in the collection
 // ----------------------------------------------------------------------------
--- a/mpx/collectionframework/collectionserver/src/mpxcollectionserversession.cpp	Wed Mar 31 22:26:09 2010 +0300
+++ b/mpx/collectionframework/collectionserver/src/mpxcollectionserversession.cpp	Wed Apr 14 16:28:17 2010 +0300
@@ -570,14 +570,14 @@
 //
 void CMPXCollectionSession::CancelRequests()
     {
+    if (iContext)
+        {
+        iContext->CancelRequest(this);
+        }
     if (!iMessage.IsNull())
         {
         iMessage.Complete(KErrCancel);
         }
-    if (iContext)
-        {
-        iContext->CancelRequest(this);
-        }
     }
 
 // ----------------------------------------------------------------------------
--- a/mpx/commonframework/common/src/mpxdataarray.cpp	Wed Mar 31 22:26:09 2010 +0300
+++ b/mpx/commonframework/common/src/mpxdataarray.cpp	Wed Apr 14 16:28:17 2010 +0300
@@ -55,7 +55,10 @@
 //
 void RMPXDataItem::Copy(TUint aClientHandle,TAny* aSrc,TInt aSize)
     {
-    MPX_ASSERT(aSrc&&aClientHandle);
+    //The source could be zero-length descriptor: aSize is 0 and aSrc is NULL
+    //ASSERT if aSrc is NULL while aSize is not zero, invalid descriptor
+    MPX_ASSERT(((aSrc!=NULL)?ETrue:(aSize==0))&&aClientHandle);
+
     //
     Reset(aClientHandle);
     RMPXHeapManager& m=RMPXHeapManager::HeapManager(aClientHandle);
--- a/mpx/playbackframework/playbackengine/src/mpxplaybackengine.cpp	Wed Mar 31 22:26:09 2010 +0300
+++ b/mpx/playbackframework/playbackengine/src/mpxplaybackengine.cpp	Wed Apr 14 16:28:17 2010 +0300
@@ -1678,14 +1678,6 @@
         iCallback->HandleProperty(aProperty,aValue,aError);
         iCallback = NULL;
         iTaskQueue->CompleteTask();
-        
-        // notify client the new position during the playback
-        if ((EPbPropertyPosition == aProperty) && (iProgressTimer->IsActive()))
-            {
-            TRAP_IGNORE(iClientList->SendMsgL(
-                    TMPXPlaybackMessage(TMPXPlaybackMessage::EPropertyChanged,
-                                        EPbPropertyPosition,aValue)));            
-            }
         }
     MPX_DEBUG2("<--CMPXPlaybackEngine::HandleProperty 0x%08x", this);
     }