201037
authorhgs
Fri, 17 Sep 2010 14:22:55 +0300
changeset 52 36d60d12b4af
parent 51 b048e15729d6
child 53 819e59dfc032
201037
creator/creator.pro
creator/engine/inc/creator_notepadwrapper.h
creator/engine/src/creator_accesspoint.cpp
creator/engine/src/creator_browser.cpp
creator/engine/src/creator_calendar.cpp
creator/engine/src/creator_calendarelement.cpp
creator/engine/src/creator_connectionmethod.cpp
creator/engine/src/creator_contactelement.cpp
creator/engine/src/creator_file.cpp
creator/engine/src/creator_landmark.cpp
creator/engine/src/creator_log.cpp
creator/engine/src/creator_mailbox.cpp
creator/engine/src/creator_message.cpp
creator/engine/src/creator_note.cpp
creator/engine/src/creator_notepadwrapper.cpp
creator/engine/src/creator_phonebook.cpp
creator/engine/src/creator_scriptelement.cpp
creator/engine/src/creator_scriptentry.cpp
creator/engine/src/creator_scriptparser.cpp
creator/src/engine.cpp
creator/src/notifications.cpp
launcher/engine/src/launcherdllelement.cpp
loadgen/group/bld.inf
loadgen/group/bld_generic.inf
loadgen/ui/avkon/data/loadgen.rss
loadgen/ui/avkon/group/loadgen.mmp
perfapps/memspyui/data/memspyui.rss
perfapps/memspyui/memspywindowserverhelper/group/memspywindowserverhelper.mmp
perfapps/memspyui/memspywindowserverhelper/src/MemSpyEngineHelperWindowServerImpl.cpp
perfapps/memspyui/ui/avkon/src/MemSpyAppUi.cpp
perfapps/memspyui/ui/avkon/src/MemSpyContainer.cpp
perfapps/memspyui/ui/avkon/src/MemSpyDocument.cpp
perfapps/memspyui/ui/avkon/src/MemSpyViewBase.cpp
perfapps/memspyui/ui/avkon/src/MemSpyViewHeapTracking.cpp
perfapps/memspyui/ui/avkon/src/MemSpyViewHeapTrackingSettings.cpp
perfapps/memspyui/ui/avkon/src/MemSpyViewKernelContainers.cpp
perfapps/memspyui/ui/avkon/src/MemSpyViewProcesses.cpp
perfapps/memspyui/ui/avkon/src/MemSpyViewServerList.cpp
perfapps/memspyui/ui/avkon/src/MemSpyViewThreads.cpp
perfapps/memspyui/ui/hb/hb.pro
perfapps/memspyui/ui/hb/inc/enginewrapper.h
perfapps/memspyui/ui/hb/inc/memspywindowgroupsdetailview.h
perfapps/memspyui/ui/hb/inc/memspywindowgroupsview.h
perfapps/memspyui/ui/hb/inc/viewmanager.h
perfapps/memspyui/ui/hb/src/enginewrapper.cpp
perfapps/memspyui/ui/hb/src/memspymainview.cpp
perfapps/memspyui/ui/hb/src/memspyserverview.cpp
perfapps/memspyui/ui/hb/src/memspyswmtview.cpp
perfapps/memspyui/ui/hb/src/memspyview.cpp
perfapps/memspyui/ui/hb/src/memspywindowgroupsdetailview.cpp
perfapps/memspyui/ui/hb/src/memspywindowgroupsview.cpp
perfapps/memspyui/ui/hb/src/viewmanager.cpp
perfapps/perfmon/data/perfmon.rss
perfapps/perfmon/engine/inc/perfmon_powerlistener.h
perfapps/perfmon/engine/src/perfmon_engine.cpp
perfapps/perfmon/engine/src/perfmon_powerlistener.cpp
perfapps/perfmon/engine/src/perfmon_powerlistener_stub.cpp
perfapps/perfmon/group/ReleaseNotes_PerfMon.txt
perfapps/perfmon/group/group.pro
perfapps/perfmon/perfmon.pro
perfapps/perfmon/ui/avkon/group/perfmon.mmp
perfapps/perfmon/ui/hb/app/app.pro
perfapps/perfmon/ui/hb/app/src/main.cpp
perfapps/perfmon/ui/hb/app/src/mainview.cpp
perfapps/perfmon/ui/hb/datapopup/src/perfmondatapopupdialog.cpp
perfapps/perfmon/ui/hb/datapopup/src/perfmondatapopupplugin.cpp
--- a/creator/creator.pro	Fri Sep 03 17:11:21 2010 +0300
+++ b/creator/creator.pro	Fri Sep 17 14:22:55 2010 +0300
@@ -146,6 +146,8 @@
 			"END"
 
 	MMP_RULES += creatorDataBlock
+	MMP_RULES -= PAGED
+  MMP_RULES *= UNPAGED
 
     BLD_INF_RULES.prj_exports += "./rom/creator.iby CORE_IBY_EXPORT_PATH(tools,creator.iby)
 	BLD_INF_RULES.prj_exports += \
--- a/creator/engine/inc/creator_notepadwrapper.h	Fri Sep 03 17:11:21 2010 +0300
+++ b/creator/engine/inc/creator_notepadwrapper.h	Fri Sep 17 14:22:55 2010 +0300
@@ -23,6 +23,7 @@
 
 
 #include <e32base.h>
+#include <QPluginLoader>
 #include <NotesEditorInterface>
 #include <AgendaUtil>
 #include <AgendaEntry>
@@ -46,6 +47,7 @@
 	private:
 		AgendaUtil *iAgendaUtil;
 		NotesEditorInterface *iNotepadApi;	//QT Notes api
+		QPluginLoader* iNotesEditorPluginLoader; // for loading QT Notes api
 	};
 
 #endif // __CREATORNOTEPADWRAPPER_H__
--- a/creator/engine/src/creator_accesspoint.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/creator/engine/src/creator_accesspoint.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -324,7 +324,7 @@
 
     // id has been generated, store it for being able to delete
     // entries created only with Creator
-    iEntryIds.Append( uid );
+    iEntryIds.AppendL( uid );
         
     TBuf<256> name = iParameters->iConnectionName->Des();
     iApUtils->SetNameL(name, uid); // sets the AP name
--- a/creator/engine/src/creator_browser.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/creator/engine/src/creator_browser.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -236,7 +236,7 @@
     
     // id has been generated, store it for being able to delete
     // only entries created with Creator
-    iBmEntryIds.Append( item->Uid() );
+    iBmEntryIds.AppendL( item->Uid() );
     
     CleanupStack::PopAndDestroy(3); //db, session, item
 
@@ -287,7 +287,7 @@
     
     // id has been generated, store it for being able to delete
     // only entries created with Creator
-    iBmFEntryIds.Append( item->Uid() );
+    iBmFEntryIds.AppendL( item->Uid() );
     
     CleanupStack::PopAndDestroy(3); //db, session, item
             
@@ -376,7 +376,7 @@
 
     // id has been generated, store it for being able to delete
     // only entries created with Creator
-    iSpEntryIds.Append( item->Uid() );
+    iSpEntryIds.AppendL( item->Uid() );
 
  
     CleanupStack::PopAndDestroy(6); //db, session, item, sourceFile, destinationFile, sourceBuf    
@@ -427,7 +427,7 @@
 
     // id has been generated, store it for being able to delete
     // only entries created with Creator
-    iSpFEntryIds.Append( item->Uid() );
+    iSpFEntryIds.AppendL( item->Uid() );
 
     CleanupStack::PopAndDestroy(3); //db, session, item
                 
--- a/creator/engine/src/creator_calendar.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/creator/engine/src/creator_calendar.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -193,6 +193,7 @@
             CleanupStack::PopAndDestroy (tempBuf );
 
             }
+            break;
 
         case MCreatorModuleBaseParameters::ECalendarMemo:
             {
@@ -208,6 +209,7 @@
 
             CleanupStack::PopAndDestroy (tempBuf );
             }
+            break;
 
         case MCreatorModuleBaseParameters::ECalendarMeeting:
             {
@@ -226,6 +228,7 @@
 
             CleanupStack::PopAndDestroy (tempBuf );
             }
+            break;
 
         case MCreatorModuleBaseParameters::ECalendarAnniv:
             {
@@ -241,10 +244,12 @@
             CleanupStack::PopAndDestroy (tempBuf );
 
             }
+            break;
         default:
             {
             //implement 
             }
+            break;
         }
     }
 //----------------------------------------------------------------------------
@@ -537,7 +542,7 @@
 
     // id has been generated, store it for being able to delete
     // entries created only with Creator
-    iEntryIds.Append( entry->LocalUidL() );
+    iEntryIds.AppendL( entry->LocalUidL() );
     
     //One item should be added at time
     if (success != 1 )
@@ -944,7 +949,7 @@
 
     // id has been generated, store it for being able to delete
     // entries created only with Creator
-    iEntryIds.Append( entry->LocalUidL() );
+    iEntryIds.AppendL( entry->LocalUidL() );
     
     //One item should be added at time
     if (success != 1 )
@@ -1045,7 +1050,7 @@
 
     // id has been generated, store it for being able to delete
     // entries created only with Creator
-    iEntryIds.Append( entry->LocalUidL() );
+    iEntryIds.AppendL( entry->LocalUidL() );
     
     //One item should be added at time
     if (success != 1 )
@@ -1145,7 +1150,7 @@
 
     // id has been generated, store it for being able to delete
     // entries created only with Creator
-    iEntryIds.Append( entry->LocalUidL() );
+    iEntryIds.AppendL( entry->LocalUidL() );
     
     //One item should be added at time
     if (success != 1 )
@@ -1250,7 +1255,7 @@
 
     // id has been generated, store it for being able to delete
     // entries created only with Creator
-    iEntryIds.Append( entry->LocalUidL() );
+    iEntryIds.AppendL( entry->LocalUidL() );
     
     //One item should be added at time
     if (success != 1 )
--- a/creator/engine/src/creator_calendarelement.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/creator/engine/src/creator_calendarelement.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -173,6 +173,7 @@
                 {
                 parameters->iTodoDueTime = parameters->iEndTime;
                 }
+            endResolved = ETrue;
             }
         else if( elemName == KRecurrentFreq )
             {
--- a/creator/engine/src/creator_connectionmethod.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/creator/engine/src/creator_connectionmethod.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -411,7 +411,7 @@
     
     // id has been generated, store it for being able to delete
     // only entries created with Creator
-    iEntryIds.Append( dest.Id() );
+    iEntryIds.AppendL( dest.Id() );
     
     conMethod.Close();
     CleanupStack::Pop(  );//conMethod
--- a/creator/engine/src/creator_contactelement.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/creator/engine/src/creator_contactelement.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -196,9 +196,9 @@
             for( TInt i = 0; i < fieldList.Count(); ++i )
                 {
                 TPtrC fieldName = fieldList[i]->Name();
-                const CCreatorScriptAttribute* amountAttr = fieldList[i]->FindAttributeByName(KAmount);
-                const CCreatorScriptAttribute* rndLenAttr = fieldList[i]->FindAttributeByName(KRandomLength);
-                const CCreatorScriptAttribute* increaseAttr = fieldList[i]->FindAttributeByName(KIncrease);
+                //const CCreatorScriptAttribute* amountAttr = fieldList[i]->FindAttributeByName(KAmount);
+                //const CCreatorScriptAttribute* rndLenAttr = fieldList[i]->FindAttributeByName(KRandomLength);
+                //const CCreatorScriptAttribute* increaseAttr = fieldList[i]->FindAttributeByName(KIncrease);
                 //TBool increase( EFalse );
                 //if ( increaseAttr )
                 //    {
--- a/creator/engine/src/creator_file.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/creator/engine/src/creator_file.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -559,7 +559,7 @@
         RFile file;
         User::LeaveIfError( file.Create( iFs, aOutFileName, EFileWrite ) );
         CleanupClosePushL( file );
-        importFile->ContinueWithNewOutputFile( file, aOutFileName );
+        User::LeaveIfError( importFile->ContinueWithNewOutputFile( file, aOutFileName ) );
         CleanupStack::PopAndDestroy( &file );
         }
     else
--- a/creator/engine/src/creator_landmark.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/creator/engine/src/creator_landmark.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -455,7 +455,7 @@
     
     // id has been generated, store it for being able to delete
     // entries created only with Creator
-    iEntryIds.Append( newLandmark->LandmarkId() );
+    iEntryIds.AppendL( newLandmark->LandmarkId() );
 
     ExecuteAndDeleteLD(iLandmarkDb->CompactL());
     
--- a/creator/engine/src/creator_log.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/creator/engine/src/creator_log.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -259,7 +259,7 @@
 
     // id has been generated, store it for being able to delete
     // entries created only with Creator
-    iEntryIds.Append( iLogEvent->Id() );
+    TRAP_IGNORE( iEntryIds.AppendL( iLogEvent->Id() ) );
 
     return iStatus.Int();  // should be KErrNone if writing was succesful
     }
@@ -344,7 +344,7 @@
 
     // id has been generated, store it for being able to delete
     // entries created only with Creator
-    iEntryIds.Append( iLogEvent->Id() );
+    TRAP_IGNORE( iEntryIds.AppendL( iLogEvent->Id() ) );
 
     return iStatus.Int();  // should be KErrNone if writing was succesful
     }
@@ -431,7 +431,7 @@
 
     // id has been generated, store it for being able to delete
     // only entries created with Creator
-    iEntryIds.Append( iLogEvent->Id() );
+    TRAP_IGNORE( iEntryIds.AppendL( iLogEvent->Id() ) );
     
     return iStatus.Int();  // should be KErrNone if writing was succesful
     }
--- a/creator/engine/src/creator_mailbox.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/creator/engine/src/creator_mailbox.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -311,7 +311,7 @@
   
     // appending mailbox type to array to be able to use
     // correct type when deleting mailboxes
-    iEntryIds.Append( parameters->iMailboxType );
+    iEntryIds.AppendL( parameters->iMailboxType );
     
     if (parameters->iMailboxType == EMailboxIMAP4)
         {
@@ -321,12 +321,12 @@
         TSmtpAccount smtpAccountId = account->CreateSmtpAccountL(imapAccountId, *smtpSet, *outgoingIAPSet, EFalse);
         account->SetDefaultSmtpAccountL(smtpAccountId);
 
-        iEntryIds.Append( imapAccountId.iImapAccountId );
-        iEntryIds.Append( imapAccountId.iImapService );
-        iEntryIds.Append( imapAccountId.iSmtpService );      
-        iEntryIds.Append( smtpAccountId.iSmtpAccountId );
-        iEntryIds.Append( smtpAccountId.iSmtpService );
-        iEntryIds.Append( smtpAccountId.iRelatedService );
+        iEntryIds.AppendL( imapAccountId.iImapAccountId );
+        iEntryIds.AppendL( imapAccountId.iImapService );
+        iEntryIds.AppendL( imapAccountId.iSmtpService );      
+        iEntryIds.AppendL( smtpAccountId.iSmtpAccountId );
+        iEntryIds.AppendL( smtpAccountId.iSmtpService );
+        iEntryIds.AppendL( smtpAccountId.iRelatedService );
         
         StoreIMEIToEntryL( imapAccountId.iImapService );
         StoreIMEIToEntryL( smtpAccountId.iSmtpService );
@@ -339,12 +339,12 @@
         TSmtpAccount smtpAccountId = account->CreateSmtpAccountL(popAccountId, *smtpSet, *outgoingIAPSet, EFalse);     
         account->SetDefaultSmtpAccountL(smtpAccountId);
         
-        iEntryIds.Append( popAccountId.iPopAccountId );
-        iEntryIds.Append( popAccountId.iPopService );
-        iEntryIds.Append( popAccountId.iSmtpService );
-        iEntryIds.Append( smtpAccountId.iSmtpAccountId );
-        iEntryIds.Append( smtpAccountId.iSmtpService );
-        iEntryIds.Append( smtpAccountId.iRelatedService );
+        iEntryIds.AppendL( popAccountId.iPopAccountId );
+        iEntryIds.AppendL( popAccountId.iPopService );
+        iEntryIds.AppendL( popAccountId.iSmtpService );
+        iEntryIds.AppendL( smtpAccountId.iSmtpAccountId );
+        iEntryIds.AppendL( smtpAccountId.iSmtpService );
+        iEntryIds.AppendL( smtpAccountId.iRelatedService );
 
         StoreIMEIToEntryL( popAccountId.iPopService );
         StoreIMEIToEntryL( smtpAccountId.iSmtpService );
--- a/creator/engine/src/creator_message.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/creator/engine/src/creator_message.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -539,7 +539,7 @@
 
     // id has been generated, store it for being able to delete
     // only entries created with Creator
-    iEntryIds.Append( messageEntry.Id() );
+    iEntryIds.AppendL( messageEntry.Id() );
     
     CleanupStack::PopAndDestroy(3); //session, registry, clientMtm
         
@@ -759,7 +759,7 @@
     
     // id has been generated, store it for being able to delete
     // only entries created with Creator
-    iEntryIds.Append( messageEntry.Id() );
+    iEntryIds.AppendL( messageEntry.Id() );
     
     CleanupStack::PopAndDestroy(3); //session, registry, clientMtm        
         
@@ -1013,7 +1013,7 @@
     
     // id has been generated, store it for being able to delete
     // only entries created with Creator
-    iEntryIds.Append( messageEntry.Id() );
+    iEntryIds.AppendL( messageEntry.Id() );
     
     CleanupStack::PopAndDestroy(3); //session, registry, clientMtm        
         
@@ -1229,7 +1229,7 @@
     
     // id has been generated, store it for being able to delete
     // only entries created with Creator
-    iEntryIds.Append( messageEntry.Id() );
+    iEntryIds.AppendL( messageEntry.Id() );
     
     CleanupStack::PopAndDestroy(3); //session, registry, clientMtm 
 
@@ -1366,7 +1366,7 @@
     
     // id has been generated, store it for being able to delete
     // only entries created with Creator
-    iEntryIds.Append( messageEntry.Id() );
+    iEntryIds.AppendL( messageEntry.Id() );
     
     CleanupStack::PopAndDestroy(3); //session, registry, clientMtm
         
@@ -1511,7 +1511,7 @@
     
     // id has been generated, store it for being able to delete
     // only entries created with Creator
-    iEntryIds.Append( messageEntry.Id() );
+    iEntryIds.AppendL( messageEntry.Id() );
     
     CleanupStack::PopAndDestroy(3); //session, registry, clientMtm 
 
--- a/creator/engine/src/creator_note.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/creator/engine/src/creator_note.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -114,21 +114,20 @@
     delete iParameters;
     iParameters = NULL;
     
-    CNotepadParameters* parameters = aParameters;
-    
     // random data needed if no predefined data available
-    if (!parameters)
+    if (!aParameters)
         {
         iParameters = new(ELeave) CNotepadParameters;
-        parameters = iParameters;
-        parameters->iNoteText->Des() = iEngine->RandomString(CCreatorEngine::EMessageText);
         }
+    else
+        {
+        iParameters = aParameters;
+        }
+
+    TPtr noteTextPtr = iParameters->iNoteText->Des();
+    noteTextPtr.Copy( iEngine->RandomString(CCreatorEngine::EMessageText).Left( noteTextPtr.MaxLength() ) );
     
-    TInt err = KErrNone;
-
-    iNotepadWrapper->CreateNoteL(parameters->iNoteText->Des());
-    
-    return err;
+    return iNotepadWrapper->CreateNoteL( noteTextPtr );
     }
 
 //----------------------------------------------------------------------------
--- a/creator/engine/src/creator_notepadwrapper.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/creator/engine/src/creator_notepadwrapper.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -16,6 +16,7 @@
 */
 
 
+#include <QDir>
 #include "creator_notepadwrapper.h"
 
 	/**
@@ -30,13 +31,16 @@
 	*/
 CCreatorNotepadWrapper::~CCreatorNotepadWrapper()
 	{
-/*    
-	if(iNotepadApi)
+    
+    iNotepadApi = NULL;
+		
+    if(iNotesEditorPluginLoader)
         {
-        delete iNotepadApi;
-        iNotepadApi = NULL;
+	    iNotesEditorPluginLoader->unload();
+        delete iNotesEditorPluginLoader;
+        iNotesEditorPluginLoader = NULL;
         }
- */   
+        
     if(iAgendaUtil)
         {
         delete iAgendaUtil;
@@ -72,16 +76,36 @@
 void CCreatorNotepadWrapper::ConstructL()
 	{
 	iAgendaUtil = new AgendaUtil();
-//	iNotepadApi = new NotesEditor(iAgendaUtil);
+	
+	//	iNotepadApi = new NotesEditor(iAgendaUtil);
+	
+	// Load notes editor plugin.
+    // Launch the notes editor using notes editor plugin api
+    QDir dir(NOTES_EDITOR_PLUGIN_PATH);
+    QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);
+
+    QT_TRYCATCH_LEAVING(
+        // Create NotesEditor plugin loader object.
+        iNotesEditorPluginLoader = new QPluginLoader(pluginName);
+
+        // Load the plugin
+        bool notesPluginLoaded = iNotesEditorPluginLoader->load();
+        QObject *plugin = qobject_cast<QObject*> ( iNotesEditorPluginLoader->instance());
+
+        iNotepadApi = qobject_cast<NotesEditorInterface*>(plugin);
+        );
+
 	}
 
 TInt CCreatorNotepadWrapper::CreateNoteL( const TDesC& aText )
 	{
-	TInt err = KErrNone;
-	QString textNote = QString::fromUtf16( aText.Ptr(),aText.Length());
+	User::LeaveIfNull(iNotepadApi);
+
+    QString textNote = QString::fromUtf16( aText.Ptr(),aText.Length());
     iNotepadApi->edit(textNote,iAgendaUtil);
     iNotepadApi->close(NotesEditorInterface::CloseWithSave, iAgendaUtil);
-	return err;
+	
+    return KErrNone;
     }
 void CCreatorNotepadWrapper::DeleteAllL()
 	{
--- a/creator/engine/src/creator_phonebook.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/creator/engine/src/creator_phonebook.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -252,7 +252,7 @@
 	// create a new contact item
 	
 	TUint32 contactId = iPhonebookWrapper->CreateContactEntryL( parameters->iContactFields ); //wrapper should return contact id to store
-	iContactsToDelete.Append( contactId );
+	iContactsToDelete.AppendL( contactId );
 	
 
 	// If this contact has a link id in script (i.e. belongs to a contact-set), we must cache the contact id:
@@ -392,7 +392,7 @@
            TRAP_IGNORE( 
                do{ //iContactMngr->CreateLinksLC( in )) != NULL ) // will leave with KErrEof
                    previousLink = in.ReadUint32L();
-                   iPreviousDeleteLinks.Append( previousLink );
+                   iPreviousDeleteLinks.AppendL( previousLink );
                    if(previousLink)
                 	   {
 					   r=true;
@@ -658,7 +658,7 @@
 	    
 	    // store the link to contact, so that Creator is able to delete
 	    // it when user requests deletion of contacts that were created with Creator 
-	    iContactGroupsToDelete.Append( newGroupId );
+	    iContactGroupsToDelete.AppendL( newGroupId );
 	    
 	    return err;
     }
--- a/creator/engine/src/creator_scriptelement.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/creator/engine/src/creator_scriptelement.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -208,7 +208,7 @@
         }
     else if( aIndex < iSubElements.Count())
         {
-        iSubElements.Insert(aElem, aIndex);
+        iSubElements.InsertL(aElem, aIndex);
         }
     else
         {
@@ -254,7 +254,7 @@
         }
     else if( aIndex < iAttributes.Count())
         {
-        iAttributes.Insert(aAttribute, aIndex);        
+        iAttributes.InsertL(aAttribute, aIndex);        
         }
     else
         {
--- a/creator/engine/src/creator_scriptentry.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/creator/engine/src/creator_scriptentry.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -95,7 +95,7 @@
             iObserver->ScriptChosenL( EFalse );
             }
         }
-    else if( aUserData == EGetingRandomDataFile && aPositiveAction && iSearchArray->Count() )
+    else if( aUserData == EGetingRandomDataFile && iSearchArray->Count() )
         {
         if(aPositiveAction)
             {
--- a/creator/engine/src/creator_scriptparser.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/creator/engine/src/creator_scriptparser.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -142,7 +142,6 @@
     {
     LOGSTRING2("Creator: CCreatorScriptParser::OnStartDocumentL (Error code: %d)", aErrorCode);
     User::LeaveIfError(aErrorCode);    
-    const TDesC8& charSet = aDocParam.CharacterSetName().DesC();
     }
 
 void CCreatorScriptParser::OnEndDocumentL(TInt aErrorCode)
--- a/creator/src/engine.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/creator/src/engine.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -2231,7 +2231,7 @@
             TRAP( err, id = in.ReadInt32L() );  // will leave with KErrEof
             if ( !err )
                 {
-                aEntryIds.Append( id );
+                aEntryIds.AppendL( id );
                 }
             }
         CleanupStack::PopAndDestroy( &in );
@@ -2262,7 +2262,7 @@
             TRAP( err, id = in.ReadInt32L() ); // will leave with KErrEof
             if ( !err )
                 {
-                previousIds.Append( id );
+                previousIds.AppendL( id );
                 }
             }
         CleanupStack::PopAndDestroy( &in );
@@ -2309,7 +2309,7 @@
             TRAP( err, id = in.ReadUint32L() );  // will leave with KErrEof
             if ( !err )
                 {
-                aEntryIds.Append( id );
+                aEntryIds.AppendL( id );
                 }
             }
         CleanupStack::PopAndDestroy( &in );
@@ -2340,7 +2340,7 @@
             TRAP( err, id = in.ReadUint32L() ); // will leave with KErrEof
             if ( !err )
                 {
-                previousIds.Append( id );
+                previousIds.AppendL( id );
                 }
             }
         CleanupStack::PopAndDestroy( &in );
--- a/creator/src/notifications.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/creator/src/notifications.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -55,7 +55,7 @@
 void Notifications::about()
 {
     showMessageBox(HbMessageBox::MessageTypeInformation,
-        "Version 6.1.1 - August 27th 2010. Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. Licensed under Eclipse Public License v1.0.",
+        "Version 6.1.2 - September 9th 2010. Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. Licensed under Eclipse Public License v1.0.",
         "About Creator", 
         HbPopup::NoTimeout
         );
--- a/launcher/engine/src/launcherdllelement.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/launcher/engine/src/launcherdllelement.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -75,31 +75,31 @@
     if( iUID1 != aReferenceElement.UID1()) 
         {
         diff = ETrue;
-        aDifferenceList.Append(this->EDifference_UID1);      
+        aDifferenceList.AppendL(this->EDifference_UID1);      
         LOGSTRING3("Launcher: CLauncherDLLElement::CompareL - UID1s differs: %x vs. %x", iUID1, aReferenceElement.UID1());  
         }
     if( iUID2!= aReferenceElement.UID2()) 
         {
         diff = ETrue;
-        aDifferenceList.Append(this->EDifference_UID2);        
+        aDifferenceList.AppendL(this->EDifference_UID2);        
         LOGSTRING3("Launcher: CLauncherDLLElement::CompareL - UID2s differs: %x vs. %x", iUID2, aReferenceElement.UID2());  
         }
     if( iUID3 != aReferenceElement.UID3()) 
         {
         diff = ETrue;
-        aDifferenceList.Append(this->EDifference_UID3);        
+        aDifferenceList.AppendL(this->EDifference_UID3);        
         LOGSTRING3("Launcher: CLauncherDLLElement::CompareL - UID3s differs: %x vs. %x", iUID3, aReferenceElement.UID3());  
         }
     if( iSID != aReferenceElement.SID()) 
         {
         diff = ETrue;
-        aDifferenceList.Append(this->EDifference_SID);        
+        aDifferenceList.AppendL(this->EDifference_SID);        
         LOGSTRING3("Launcher: CLauncherDLLElement::CompareL - SIDs differs: %x vs. %x", iSID, aReferenceElement.SID());  
         }
     if( iCapability != aReferenceElement.Capability()) 
         {
         diff = ETrue;
-        aDifferenceList.Append(this->EDifference_Capability);        
+        aDifferenceList.AppendL(this->EDifference_Capability);        
         LOGSTRING3("Launcher: CLauncherDLLElement::CompareL - Capabilities differs: %x vs. %x", iCapability, aReferenceElement.Capability());  
         }
     
--- a/loadgen/group/bld.inf	Fri Sep 03 17:11:21 2010 +0300
+++ b/loadgen/group/bld.inf	Fri Sep 17 14:22:55 2010 +0300
@@ -14,6 +14,7 @@
 
 WINSCW GCCE ARMV5 ARMV6
 #include "bld_generic.inf"
+#include "../ui/avkon/group/bld.inf"
 
 
 prj_mmpfiles
--- a/loadgen/group/bld_generic.inf	Fri Sep 03 17:11:21 2010 +0300
+++ b/loadgen/group/bld_generic.inf	Fri Sep 17 14:22:55 2010 +0300
@@ -23,7 +23,6 @@
 ../group/backup_registration.xml    Z:/private/20011384/backup_registration.xml
 
 
-
 PRJ_MMPFILES
 #if defined(__SERIES60_30__) || defined(__SERIES60_31__) || defined(__S60_32__)
   gnumakefile loadgen_icons_aif.mk
--- a/loadgen/ui/avkon/data/loadgen.rss	Fri Sep 03 17:11:21 2010 +0300
+++ b/loadgen/ui/avkon/data/loadgen.rss	Fri Sep 17 14:22:55 2010 +0300
@@ -247,7 +247,7 @@
             id = EAknMessageQueryContentId;
             control = AVKON_MESSAGE_QUERY
                 {
-                message = "Version 1.5.0 - 23rd April 2010. Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. Licensed under Eclipse Public License v1.0.";
+                message = "Version 1.5.1 - 9th September 2010. Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. Licensed under Eclipse Public License v1.0.";
                 };
             }
         };
--- a/loadgen/ui/avkon/group/loadgen.mmp	Fri Sep 03 17:11:21 2010 +0300
+++ b/loadgen/ui/avkon/group/loadgen.mmp	Fri Sep 17 14:22:55 2010 +0300
@@ -46,6 +46,7 @@
 END
 
 APP_LAYER_SYSTEMINCLUDE
+USERINCLUDE		  /epoc32/include/mw/http
 USERINCLUDE       ../inc
 SOURCEPATH        ../src
 
@@ -75,6 +76,7 @@
 SOURCE			  loadgen_bluetooth.cpp 
 SOURCE			  loadgen_pointerevent.cpp
 SOURCE			  loadgen_utils.cpp
+SOURCE			  loadgen_httpreceiver.cpp
 
 LIBRARY           euser.lib
 LIBRARY           commonengine.lib
@@ -110,5 +112,7 @@
 LIBRARY           esock.lib
 LIBRARY           bluetooth.lib
 LIBRARY			  hal.lib
+LIBRARY			  http.lib
+LIBRARY			  inetprotutil.lib
 
 // End of File
--- a/perfapps/memspyui/data/memspyui.rss	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/memspyui/data/memspyui.rss	Fri Sep 17 14:22:55 2010 +0300
@@ -1019,7 +1019,7 @@
             id = EAknMessageQueryContentId;
             control = AVKON_MESSAGE_QUERY
 				{
-                message = "Version 2.1.0 - 15th June 2010. Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. Licensed under Eclipse Public License v1.0.";
+                message = "Version 2.2.1 - 7th September 2010. Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. Licensed under Eclipse Public License v1.0.";
 				};
 			}
 		};
--- a/perfapps/memspyui/memspywindowserverhelper/group/memspywindowserverhelper.mmp	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/memspyui/memspywindowserverhelper/group/memspywindowserverhelper.mmp	Fri Sep 17 14:22:55 2010 +0300
@@ -33,7 +33,8 @@
 APP_LAYER_SYSTEMINCLUDE
 
 LIBRARY         euser.lib
-LIBRARY			ws32.lib apgrfx.lib
+LIBRARY			ws32.lib 
+LIBRARY			apgrfx.lib
 
 
 // End of File
--- a/perfapps/memspyui/memspywindowserverhelper/src/MemSpyEngineHelperWindowServerImpl.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/memspyui/memspywindowserverhelper/src/MemSpyEngineHelperWindowServerImpl.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -19,7 +19,7 @@
 
 // System includes
 #include <apgwgnam.h>
-#include <apgtask.h>
+#include <APGTASK.h>
 
 // ============================= LOCAL FUNCTIONS ===============================
 
@@ -157,7 +157,7 @@
         User::Leave( KErrNotFound );
         }
     task.BringToForeground();                     
-    CleanupStack::PopAndDestroy( wgName );
+    CleanupStack::PopAndDestroy( wgName );       
     }
 
 
@@ -165,9 +165,6 @@
 
 
 
-
-
-        
 CMemSpyEngineWindowGroupListImpl::CMemSpyEngineWindowGroupListImpl()
     {
     }
--- a/perfapps/memspyui/ui/avkon/src/MemSpyAppUi.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/memspyui/ui/avkon/src/MemSpyAppUi.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -26,7 +26,6 @@
 #include <avkon.hrh>
 #include <barsread.h>
 #include <f32file.h>
-#include <apgtask.h>
 #include <memspyui.rsg>
 
 // Engine includes
@@ -746,8 +745,10 @@
 
 void CMemSpyAppUi::OnCmdToolsSendToBackgroundL()
     {
+	/*
     TApaTask task( iCoeEnv->WsSession() );
     task.SendToBackground();
+    */
     }
 
 
--- a/perfapps/memspyui/ui/avkon/src/MemSpyContainer.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/memspyui/ui/avkon/src/MemSpyContainer.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -20,7 +20,6 @@
 // System includes
 #include <eikrted.h>  // for example label control
 #include <txtrich.h>
-#include <apgtask.h>
 
 // Engine includes
 #include <memspy/engine/memspyengine.h>
--- a/perfapps/memspyui/ui/avkon/src/MemSpyDocument.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/memspyui/ui/avkon/src/MemSpyDocument.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -37,7 +37,11 @@
 CMemSpyDocument::~CMemSpyDocument()
     {
     delete iSettings;
-    iMemSpySession->Close();    
+    if( iMemSpySession != NULL )
+    	{
+		iMemSpySession->Close();
+		delete iMemSpySession;
+    	}
     }
 
 
@@ -47,9 +51,9 @@
     //cigasto
     //iEngine = CMemSpyEngine::NewL( fsSession );
     
-    iMemSpySession = new (ELeave) RMemSpySession();
-    //RMemSpySession iMemSpySession;
-	TInt error = iMemSpySession->Connect();	
+    iMemSpySession = new (ELeave) RMemSpySession();    
+    
+    TInt error = iMemSpySession->Connect();	
 	if(error != KErrNotFound)
 		{
 		User::LeaveIfError( error );
--- a/perfapps/memspyui/ui/avkon/src/MemSpyViewBase.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/memspyui/ui/avkon/src/MemSpyViewBase.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -20,7 +20,6 @@
 // System includes
 #include <eikrted.h>  // for example label control
 #include <txtrich.h>
-#include <apgtask.h>
 #include <akntitle.h>
 #include <akncontext.h>
 #include <aknnavi.h>
@@ -120,7 +119,7 @@
         {
         iListBox->UpdateScrollBarsL();
         }
-
+    
     DrawDeferred();
     }
 
--- a/perfapps/memspyui/ui/avkon/src/MemSpyViewHeapTracking.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/memspyui/ui/avkon/src/MemSpyViewHeapTracking.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -43,12 +43,10 @@
 :   CMemSpyViewBase( aSession, aObserver ),    
     iState( EMemSpyViewHeapTrackingStateIdle )
     {
-	/*
-    if ( iEngine.HelperSysMemTracker().IsActive() )
-        {
-        iState = EMemSpyViewHeapTrackingStateTimerOn;
-        }
-    */    
+	if( iMemSpySession.IsSwmtRunningL() )
+		{
+		iState = EMemSpyViewHeapTrackingStateTimerOn;
+		}	   
     }
 
 
@@ -403,8 +401,8 @@
             {
             aConfig.iMode = aMode;
             aConfig.iEnabledCategories = TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryUserHeap |
-                                         TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryUserStacks |
-                                         TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryGlobalData |
+                                         //TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryUserStacks |
+                                         //TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryGlobalData |
                                          TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategorySystemMemory;
             aConfig.iDumpData = EFalse;
             break;
--- a/perfapps/memspyui/ui/avkon/src/MemSpyViewHeapTrackingSettings.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/memspyui/ui/avkon/src/MemSpyViewHeapTrackingSettings.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -327,77 +327,77 @@
     {
     SetEmptyItemTextL(_L("Nothing selected"));
     iItemArray = new(ELeave) CSelectionItemList(16);
-    AddNewItemToArrayL( _L("User Heap") );       // 0
-    AddNewItemToArrayL( _L("Kernel Heap") );     // 1
-    AddNewItemToArrayL( _L("User Stacks") );     // 2
-    AddNewItemToArrayL( _L("Global Data") );     // 3
-    AddNewItemToArrayL( _L("Disk Usage") );      // 4
-    AddNewItemToArrayL( _L("Open Files") );      // 5
-    AddNewItemToArrayL( _L("RAM-loaded Code") ); // 6
-    AddNewItemToArrayL( _L("System Memory") );   // 7
-    AddNewItemToArrayL( _L("Local Chunks") );    // 8
-    AddNewItemToArrayL( _L("Global Chunks") );   // 9
-    AddNewItemToArrayL( _L("RAM Drive") );       // 10
-    AddNewItemToArrayL( _L("FileServer Cache") );// 11
-    AddNewItemToArrayL( _L("Kernel Handles") );  // 12
-    AddNewItemToArrayL( _L("Bitmap Handles") );  // 13
-    AddNewItemToArrayL( _L("Window Groups") );   // 14
+    AddNewItemToArrayL( _L("User Heap") );       // 0 >> 0
+    //AddNewItemToArrayL( _L("Kernel Heap") );     // 1
+    //AddNewItemToArrayL( _L("User Stacks") );     // 2
+    //AddNewItemToArrayL( _L("Global Data") );     // 3
+    AddNewItemToArrayL( _L("Disk Usage") );      // 4 >> 1
+    AddNewItemToArrayL( _L("Open Files") );      // 5 >> 2
+    AddNewItemToArrayL( _L("RAM-loaded Code") ); // 6 >> 3
+    AddNewItemToArrayL( _L("System Memory") );   // 7 >> 4
+    AddNewItemToArrayL( _L("Local Chunks") );    // 8 >> 5
+    AddNewItemToArrayL( _L("Global Chunks") );   // 9 >> 6
+    AddNewItemToArrayL( _L("RAM Drive") );       // 10 >> 7
+    AddNewItemToArrayL( _L("FileServer Cache") );// 11 >> 8
+    AddNewItemToArrayL( _L("Kernel Handles") );  // 12 >> 9
+    //AddNewItemToArrayL( _L("Bitmap Handles") );  // 13
+    AddNewItemToArrayL( _L("Window Groups") );   // 14 >> 10
     }
 
 
 void CSWMTCategorySelectionCheckBoxSettingItem::StoreL()
     {
     iExtCategories = 0;
-    if ( iItemArray->At( 11 )->SelectionStatus() )
+    if ( iItemArray->At( 8 )->SelectionStatus() )
         iExtCategories |= TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryFileServerCache; 
-    if ( iItemArray->At( 13 )->SelectionStatus() )
-        iExtCategories |= TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryBitmapHandles; 
+    //if ( iItemArray->At( 13 )->SelectionStatus() )
+    //    iExtCategories |= TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryBitmapHandles; 
     if ( iItemArray->At( 0 )->SelectionStatus() )
         iExtCategories |= TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryUserHeap; 
-    if ( iItemArray->At( 1 )->SelectionStatus() )
-        iExtCategories |= TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryKernelHeap; 
-    if ( iItemArray->At( 8 )->SelectionStatus() )
+    //if ( iItemArray->At( 1 )->SelectionStatus() )
+    //    iExtCategories |= TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryKernelHeap; 
+    if ( iItemArray->At( 5 )->SelectionStatus() )
         iExtCategories |= TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryLocalChunks; 
-    if ( iItemArray->At( 9 )->SelectionStatus() )
+    if ( iItemArray->At( 6 )->SelectionStatus() )
         iExtCategories |= TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryGlobalChunks; 
-    if ( iItemArray->At( 10 )->SelectionStatus() )
+    if ( iItemArray->At( 7 )->SelectionStatus() )
         iExtCategories |= TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryRAMDrive; 
-    if ( iItemArray->At( 2 )->SelectionStatus() )
-        iExtCategories |= TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryUserStacks; 
+    //if ( iItemArray->At( 2 )->SelectionStatus() )
+    //    iExtCategories |= TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryUserStacks; 
+    //if ( iItemArray->At( 3 )->SelectionStatus() )
+    //    iExtCategories |= TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryGlobalData; 
     if ( iItemArray->At( 3 )->SelectionStatus() )
-        iExtCategories |= TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryGlobalData; 
-    if ( iItemArray->At( 6 )->SelectionStatus() )
         iExtCategories |= TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryRAMLoadedCode; 
-    if ( iItemArray->At( 12 )->SelectionStatus() )
+    if ( iItemArray->At( 9 )->SelectionStatus() )
         iExtCategories |= TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryKernelHandles; 
-    if ( iItemArray->At( 5 )->SelectionStatus() )
+    if ( iItemArray->At( 2 )->SelectionStatus() )
         iExtCategories |= TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryOpenFiles; 
-    if ( iItemArray->At( 4 )->SelectionStatus() )
+    if ( iItemArray->At( 1 )->SelectionStatus() )
         iExtCategories |= TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryDiskusage; 
-    if ( iItemArray->At( 7 )->SelectionStatus() )
+    if ( iItemArray->At( 4 )->SelectionStatus() )
         iExtCategories |= TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategorySystemMemory; 
-    if ( iItemArray->At( 14 )->SelectionStatus() )
+    if ( iItemArray->At( 10 )->SelectionStatus() )
         iExtCategories |= TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryWindowGroups; 
     }
 
 
 void CSWMTCategorySelectionCheckBoxSettingItem::LoadL()
     {
-    iItemArray->At( 11 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryFileServerCache );
-    iItemArray->At( 13 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryBitmapHandles );
+    iItemArray->At( 8 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryFileServerCache );
+    //iItemArray->At( 13 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryBitmapHandles );
     iItemArray->At( 0 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryUserHeap );
-    iItemArray->At( 1 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryKernelHeap );
-    iItemArray->At( 8 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryLocalChunks );
-    iItemArray->At( 9 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryGlobalChunks );
-    iItemArray->At( 10 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryRAMDrive );
-    iItemArray->At( 2 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryUserStacks );
-    iItemArray->At( 3 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryGlobalData );
-    iItemArray->At( 6 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryRAMLoadedCode );
-    iItemArray->At( 12 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryKernelHandles );
-    iItemArray->At( 5 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryOpenFiles );
-    iItemArray->At( 4 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryDiskusage );
-    iItemArray->At( 7 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategorySystemMemory );
-    iItemArray->At( 14 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryWindowGroups );
+    //iItemArray->At( 1 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryKernelHeap );
+    iItemArray->At( 5 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryLocalChunks );
+    iItemArray->At( 6 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryGlobalChunks );
+    iItemArray->At( 7 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryRAMDrive );
+    //iItemArray->At( 2 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryUserStacks );
+    //iItemArray->At( 3 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryGlobalData );
+    iItemArray->At( 3 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryRAMLoadedCode );
+    iItemArray->At( 9 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryKernelHandles );
+    iItemArray->At( 2 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryOpenFiles );
+    iItemArray->At( 1 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryDiskusage );
+    iItemArray->At( 4 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategorySystemMemory );
+    iItemArray->At( 10 )->SetSelectionStatus( iExtCategories & TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryWindowGroups );
     }
 
 
--- a/perfapps/memspyui/ui/avkon/src/MemSpyViewKernelContainers.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/memspyui/ui/avkon/src/MemSpyViewKernelContainers.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -48,6 +48,7 @@
 
 CMemSpyViewKernelContainers::~CMemSpyViewKernelContainers()
     {
+	iKernelObjects.Reset();	
     //delete iModel;
     }
 
@@ -87,7 +88,7 @@
 CMemSpyViewBase* CMemSpyViewKernelContainers::PrepareChildViewL()
     {	
     CMemSpyViewBase* child = NULL;
-    const TInt index = iListBox->CurrentItemIndex();
+    const TInt index = iListBox->CurrentItemIndex();    
     //child = new(ELeave) CMemSpyViewKernelObjects( iEngine, iObserver, iModel->At( index ).Type() );
     child = new(ELeave) CMemSpyViewKernelObjects( iMemSpySession, iObserver, iKernelObjects[index]->Type() );
     CleanupStack::PushL( child );
--- a/perfapps/memspyui/ui/avkon/src/MemSpyViewProcesses.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/memspyui/ui/avkon/src/MemSpyViewProcesses.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -56,7 +56,7 @@
 
 CMemSpyViewProcesses::~CMemSpyViewProcesses()
     {	
-	iProcesses.Close();
+	iProcesses.Reset();
     //delete iSearchField;
     delete iMatcherBuffer;
     }
--- a/perfapps/memspyui/ui/avkon/src/MemSpyViewServerList.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/memspyui/ui/avkon/src/MemSpyViewServerList.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -32,7 +32,7 @@
 // User includes
 #include "MemSpyUiUtils.h"
 #include "MemSpyViewMainMenu.h"
-#include "MemSpyViewProcesses.h"
+#include "MemSpyViewThreads.h"
 #include "MemSpyContainerObserver.h"
 
 
@@ -53,6 +53,7 @@
 CMemSpyViewServerList::~CMemSpyViewServerList()
     {
     delete iList;
+    iServers.Reset();    
     }
 
 
@@ -121,9 +122,10 @@
     {
     CMemSpyViewBase* child = NULL;
 
-    if  ( iActionedItemIndex )
+    if  ( iActionedItemIndex >= 0 )
         {
-		child = new(ELeave) CMemSpyViewProcesses( iMemSpySession, iObserver, iServers[iActionedItemIndex]->Id() );
+		//child = new(ELeave) CMemSpyViewProcesses( iMemSpySession, iObserver, iServers[iActionedItemIndex]->ProcessId() );
+		child = new(ELeave) CMemSpyViewThreads( iMemSpySession, iObserver, iServers[iActionedItemIndex]->ProcessId(), iServers[iActionedItemIndex]->ThreadId() );
 		CleanupStack::PushL( child );
 		child->ConstructL( Rect(), *Parent() );
 		CleanupStack::Pop( child );        	
@@ -192,7 +194,7 @@
         }
     else
         {
-        iActionedItem = NULL;
+		iActionedItemIndex = -1;
         }
 
     // Notify observer about an item being 'fired'
--- a/perfapps/memspyui/ui/avkon/src/MemSpyViewThreads.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/memspyui/ui/avkon/src/MemSpyViewThreads.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -46,6 +46,7 @@
 
 CMemSpyViewThreads::~CMemSpyViewThreads()
     {
+	iThreads.Reset();
     }
 
  
--- a/perfapps/memspyui/ui/hb/hb.pro	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/memspyui/ui/hb/hb.pro	Fri Sep 17 14:22:55 2010 +0300
@@ -44,7 +44,9 @@
 	inc/memspyecomcategoryview.h \
 	inc/memspyecominterfaceview.h \
 	inc/memspyecomimplementationview.h \
-	inc/memspyecomimplementationdetailview.h
+	inc/memspyecomimplementationdetailview.h \
+	inc/memspywindowgroupsview.h \
+	inc/memspywindowgroupsdetailview.h
 
 SOURCES += src/main.cpp \
 	src/enginewrapper.cpp \
@@ -67,7 +69,9 @@
 	src/memspyecomcategoryview.cpp \
 	src/memspyecominterfaceview.cpp \
 	src/memspyecomimplementationview.cpp \
-	src/memspyecomimplementationdetailview.cpp
+	src/memspyecomimplementationdetailview.cpp \
+	src/memspywindowgroupsview.cpp \
+	src/memspywindowgroupsdetailview.cpp
 
 RESOURCES +=
 
@@ -76,7 +80,6 @@
         -lbafl \
         -lMemSpyClient \
         -lefsrv
-        
 
     TARGET.CAPABILITY = ReadUserData WriteUserData ReadDeviceData WriteDeviceData SwEvent PowerMgmt
 
--- a/perfapps/memspyui/ui/hb/inc/enginewrapper.h	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/memspyui/ui/hb/inc/enginewrapper.h	Fri Sep 17 14:22:55 2010 +0300
@@ -348,7 +348,9 @@
     
     virtual  ~MemSpyServer() { delete mServer; }
     
-    ProcessId id() const { return mServer->Id(); }
+    ProcessId processId() const { return mServer->ProcessId(); }
+    
+    ThreadId threadId() const { return mServer->ThreadId(); }
     
     QString name() const { return QString((QChar*) mServer->Name().Ptr(), mServer->Name().Length()); }
         
@@ -431,6 +433,47 @@
     CMemSpyApiEComImplementation *mData;
 };
 
+class MemSpyWindowGroup
+{
+public:
+    MemSpyWindowGroup(CMemSpyApiWindowGroup* group)
+        : mData(group)
+    {}
+    
+    virtual  ~MemSpyWindowGroup() { delete mData; }
+    
+    int id() const { return mData->Id(); }
+    
+    QString name() const { return QString((QChar*) mData->Name().Ptr(), mData->Name().Length()); }
+    
+    QString fullName() const { return QString((QChar*) mData->FullName().Ptr(), mData->FullName().Length()); }
+    
+    ThreadId threadId() const { return mData->ThreadId(); }
+    
+    int ordinalPosition() const { return mData->OrdinalPosition(); }
+    
+    int priority() const { return mData->Priority(); }
+    
+    int windowGroupHandle() const { return mData->WindowGroupHandle(); }
+    
+    int uid() const { return mData->Uid().iUid; }
+    
+    bool isBusy() const { return mData->IsBusy(); }
+    
+    bool isSystem() const { return mData->IsSystem(); }
+    
+    bool isHidden() const { return mData->IsHidden(); }
+        
+    bool isFocused() const { return mData->IsFocused(); }
+    
+    QString caption() const { return QString((QChar*) mData->Caption().Ptr(), mData->Caption().Length()); }
+    
+    QString docName() const { return QString((QChar*) mData->DocName().Ptr(), mData->DocName().Length()); }
+    
+private:
+    CMemSpyApiWindowGroup *mData;
+};
+
 
 class MemSpyDwoProgressTracker : public QObject, public CActive
 {
@@ -597,6 +640,8 @@
 	
 	QList<MemSpyEComImplementation*> getEComImplementations(int interfaceId);
 	
+	QList<MemSpyWindowGroup*> getWindowGroups();
+	
 	MemSpyDwoTracker* createDeviceWideOperation(DeviceWideOperation operation);
 	
 	MemSpyKernelHeapDumpTracker* createKernelHeapDumpTracker();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/perfapps/memspyui/ui/hb/inc/memspywindowgroupsdetailview.h	Fri Sep 17 14:22:55 2010 +0300
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2009 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:
+ *  
+ */
+
+#ifndef MEMSPYWINDOWGROUPSDETAILVIEW_H_
+#define MEMSPYWINDOWGROUPSDETAILVIEW_H_
+
+#include <QAbstractListModel>
+
+#include "memspylistview.h"
+#include "enginewrapper.h"
+
+
+class MemSpyWindowGroupsDetailModel : public QAbstractListModel
+{
+public:
+    MemSpyWindowGroupsDetailModel(MemSpyWindowGroup* group, QObject *parent = 0);
+    
+    int rowCount(const QModelIndex &parent = QModelIndex()) const;
+    
+    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+    
+private:
+    QVariantList mData;
+};
+
+class MemSpyWindowGroupsDetailView : public MemSpyListView
+{
+    
+    Q_OBJECT
+    
+public:
+    MemSpyWindowGroupsDetailView(EngineWrapper &engine, ViewManager &viewManager) : 
+            MemSpyListView(engine, viewManager),
+            mModel(0)
+        {}
+    
+protected:
+    void initialize(const QVariantMap& params);
+    
+private:
+    MemSpyWindowGroupsDetailModel* mModel;
+};
+
+#endif /* MEMSPYWINDOWGROUPSDETAILVIEW_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/perfapps/memspyui/ui/hb/inc/memspywindowgroupsview.h	Fri Sep 17 14:22:55 2010 +0300
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2009 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:
+ *  
+ */
+
+#ifndef MEMSPYWINDOWGROUPSVIEW_H_
+#define MEMSPYWINDOWGROUPSVIEW_H_
+
+#include <QAbstractListModel>
+
+#include "memspylistview.h"
+#include "enginewrapper.h"
+
+
+class MemSpyWindowGroupsModel : public QAbstractListModel
+{
+public:
+    MemSpyWindowGroupsModel(EngineWrapper &engine, QObject *parent = 0);
+    
+    ~MemSpyWindowGroupsModel();
+    
+    int rowCount(const QModelIndex &parent = QModelIndex()) const;
+    
+    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+    
+    void refresh();
+    
+private:
+    int mInterfaceId;
+    
+    EngineWrapper& mEngine;
+    
+    QList<MemSpyWindowGroup*> mData;
+};
+
+class MemSpyWindowGroupsView : public MemSpyListView
+{
+    
+    Q_OBJECT
+    
+public:
+    MemSpyWindowGroupsView(EngineWrapper &engine, ViewManager &viewManager) : 
+            MemSpyListView(engine, viewManager),
+            mModel(0)
+        {}
+    
+public slots:
+    virtual void refresh();
+    
+protected:
+    void initialize(const QVariantMap& params);
+    
+protected:
+    virtual bool isRefreshable() const { return true; }
+    
+private slots:
+    void itemClicked(const QModelIndex& index);
+    
+private:
+    MemSpyWindowGroupsModel* mModel;
+};
+
+#endif /* MEMSPYWINDOWGROUPSVIEW_H_ */
--- a/perfapps/memspyui/ui/hb/inc/viewmanager.h	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/memspyui/ui/hb/inc/viewmanager.h	Fri Sep 17 14:22:55 2010 +0300
@@ -39,6 +39,8 @@
 	EComInterfaceView,
 	EComImplementationView,
 	EComImplementationDetailView,
+	WindowGroupsView,
+	WindowGroupsDetailView,
 };
 
 class HbMainWindow;
--- a/perfapps/memspyui/ui/hb/src/enginewrapper.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/memspyui/ui/hb/src/enginewrapper.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -433,6 +433,20 @@
     return result;
 }
 
+QList<MemSpyWindowGroup*> EngineWrapper::getWindowGroups()
+{
+    QList<MemSpyWindowGroup*> result;
+                    
+    RArray<CMemSpyApiWindowGroup*> groups;
+    
+    QT_TRAP_THROWING(mSession.GetWindowGroupsL(groups));
+    
+    for (TInt i=0; i<groups.Count(); i++)
+        result.append(new MemSpyWindowGroup(groups[i]));
+    
+    return result;
+}
+
 
 MemSpyDwoTracker* EngineWrapper::createDeviceWideOperation(DeviceWideOperation operation)
 {
@@ -457,8 +471,8 @@
 	{
 	case SwmtModeBasic:
 		bits = TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryUserHeap | 
-			TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryUserStacks |
-			TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryGlobalData |
+			//TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryUserStacks |
+			//TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategoryGlobalData |
 			TMemSpyEngineHelperSysMemTrackerConfig::EMemSpyEngineSysMemTrackerCategorySystemMemory;
 		
 		break;
--- a/perfapps/memspyui/ui/hb/src/memspymainview.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/memspyui/ui/hb/src/memspymainview.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -32,7 +32,8 @@
 			<< tr("Kernel Objects")
 			<< tr("Tracking")
             << tr("Servers")
-            << tr("ECom");
+            << tr("ECom")
+            << tr("Window Groups");
 	mListView.setModel(new QStringListModel(items, this));
     
 	QObject::connect(&mListView, SIGNAL(released(QModelIndex)), this, SLOT(itemClicked(QModelIndex)));
@@ -41,7 +42,14 @@
 void MemSpyMainView::itemClicked(const QModelIndex& index)
 {
 	Q_UNUSED(index);
-	ViewIndex indexes[] = { ProcessView, KernelObjectTypeView, TrackingView, ServerView, EComCategoryView };
+	ViewIndex indexes[] = { 
+	        ProcessView, 
+	        KernelObjectTypeView, 
+	        TrackingView, 
+	        ServerView, 
+	        EComCategoryView,
+	        WindowGroupsView
+	};
     mViewManager.showView(indexes[index.row()]);
 }
 
--- a/perfapps/memspyui/ui/hb/src/memspyserverview.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/memspyui/ui/hb/src/memspyserverview.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -49,7 +49,7 @@
     }
     
     if (role == Qt::UserRole)
-        return mServers.at(index.row())->id();
+        return mServers.at(index.row())->processId();
     
     return QVariant();
 }
--- a/perfapps/memspyui/ui/hb/src/memspyswmtview.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/memspyui/ui/hb/src/memspyswmtview.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -129,7 +129,7 @@
 	
 	mProgressDialog = new HbProgressDialog(HbProgressDialog::WaitDialog);
 	mProgressDialog->setText(tr("Please wait..."));
-	mProgressDialog->setPrimaryAction(0);
+	mProgressDialog->removeAction(mProgressDialog->actions().at(0));
 	mProgressDialog->show();
 	
 	tracker->start();
--- a/perfapps/memspyui/ui/hb/src/memspyview.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/memspyui/ui/hb/src/memspyview.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -142,7 +142,7 @@
 void MemSpyView::showAbout()
 {
 	HbMessageBox *messageBox = new HbMessageBox(HbMessageBox::MessageTypeInformation);
-	messageBox->setText("Version 2.2.0 - 24th August 2010. Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. Licensed under Eclipse Public License v1.0.");
+	messageBox->setText("Version 2.2.1 - 7th September 2010. Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. Licensed under Eclipse Public License v1.0.");
 	HbLabel *header = new HbLabel("About MemSpy", messageBox);
 	messageBox->setHeadingWidget(header);
 	messageBox->setAttribute(Qt::WA_DeleteOnClose);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/perfapps/memspyui/ui/hb/src/memspywindowgroupsdetailview.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2009 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:
+ *  
+ */
+
+#include "memspywindowgroupsdetailview.h"
+#include "viewmanager.h"
+
+MemSpyWindowGroupsDetailModel::MemSpyWindowGroupsDetailModel(MemSpyWindowGroup* group, QObject *parent) :
+    QAbstractListModel(parent)
+{
+    mData << (QStringList() << tr("WG ID") << QString("%1").arg(group->id()));
+    mData << (QStringList() << tr("Client ThreadId") << QString("%1").arg(group->threadId()));
+    mData << (QStringList() << tr("Thr") << group->fullName());
+    mData << (QStringList() << tr("Priority") << QString("%1").arg(group->priority()));
+    mData << (QStringList() << tr("Handle") << QString("0x%1").arg(group->windowGroupHandle(), 0, 16));
+    mData << (QStringList() << tr("Name") << group->name());
+    mData << (QStringList() << tr("UID") << QString("%1").arg(group->uid()));
+    mData << (QStringList() << tr("IsBusy") << (group->isBusy() ? tr("Yes") : tr("No")));
+    mData << (QStringList() << tr("IsSystem") << (group->isSystem() ? tr("Yes") : tr("No")));
+    mData << (QStringList() << tr("IsHidden") << (group->isHidden() ? tr("Yes") : tr("No")));
+    mData << (QStringList() << tr("Caption") << group->caption());
+    mData << (QStringList() << tr("Docname") << group->docName());
+}
+    
+int MemSpyWindowGroupsDetailModel::rowCount(const QModelIndex &parent) const
+{
+    Q_UNUSED(parent);
+    return mData.count();
+}
+    
+QVariant MemSpyWindowGroupsDetailModel::data(const QModelIndex &index, int role) const
+{
+    if (role == Qt::DisplayRole)
+        return mData.at(index.row());
+    
+    return QVariant();
+}    
+
+void MemSpyWindowGroupsDetailView::initialize(const QVariantMap& params)
+{
+    setTitle(tr("Window Group Detail"));
+    MemSpyView::initialize(params);
+    
+    MemSpyWindowGroup* group = static_cast<MemSpyWindowGroup*>(
+            qVariantValue<void*>(params["group"]));
+    
+    mModel = new MemSpyWindowGroupsDetailModel(group);
+    mListView.setModel(mModel);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/perfapps/memspyui/ui/hb/src/memspywindowgroupsview.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2009 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:
+ *  
+ */
+
+#include "memspywindowgroupsview.h"
+#include "viewmanager.h"
+
+MemSpyWindowGroupsModel::MemSpyWindowGroupsModel(EngineWrapper &engine, QObject *parent) :
+    QAbstractListModel(parent),
+    mEngine(engine),
+    mData(engine.getWindowGroups())
+{
+}
+
+MemSpyWindowGroupsModel::~MemSpyWindowGroupsModel()
+{
+    qDeleteAll(mData);
+}
+    
+int MemSpyWindowGroupsModel::rowCount(const QModelIndex &parent) const
+{
+    Q_UNUSED(parent);
+    return mData.count();
+}
+    
+QVariant MemSpyWindowGroupsModel::data(const QModelIndex &index, int role) const
+{
+    if (role == Qt::DisplayRole) {
+        const MemSpyWindowGroup* group = mData.at(index.row());
+        
+        QStringList lines;
+        lines << group->fullName();
+        lines << QString("%1").arg(group->id());
+        
+        return lines;
+    }
+    
+    if (role == Qt::UserRole)
+        return qVariantFromValue<void*>(mData.at(index.row()));
+    
+    return QVariant();
+}
+
+void MemSpyWindowGroupsModel::refresh()
+{
+    beginResetModel();
+    QList<MemSpyWindowGroup*> data = mEngine.getWindowGroups();
+    qDeleteAll(mData);
+    mData = data;
+    endResetModel();
+}
+    
+
+void MemSpyWindowGroupsView::initialize(const QVariantMap& params)
+{
+    setTitle(tr("Window Groups"));
+        
+    MemSpyView::initialize(params);
+    
+    mModel = new MemSpyWindowGroupsModel(mEngine, this);
+    mListView.setModel(mModel);
+    
+    connect(&mListView, SIGNAL(activated(QModelIndex)), this, SLOT(itemClicked(QModelIndex)));
+}
+
+void MemSpyWindowGroupsView::itemClicked(const QModelIndex& index)
+{
+    QVariantMap map;
+    map.insert("group", index.data(Qt::UserRole));
+    mViewManager.showView(WindowGroupsDetailView, map);
+}
+
+void MemSpyWindowGroupsView::refresh()
+{ 
+    mModel->refresh(); 
+}
--- a/perfapps/memspyui/ui/hb/src/viewmanager.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/memspyui/ui/hb/src/viewmanager.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -40,6 +40,8 @@
 #include "memspyecominterfaceview.h"
 #include "memspyecomimplementationview.h"
 #include "memspyecomimplementationdetailview.h"
+#include "memspywindowgroupsview.h"
+#include "memspywindowgroupsdetailview.h"
 
 template <typename T>
 static MemSpyView* factory(EngineWrapper &engine, ViewManager &viewManager)
@@ -64,6 +66,8 @@
 	&factory<MemSpyEComInterfaceView>,
 	&factory<MemSpyEComImplementationView>,
 	&factory<MemSpyEComImplementationDetailView>,
+	&factory<MemSpyWindowGroupsView>,
+	&factory<MemSpyWindowGroupsDetailView>,
 };
 
 
--- a/perfapps/perfmon/data/perfmon.rss	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/perfmon/data/perfmon.rss	Fri Sep 17 14:22:55 2010 +0300
@@ -594,7 +594,7 @@
             id = EAknMessageQueryContentId;
             control = AVKON_MESSAGE_QUERY
                 {
-                message = "Version 1.2.0 - 26th August 2010. Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. Licensed under Eclipse Public License v1.0.";
+                message = "Version 1.2.1 - 10th September 2010. Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. Licensed under Eclipse Public License v1.0.";
                 };
             }
         };
--- a/perfapps/perfmon/engine/inc/perfmon_powerlistener.h	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/perfmon/engine/inc/perfmon_powerlistener.h	Fri Sep 17 14:22:55 2010 +0300
@@ -25,10 +25,12 @@
 #include "perfmon.hrh"
 
 // HWRM reporting interval multiplier
-const TInt KSampleIntervalMultiple = 1;
-const TInt KReportingDuration = 0;  // Infinite duration
+const TInt KHWRMSampleIntervalMultiple = 1;
+const TInt KHWRMReportingDuration = 0;  // Infinite duration
 
-class CPerfMonPowerListener : public CBase, public MHWRMBatteryPowerObserver
+class CPerfMonPowerListenerImpl;
+
+class CPerfMonPowerListener : public CBase
     {
 public:
     static CPerfMonPowerListener* NewL();
@@ -38,13 +40,42 @@
     CPerfMonPowerListener();
     void ConstructL();
 
+public:
+    // Is power monitoring feature suported by platform
+    static inline TBool IsSupported() { return iIsSupported; };
+
+    // Start monitoring power data
+    TInt Activate();
+    // Stop monitoring power data
+    void DeActivate();
+
+    // Get average power since last read.
+    TInt GetPower();
+    // Maximum power value since measurement started
+    TInt GetMaxPower();
+
+private:
+    static TBool                iIsSupported;
+    CPerfMonPowerListenerImpl*  iPowerListenerImpl;
+    };
+
+
+
+class CPerfMonPowerListenerImpl : public CBase, public MHWRMBatteryPowerObserver
+    {
+public:
+    static CPerfMonPowerListenerImpl* NewL();
+    ~CPerfMonPowerListenerImpl();
+
+private:
+    CPerfMonPowerListenerImpl();
+    void ConstructL();
+
     // Handling central repository max reporting period key
-    void GetReportingPeriodL();
+    TInt GetReportingPeriodL();
     void SetReportingPeriodL(TInt aDuration);
 
 public:
-    static TBool IsSupported();
-
     // Start monitoring power values
     TInt Activate();
     // Stop monitoring power values
--- a/perfapps/perfmon/engine/src/perfmon_engine.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/perfmon/engine/src/perfmon_engine.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -863,7 +863,7 @@
     iSettings.iCPUMode = ECPUModeCPUTime;
     iSettings.iKeepBacklightOn = ETrue;
 
-    iSettings.iDataPopupVisibility = EDataPopupVisbilityAlwaysOn;
+    iSettings.iDataPopupVisibility = EDataPopupVisbilityAlwaysAlwaysOff;
     iSettings.iDataPopupLocation = EDataPopupLocationTopRight;
     iSettings.iDataPopupSources.SetDefaults1();
 
--- a/perfapps/perfmon/engine/src/perfmon_powerlistener.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/perfmon/engine/src/perfmon_powerlistener.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -22,241 +22,279 @@
 #include <centralrepository.h>
 #include <hwrm/hwrmpowerdomaincrkeys.h>
 
-
-#if (SYMBIAN_VERSION_SUPPORT == SYMBIAN_3)
-
-    CPerfMonPowerListener* CPerfMonPowerListener::NewL()
-        {
-        CPerfMonPowerListener* self = new (ELeave) CPerfMonPowerListener();
-        CleanupStack::PushL(self);
-        self->ConstructL();
-        CleanupStack::Pop();
-        return self;
-        }
-
-    // --------------------------------------------------------------------------------------------
-
-    CPerfMonPowerListener::CPerfMonPowerListener() :
-        iHWRMPower(0),
-        iLastPowerAvg(0),
-        iMaxPower(0),
-        iOriginalMaxReportingPeriod(0)
-        {
-        }
-
-    // --------------------------------------------------------------------------------------------
+TBool CPerfMonPowerListener::iIsSupported = ETrue;
 
-    void CPerfMonPowerListener::ConstructL()
-        {
-        }
-
-    // --------------------------------------------------------------------------------------------
-
-    CPerfMonPowerListener::~CPerfMonPowerListener()
-        {
-        DeActivate();
-        
-        if (iHWRMPower != 0)
-            {
-            delete iHWRMPower;
-            iHWRMPower = 0;
-            }
-        }
-
-    // --------------------------------------------------------------------------------------------
-
-    TBool CPerfMonPowerListener::IsSupported()
-        {
-        return ETrue;
-        }
-
-    // --------------------------------------------------------------------------------------------
+/*
+ *
+ * class CPerfMonPowerListener implementation
+ * 
+ */
 
-    TInt CPerfMonPowerListener::Activate()
-        {
-        if (iHWRMPower == 0)
-            {
-            TRAPD(err, iHWRMPower = CHWRMPower::NewL());
-            if (err != KErrNone)
-                {
-                return err;
-                }
-
-            // Callbacks to this object
-            err = iHWRMPower->SetPowerReportObserver(this);
-            if (err != KErrNone)
-                {
-                return err;
-                }
-            
-            TRAP_IGNORE(GetReportingPeriodL());
-            }
-
-        // Set infinite reporting period
-        TRAPD(err, SetReportingPeriodL(KReportingDuration));
-        if (err != KErrNone)
-            {
-            return err;
-            }
-
-        TRequestStatus status(KRequestPending);
+CPerfMonPowerListener* CPerfMonPowerListener::NewL()
+    {
+    CPerfMonPowerListener* self = new (ELeave) CPerfMonPowerListener();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
 
-        // Start the power consumption notification
-        iHWRMPower->StartAveragePowerReporting(status, KSampleIntervalMultiple);
-        User::WaitForRequest(status);
-
-        // Check if monitoring was succesfully started or already ongoing.
-        if ((status.Int() != KErrNone) && (status.Int() != KErrAlreadyExists))
-            {
-            return status.Int();
-            }
-
-        return KErrNone;
-        }
+// --------------------------------------------------------------------------------------------
 
-    // ---------------------------------------------------------------------------
+CPerfMonPowerListener::CPerfMonPowerListener() :
+    iPowerListenerImpl(NULL)
+    {
+    }
 
-    void CPerfMonPowerListener::DeActivate()
-        {
-        if (iHWRMPower != 0)
-            {
-            TRAP_IGNORE(iHWRMPower->StopAveragePowerReportingL());
-            }
-
-        // Restore original value to max sampling duration
-        TRAP_IGNORE(SetReportingPeriodL(iOriginalMaxReportingPeriod));
-
-        iPowerBuffer.Reset();
-        iLastPowerAvg = 0;
-        }
+// --------------------------------------------------------------------------------------------
 
-    // ---------------------------------------------------------------------------
-
-    TInt CPerfMonPowerListener::GetPower()
-        {
-        TInt avgPower = 0;
-        TInt newValueCount = iPowerBuffer.Count();
-
-        if (newValueCount > 0)
-            {
-            // Read all new values from buffer and calculate average from them.
-            for (int i = 0; i < newValueCount; i++)
-                {
-                avgPower += iPowerBuffer[i];
-                }
-            avgPower = avgPower / newValueCount;
-
-            iPowerBuffer.Reset();
-            iLastPowerAvg = avgPower;
-            }
-        else
-            {
-            avgPower = iLastPowerAvg;
-            }
-
-        return avgPower;
-        }
-
-    // ---------------------------------------------------------------------------
-
-    void CPerfMonPowerListener::PowerMeasurement(TInt aErrCode, CHWRMPower::TBatteryPowerMeasurementData& aMeasurement)
-        {
-        if (aErrCode == KErrNone)
-            {
-            // Store new value to buffer to wait for reading
-            TInt value = aMeasurement.iAverageVoltage * aMeasurement.iAverageCurrent;
-
-            // If charger is connected, reported values may be negative.
-            if (value < 0)
-                {
-                value = 0;
-                }
-
-            iPowerBuffer.Append(value);
-
-            if ( value > iMaxPower )
-                {
-                iMaxPower = value;
-                }
-            }
-        // Ignore any errors
-        }
-
-    void CPerfMonPowerListener::GetReportingPeriodL()
+void CPerfMonPowerListener::ConstructL()
+    {
+    TRAPD(err, iPowerListenerImpl = CPerfMonPowerListenerImpl::NewL());
+    if (err != KErrNone)
         {
-        CRepository* cenRep = CRepository::NewL(KCRUidPowerSettings);
-
-        CleanupStack::PushL(cenRep);
-        User::LeaveIfError(cenRep->Get(KPowerMaxReportingPeriod, iOriginalMaxReportingPeriod));
-        CleanupStack::Pop();
+        iPowerListenerImpl = NULL;
 
-        delete cenRep;
+        // Could not initialize power monitoring client. Feature support not available.
+        iIsSupported = EFalse;
         }
-
-    void CPerfMonPowerListener::SetReportingPeriodL(TInt aDuration)
-        {
-        CRepository* cenRep = CRepository::NewL(KCRUidPowerSettings);
+    }
 
-        CleanupStack::PushL(cenRep);
-        User::LeaveIfError(cenRep->Set(KPowerMaxReportingPeriod, aDuration));
-        CleanupStack::Pop();
-        
-        delete cenRep;
-        }
+// --------------------------------------------------------------------------------------------
 
-// SYMBIAN_VERSION_SUPPORT < SYMBIAN_3
-#else
+CPerfMonPowerListener::~CPerfMonPowerListener()
+    {
+    DeActivate();
 
-    // Stub implementation for older Symbian versions
-
-    CPerfMonPowerListener* CPerfMonPowerListener::NewL()
+    if (iPowerListenerImpl)
         {
-        CPerfMonPowerListener* self = new (ELeave) CPerfMonPowerListener();
-        CleanupStack::PushL(self);
-        self->ConstructL();
-        CleanupStack::Pop();
-        return self;
+        delete iPowerListenerImpl;
+        iPowerListenerImpl = 0;
         }
+    }
 
-    CPerfMonPowerListener::CPerfMonPowerListener() :
-        iHWRMPower(0),
-        iLastPowerAvg(0),
-        iMaxPower(0)
-        {
-        }
+// --------------------------------------------------------------------------------------------
 
-    void CPerfMonPowerListener::ConstructL()
+TInt CPerfMonPowerListener::Activate()
+    { 
+    if (iPowerListenerImpl)
         {
-        }
-
-    CPerfMonPowerListener::~CPerfMonPowerListener()
-        {
-        DeActivate();
+        return iPowerListenerImpl->Activate();
         }
-
-    TBool CPerfMonPowerListener::IsSupported()
-        {
-        return EFalse;
-        }
-
-    TInt CPerfMonPowerListener::Activate()
+    else
         {
         return KErrNotSupported;
         }
+    }
 
-    void CPerfMonPowerListener::DeActivate()
+// ---------------------------------------------------------------------------
+
+void CPerfMonPowerListener::DeActivate()
+    {
+    if (iPowerListenerImpl)
+        {
+        iPowerListenerImpl->DeActivate();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+
+TInt CPerfMonPowerListener::GetPower()
+    {
+    if (iPowerListenerImpl)
         {
+        return iPowerListenerImpl->GetPower();
         }
+    else
+        {
+        return 0;
+        }
+    }
 
-    TInt CPerfMonPowerListener::GetPower()
+// ---------------------------------------------------------------------------
+
+TInt CPerfMonPowerListener::GetMaxPower()
+    {
+    if (iPowerListenerImpl)
+        {
+        return iPowerListenerImpl->GetMaxPower();
+        }
+    else
         {
         return 0;
         }
+    }
 
-    void CPerfMonPowerListener::PowerMeasurement(TInt aErrCode, CHWRMPower::TBatteryPowerMeasurementData& aMeasurement)
+/*
+ *
+ * class CPerfMonPowerListenerImpl implementation
+ * 
+ */
+
+CPerfMonPowerListenerImpl* CPerfMonPowerListenerImpl::NewL()
+    {
+    CPerfMonPowerListenerImpl* self = new (ELeave) CPerfMonPowerListenerImpl();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+// --------------------------------------------------------------------------------------------
+
+CPerfMonPowerListenerImpl::CPerfMonPowerListenerImpl() :
+    iHWRMPower(NULL),
+    iLastPowerAvg(0),
+    iMaxPower(0),
+    iOriginalMaxReportingPeriod(0)
+    {
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CPerfMonPowerListenerImpl::ConstructL()
+    {
+    iHWRMPower = CHWRMPower::NewL();
+
+    // Callbacks to this object
+    User::LeaveIfError(iHWRMPower->SetPowerReportObserver(this));
+
+    iOriginalMaxReportingPeriod = GetReportingPeriodL();
+    }
+
+// --------------------------------------------------------------------------------------------
+
+CPerfMonPowerListenerImpl::~CPerfMonPowerListenerImpl()
+    {
+    DeActivate();
+
+    if (iHWRMPower)
         {
+        delete iHWRMPower;
+        iHWRMPower = 0;
+        }
+    }
+
+// --------------------------------------------------------------------------------------------
+
+TInt CPerfMonPowerListenerImpl::Activate()
+    {
+    // Set infinite reporting period
+    TRAPD(err, SetReportingPeriodL(KHWRMReportingDuration));
+    if (err != KErrNone)
+        {
+        return err;
+        }
+
+    TRequestStatus status(KRequestPending);
+
+    // Start the power consumption notification
+    iHWRMPower->StartAveragePowerReporting(status, KHWRMSampleIntervalMultiple);
+    User::WaitForRequest(status);
+
+    // Check if monitoring was succesfully started or already ongoing.
+    if ((status.Int() != KErrNone) && (status.Int() != KErrAlreadyExists))
+        {
+        return status.Int();
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+
+void CPerfMonPowerListenerImpl::DeActivate()
+    {
+    if (iHWRMPower)
+        {
+        TRAP_IGNORE(iHWRMPower->StopAveragePowerReportingL());
         }
 
-#endif
+    // Restore original value to max sampling duration
+    TRAP_IGNORE(SetReportingPeriodL(iOriginalMaxReportingPeriod));
+
+    iPowerBuffer.Reset();
+    iLastPowerAvg = 0;
+    }
+
+// ---------------------------------------------------------------------------
+
+TInt CPerfMonPowerListenerImpl::GetPower()
+    {
+    TInt avgPower = 0;
+    TInt newValueCount = iPowerBuffer.Count();
+
+    if (newValueCount > 0)
+        {
+        // Read all new values from buffer and calculate average from them.
+        for (int i = 0; i < newValueCount; i++)
+            {
+            avgPower += iPowerBuffer[i];
+            }
+        avgPower = avgPower / newValueCount;
+
+        iPowerBuffer.Reset();
+        iLastPowerAvg = avgPower;
+        }
+    // Use previous value if no new data has been reported since previous call.
+    // This may happen since perfmon sampling and power reporting are not synchronized.
+    else
+        {
+        avgPower = iLastPowerAvg;
+        }
+
+    return avgPower;
+    }
+
+// ---------------------------------------------------------------------------
+
+void CPerfMonPowerListenerImpl::PowerMeasurement(TInt aErrCode, CHWRMPower::TBatteryPowerMeasurementData& aMeasurement)
+    {
+    if (aErrCode == KErrNone)
+        {
+        // Calculate power value
+        TInt value = aMeasurement.iAverageVoltage * aMeasurement.iAverageCurrent;
+
+        // If charger is connected, reported values may be negative.
+        if (value < 0)
+            {
+            value = 0;
+            }
+
+        // Store new value to buffer to wait for reading
+        iPowerBuffer.Append(value);
+
+        if ( value > iMaxPower )
+            {
+            iMaxPower = value;
+            }
+        }
+    // Ignore any reports containing error information
+    }
+
+// ---------------------------------------------------------------------------
+
+TInt CPerfMonPowerListenerImpl::GetReportingPeriodL()
+    {
+    CRepository* cenRep = CRepository::NewL(KCRUidPowerSettings);
+
+    CleanupStack::PushL(cenRep);
+    TInt reportingPeriod(0);
+    User::LeaveIfError(cenRep->Get(KPowerMaxReportingPeriod, reportingPeriod));
+    CleanupStack::PopAndDestroy();
+
+    return reportingPeriod;
+    }
+
+// ---------------------------------------------------------------------------
+
+void CPerfMonPowerListenerImpl::SetReportingPeriodL(TInt aDuration)
+    {
+    CRepository* cenRep = CRepository::NewL(KCRUidPowerSettings);
+
+    CleanupStack::PushL(cenRep);
+    User::LeaveIfError(cenRep->Set(KPowerMaxReportingPeriod, aDuration));
+    CleanupStack::PopAndDestroy();
+    }
 
 // End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/perfapps/perfmon/engine/src/perfmon_powerlistener_stub.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2009 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:  
+ *
+ */
+
+// INCLUDE FILES
+#include "perfmon_powerlistener.h"
+
+// Power monitoring not supported. Use stub implementation.
+TBool CPerfMonPowerListener::iIsSupported = EFalse;
+
+/*
+ *
+ * class CPerfMonPowerListener stub implementation
+ * 
+ */
+
+CPerfMonPowerListener* CPerfMonPowerListener::NewL()
+    {
+    CPerfMonPowerListener* self = new ( ELeave ) CPerfMonPowerListener();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+CPerfMonPowerListener::CPerfMonPowerListener() :
+    iPowerListenerImpl(NULL)
+    {
+    }
+
+void CPerfMonPowerListener::ConstructL()
+    {
+    }
+
+CPerfMonPowerListener::~CPerfMonPowerListener()
+    {
+    DeActivate();
+    }
+
+TInt CPerfMonPowerListener::Activate()
+    {
+    return KErrNotSupported;
+    }
+
+void CPerfMonPowerListener::DeActivate()
+    {
+    }
+
+TInt CPerfMonPowerListener::GetPower()
+    {
+    return 0;
+    }
+
+TInt CPerfMonPowerListener::GetMaxPower()
+    {
+    return 0;
+    }
+
+// End of File
--- a/perfapps/perfmon/group/ReleaseNotes_PerfMon.txt	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/perfmon/group/ReleaseNotes_PerfMon.txt	Fri Sep 17 14:22:55 2010 +0300
@@ -1,7 +1,7 @@
 ===============================================================================
 
-RELEASE NOTES - PERFORMANCE MONITOR v1.2.0
-RELEASED 26th August 2010 
+RELEASE NOTES - PERFORMANCE MONITOR v1.2.1
+RELEASED 10th September 2010 
 
 SUPPORTS S60 5.2+
 
@@ -26,11 +26,11 @@
 
 ===============================================================================
 
-What's New in v1.2.0
+What's New in v1.2.1
 ====================
-- SMP support
-- Added power usage statistics
-- Error corrections  
+- Feature: Power usage analysis for TB 10.1 devices 
+- Feature: Datapopup can be set to visible
+
 
 ===============================================================================
 
@@ -67,12 +67,18 @@
 
 Known Issues:
 =============
-N/A
+Datapopup can make Orbit's main menu difficult to use. Works better in landscape mode.
 
 ===============================================================================
 
 Version History:
+
 ================
+Version 1.2.0 - 26th August 2010 
+====================
+- Feature: Support for multiple CPUs in the device
+- Feature: Power usage analysis in watts
+- Error corrections
 
 Version 1.1.1 - 26th August 2010 
 ====================
--- a/perfapps/perfmon/group/group.pro	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/perfmon/group/group.pro	Fri Sep 17 14:22:55 2010 +0300
@@ -18,5 +18,4 @@
 TEMPLATE = subdirs
 
 BLD_INF_RULES.prj_platforms += "$${LITERAL_HASH}include \"bld_generic.inf\""
-#TODO: Functionality broken 
-#BLD_INF_RULES.prj_exports += "../rom/perfmon_datapopup.iby CORE_IBY_EXPORT_PATH(tools,perfmon_datapopup.iby)"
\ No newline at end of file
+BLD_INF_RULES.prj_exports += "../rom/perfmon_datapopup.iby CORE_IBY_EXPORT_PATH(tools,perfmon_datapopup.iby)"
\ No newline at end of file
--- a/perfapps/perfmon/perfmon.pro	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/perfmon/perfmon.pro	Fri Sep 17 14:22:55 2010 +0300
@@ -20,6 +20,5 @@
 DEFINES += QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT QT_NO_DEBUG
 
 SUBDIRS = group \
-          #TODO: Functionality broken
-          #ui/hb/datapopup \
+          ui/hb/datapopup \
           ui/hb/app
--- a/perfapps/perfmon/ui/avkon/group/perfmon.mmp	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/perfmon/ui/avkon/group/perfmon.mmp	Fri Sep 17 14:22:55 2010 +0300
@@ -18,6 +18,7 @@
 
 #include <data_caging_paths.hrh>
 #include <platform_paths.hrh>
+#include "../../../symbian_version.hrh"
 
 
 TARGET            PerfMon.exe
@@ -63,7 +64,11 @@
 USERINCLUDE       ../../../engine/inc
 SOURCEPATH        ../../../engine/src
 SOURCE            perfmon_engine.cpp
+#if ( SYMBIAN_VERSION_SUPPORT >= SYMBIAN_3 )
 SOURCE            perfmon_powerlistener.cpp
+#else
+SOURCE            perfmon_powerlistener_stub.cpp
+#endif
 
 LIBRARY           euser.lib
 LIBRARY           commonengine.lib
--- a/perfapps/perfmon/ui/hb/app/app.pro	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/perfmon/ui/hb/app/app.pro	Fri Sep 17 14:22:55 2010 +0300
@@ -30,7 +30,7 @@
     inc/valuedatacontainer.h \
     inc/graphdatacontainer.h \
     inc/settingsview.h \
-#    inc/datapopup.h \
+    inc/datapopup.h \
     inc/enginewrapper.h
 
 SOURCES += src/main.cpp \
@@ -40,7 +40,7 @@
     src/valuedatacontainer.cpp \
     src/graphdatacontainer.cpp \
     src/settingsview.cpp \
-#    src/datapopup.cpp \
+    src/datapopup.cpp \
     src/enginewrapper.cpp
 
 RESOURCES +=
--- a/perfapps/perfmon/ui/hb/app/src/main.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/perfmon/ui/hb/app/src/main.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -35,8 +35,7 @@
 
     MainWindow window(engine);
 	window.show();
-// TODO: functionality broken
-	/*
+
     DataPopup dataPopup(engine);
 
     QObject::connect(&app, SIGNAL(foregroundEvent(bool)),
@@ -44,6 +43,6 @@
 
     // TODO: pass false if run in background
     dataPopup.updateVisibility(true);
-*/
+
     return app.exec();
 }
--- a/perfapps/perfmon/ui/hb/app/src/mainview.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/perfmon/ui/hb/app/src/mainview.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -128,7 +128,7 @@
 void MainView::showAbout()
 {
     HbMessageBox *messageBox = new HbMessageBox(HbMessageBox::MessageTypeInformation);
-    messageBox->setText("Version 1.2.0 - 26th August 2010. Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. Licensed under Eclipse Public License v1.0.");
+    messageBox->setText("Version 1.2.1 - 10th September 2010. Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. Licensed under Eclipse Public License v1.0.");
     HbLabel *header = new HbLabel("About PerfMon", messageBox);
     messageBox->setHeadingWidget(header);
     messageBox->setAttribute(Qt::WA_DeleteOnClose);
--- a/perfapps/perfmon/ui/hb/datapopup/src/perfmondatapopupdialog.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/perfmon/ui/hb/datapopup/src/perfmondatapopupdialog.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -131,8 +131,8 @@
 
 void PerfMonDataPopupDialog::mousePressEvent(QGraphicsSceneMouseEvent *event)
 {
-    Q_UNUSED(event);
-
+    HbDialog::mousePressEvent(event);
+    
     QVariantMap data;
     data["mouseEvent"] = "press";
     emit deviceDialogData(data);
@@ -160,6 +160,7 @@
 void PerfMonDataPopupDialog::setLines(const QStringList &lines)
 {
     mWidget->setLines(lines);
+    setPreferredSize(mWidget->preferredWidth()+30,mWidget->preferredHeight()+30);
 }
 
 void PerfMonDataPopupDialog::reposition()
@@ -178,4 +179,5 @@
                 break;
         }
     }
+    resize(0,0);
 }
--- a/perfapps/perfmon/ui/hb/datapopup/src/perfmondatapopupplugin.cpp	Fri Sep 03 17:11:21 2010 +0300
+++ b/perfapps/perfmon/ui/hb/datapopup/src/perfmondatapopupplugin.cpp	Fri Sep 17 14:22:55 2010 +0300
@@ -95,6 +95,7 @@
 
     info->group = DeviceNotificationDialogGroup;
     //info->group = GenericDeviceDialogGroup;
+    //info->group = IndicatorGroup;
     info->flags = NoDeviceDialogFlags;
     info->priority = DefaultPriority;