Catchup to latest Symbian^4 GCC_SURGE
authorWilliam Roberts <williamr@symbian.org>
Thu, 22 Jul 2010 16:35:01 +0100
branchGCC_SURGE
changeset 56 afe7195bb6c3
parent 41 0410b3201a77 (current diff)
parent 54 100b6c869078 (diff)
Catchup to latest Symbian^4
appinstall_plat/sifui_api/tsrc/conf/sifuitestscripter.cfg
appinstall_plat/sifui_api/tsrc/inc/sifuidummydetailsprovider.h
appinstall_plat/sifui_api/tsrc/init/sifuitestscripter.ini
appinstall_plat/sifui_api/tsrc/src/sifuidummydetailsprovider.cpp
iaupdate/IAD/bgcindicatorplugin/resources/message.svg
iaupdate/IAD/ui/inc/iaupdatefirsttimedatefile.h
iaupdate/IAD/ui/inc/iaupdatehistoryview.h
iaupdate/IAD/ui/src/iaupdatefirsttimedatefile.cpp
iaupdate/IAD/ui/src/iaupdatehistoryview.cpp
package_definition_v2.xml
secureswitools/openssllib/import/bin/deb/distribution.policy
secureswitools/openssllib/import/bin/linux-x86/deb/distribution.policy
secureswitools/openssllib/import/bin/linux-x86/rel/distribution.policy
secureswitools/openssllib/import/bin/rel/distribution.policy
--- a/appinstall.pro	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstall.pro	Thu Jul 22 16:35:01 2010 +0100
@@ -17,5 +17,6 @@
 TEMPLATE = subdirs
 
 SUBDIRS += appinstaller/appinstaller.pro \
-           iaupdate/iaupdate.pro
+           iaupdate/iaupdate.pro \
+           ncdengine/ncdengine.pro
 
--- a/appinstall_info/appinstall_metadata/appinstall_metadata.mrp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstall_info/appinstall_metadata/appinstall_metadata.mrp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,19 +1,3 @@
-#
-# 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: 
-#
-
 component           appinstall_metadata
 source   \sf\mw\appinstall\appinstall_info\appinstall_metadata 
 source   \sf\mw\appinstall\package_definition.xml
--- a/appinstall_plat/sifui_api/bwins/sifuiu.def	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstall_plat/sifui_api/bwins/sifuiu.def	Thu Jul 22 16:35:01 2010 +0100
@@ -1,15 +1,26 @@
 EXPORTS
-	?ShowCompleteL@CSifUi@@QAEXXZ @ 1 NONAME ; void CSifUi::ShowCompleteL(void)
-	?ShowConfirmationL@CSifUi@@QAEHABVCAppInfo@Swi@@HPBVCApaMaskedBitmap@@@Z @ 2 NONAME ; int CSifUi::ShowConfirmationL(class Swi::CAppInfo const &, int, class CApaMaskedBitmap const *)
-	?SetMemorySelectionL@CSifUi@@QAEXABV?$RArray@H@@@Z @ 3 NONAME ; void CSifUi::SetMemorySelectionL(class RArray<int> const &)
-	?SetCertificateInfoL@CSifUi@@QAEXABV?$RPointerArray@VCCertificateInfo@Swi@@@@@Z @ 4 NONAME ; void CSifUi::SetCertificateInfoL(class RPointerArray<class Swi::CCertificateInfo> const &)
-	?Mode@CSifUi@@QAE?AW4TMode@1@XZ @ 5 NONAME ; enum CSifUi::TMode CSifUi::Mode(void)
-	?IncreaseProgressBarValueL@CSifUi@@QAEXH@Z @ 6 NONAME ; void CSifUi::IncreaseProgressBarValueL(int)
-	?ShowFailedL@CSifUi@@QAEXH@Z @ 7 NONAME ; void CSifUi::ShowFailedL(int)
-	?SetMode@CSifUi@@QAEXW4TMode@1@@Z @ 8 NONAME ; void CSifUi::SetMode(enum CSifUi::TMode)
-	?ShowFailedL@CSifUi@@QAEXHABVTDesC16@@0@Z @ 9 NONAME ; void CSifUi::ShowFailedL(int, class TDesC16 const &, class TDesC16 const &)
-	?SelectedDrive@CSifUi@@QAEHAAH@Z @ 10 NONAME ; int CSifUi::SelectedDrive(int &)
-	?ShowProgressL@CSifUi@@QAEXABVCAppInfo@Swi@@HH@Z @ 11 NONAME ; void CSifUi::ShowProgressL(class Swi::CAppInfo const &, int, int)
-	?NewL@CSifUi@@SAPAV1@XZ @ 12 NONAME ; class CSifUi * CSifUi::NewL(void)
-	?NewLC@CSifUi@@SAPAV1@XZ @ 13 NONAME ; class CSifUi * CSifUi::NewLC(void)
+	?NewL@CSifUiAppInfo@@SAPAV1@ABVTDesC16@@0ABVTVersion@@HPBVCApaMaskedBitmap@@@Z @ 1 NONAME ; class CSifUiAppInfo * CSifUiAppInfo::NewL(class TDesC16 const &, class TDesC16 const &, class TVersion const &, int, class CApaMaskedBitmap const *)
+	?NewL@CSifUiCertificateInfo@@SAPAV1@AAVCCertificateInfo@Swi@@@Z @ 2 NONAME ; class CSifUiCertificateInfo * CSifUiCertificateInfo::NewL(class Swi::CCertificateInfo &)
+	?ShowConfirmationL@CSifUi@@QAEHABVCSifUiAppInfo@@@Z @ 3 NONAME ; int CSifUi::ShowConfirmationL(class CSifUiAppInfo const &)
+	?ShowCompleteL@CSifUi@@QAEXXZ @ 4 NONAME ; void CSifUi::ShowCompleteL(void)
+	?ExternalizeL@CSifUiAppInfo@@QBEXAAVRWriteStream@@@Z @ 5 NONAME ; void CSifUiAppInfo::ExternalizeL(class RWriteStream &) const
+	?ShowProgressL@CSifUi@@QAEXABVCSifUiAppInfo@@H@Z @ 6 NONAME ; void CSifUi::ShowProgressL(class CSifUiAppInfo const &, int)
+	?NewLC@CSifUiCertificateInfo@@SAPAV1@AAVCCertificateInfo@Swi@@@Z @ 7 NONAME ; class CSifUiCertificateInfo * CSifUiCertificateInfo::NewLC(class Swi::CCertificateInfo &)
+	?Bitmaps@CSifUiAppInfo@@QBEPBVCApaMaskedBitmap@@XZ @ 8 NONAME ; class CApaMaskedBitmap const * CSifUiAppInfo::Bitmaps(void) const
+	?IncreaseProgressBarValueL@CSifUi@@QAEXH@Z @ 9 NONAME ; void CSifUi::IncreaseProgressBarValueL(int)
+	?ShowFailedL@CSifUi@@QAEXHABVTDesC16@@0@Z @ 10 NONAME ; void CSifUi::ShowFailedL(int, class TDesC16 const &, class TDesC16 const &)
+	?ExternalizeL@CSifUiCertificateInfo@@QBEXAAVRWriteStream@@@Z @ 11 NONAME ; void CSifUiCertificateInfo::ExternalizeL(class RWriteStream &) const
+	?IsCancelled@CSifUi@@QAEHXZ @ 12 NONAME ; int CSifUi::IsCancelled(void)
+	?Name@CSifUiAppInfo@@QBEABVTDesC16@@XZ @ 13 NONAME ; class TDesC16 const & CSifUiAppInfo::Name(void) const
+	?NewL@CSifUi@@SAPAV1@XZ @ 14 NONAME ; class CSifUi * CSifUi::NewL(void)
+	?NewL@CSifUiAppInfo@@SAPAV1@ABV1@@Z @ 15 NONAME ; class CSifUiAppInfo * CSifUiAppInfo::NewL(class CSifUiAppInfo const &)
+	?Version@CSifUiAppInfo@@QBEABVTVersion@@XZ @ 16 NONAME ; class TVersion const & CSifUiAppInfo::Version(void) const
+	?SetCertificateInfoL@CSifUi@@QAEXABV?$RPointerArray@VCSifUiCertificateInfo@@@@@Z @ 17 NONAME ; void CSifUi::SetCertificateInfoL(class RPointerArray<class CSifUiCertificateInfo> const &)
+	?Size@CSifUiAppInfo@@QBEHXZ @ 18 NONAME ; int CSifUiAppInfo::Size(void) const
+	?SetMemorySelectionL@CSifUi@@QAEXABV?$RArray@H@@@Z @ 19 NONAME ; void CSifUi::SetMemorySelectionL(class RArray<int> const &)
+	?NewLC@CSifUiAppInfo@@SAPAV1@ABVTDesC16@@0ABVTVersion@@HPBVCApaMaskedBitmap@@@Z @ 20 NONAME ; class CSifUiAppInfo * CSifUiAppInfo::NewLC(class TDesC16 const &, class TDesC16 const &, class TVersion const &, int, class CApaMaskedBitmap const *)
+	?Vendor@CSifUiAppInfo@@QBEABVTDesC16@@XZ @ 21 NONAME ; class TDesC16 const & CSifUiAppInfo::Vendor(void) const
+	?SetButtonVisible@CSifUi@@QAEXW4TOptionalButton@1@H@Z @ 22 NONAME ; void CSifUi::SetButtonVisible(enum CSifUi::TOptionalButton, int)
+	?SelectedDrive@CSifUi@@QAEHAAH@Z @ 23 NONAME ; int CSifUi::SelectedDrive(int &)
+	?NewLC@CSifUi@@SAPAV1@XZ @ 24 NONAME ; class CSifUi * CSifUi::NewLC(void)
 
--- a/appinstall_plat/sifui_api/eabi/sifuiu.def	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstall_plat/sifui_api/eabi/sifuiu.def	Thu Jul 22 16:35:01 2010 +0100
@@ -1,19 +1,34 @@
 EXPORTS
-	_ZN6CSifUi11ShowFailedLEi @ 1 NONAME
-	_ZN6CSifUi11ShowFailedLEiRK7TDesC16S2_ @ 2 NONAME
-	_ZN6CSifUi13SelectedDriveERi @ 3 NONAME
-	_ZN6CSifUi13ShowCompleteLEv @ 4 NONAME
-	_ZN6CSifUi13ShowProgressLERKN3Swi8CAppInfoEii @ 5 NONAME
-	_ZN6CSifUi17ShowConfirmationLERKN3Swi8CAppInfoEiPK16CApaMaskedBitmap @ 6 NONAME
-	_ZN6CSifUi19SetCertificateInfoLERK13RPointerArrayIN3Swi16CCertificateInfoEE @ 7 NONAME
-	_ZN6CSifUi19SetMemorySelectionLERK6RArrayIiE @ 8 NONAME
-	_ZN6CSifUi25IncreaseProgressBarValueLEi @ 9 NONAME
-	_ZN6CSifUi4ModeEv @ 10 NONAME
-	_ZN6CSifUi4NewLEv @ 11 NONAME
-	_ZN6CSifUi5NewLCEv @ 12 NONAME
-	_ZN6CSifUi7SetModeENS_5TModeE @ 13 NONAME
-	_ZTI13CSifUiPrivate @ 14 NONAME
-	_ZTI6CSifUi @ 15 NONAME
-	_ZTV13CSifUiPrivate @ 16 NONAME
-	_ZTV6CSifUi @ 17 NONAME
+	_ZN13CSifUiAppInfo4NewLERK7TDesC16S2_RK8TVersioniPK16CApaMaskedBitmap @ 1 NONAME
+	_ZN13CSifUiAppInfo4NewLERKS_ @ 2 NONAME
+	_ZN13CSifUiAppInfo5NewLCERK7TDesC16S2_RK8TVersioniPK16CApaMaskedBitmap @ 3 NONAME
+	_ZN21CSifUiCertificateInfo4NewLERN3Swi16CCertificateInfoE @ 4 NONAME
+	_ZN21CSifUiCertificateInfo5NewLCERN3Swi16CCertificateInfoE @ 5 NONAME
+	_ZN6CSifUi11IsCancelledEv @ 6 NONAME
+	_ZN6CSifUi11ShowFailedLEiRK7TDesC16S2_ @ 7 NONAME
+	_ZN6CSifUi13SelectedDriveERi @ 8 NONAME
+	_ZN6CSifUi13ShowCompleteLEv @ 9 NONAME
+	_ZN6CSifUi13ShowProgressLERK13CSifUiAppInfoi @ 10 NONAME
+	_ZN6CSifUi16SetButtonVisibleENS_15TOptionalButtonEi @ 11 NONAME
+	_ZN6CSifUi17ShowConfirmationLERK13CSifUiAppInfo @ 12 NONAME
+	_ZN6CSifUi19SetCertificateInfoLERK13RPointerArrayI21CSifUiCertificateInfoE @ 13 NONAME
+	_ZN6CSifUi19SetMemorySelectionLERK6RArrayIiE @ 14 NONAME
+	_ZN6CSifUi25IncreaseProgressBarValueLEi @ 15 NONAME
+	_ZN6CSifUi4NewLEv @ 16 NONAME
+	_ZN6CSifUi5NewLCEv @ 17 NONAME
+	_ZNK13CSifUiAppInfo12ExternalizeLER12RWriteStream @ 18 NONAME
+	_ZNK13CSifUiAppInfo4NameEv @ 19 NONAME
+	_ZNK13CSifUiAppInfo4SizeEv @ 20 NONAME
+	_ZNK13CSifUiAppInfo6VendorEv @ 21 NONAME
+	_ZNK13CSifUiAppInfo7BitmapsEv @ 22 NONAME
+	_ZNK13CSifUiAppInfo7VersionEv @ 23 NONAME
+	_ZNK21CSifUiCertificateInfo12ExternalizeLER12RWriteStream @ 24 NONAME
+	_ZTI13CSifUiAppInfo @ 25 NONAME
+	_ZTI13CSifUiPrivate @ 26 NONAME
+	_ZTI21CSifUiCertificateInfo @ 27 NONAME
+	_ZTI6CSifUi @ 28 NONAME
+	_ZTV13CSifUiAppInfo @ 29 NONAME
+	_ZTV13CSifUiPrivate @ 30 NONAME
+	_ZTV21CSifUiCertificateInfo @ 31 NONAME
+	_ZTV6CSifUi @ 32 NONAME
 
--- a/appinstall_plat/sifui_api/group/bld.inf	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstall_plat/sifui_api/group/bld.inf	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2010 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"
@@ -22,8 +22,10 @@
 DEFAULT
 
 PRJ_EXPORTS
-../inc/sifui.h          MW_LAYER_PLATFORM_EXPORT_PATH( sifui.h )
-../rom/sifui.iby        CORE_MW_LAYER_IBY_EXPORT_PATH( sifui.iby )
+../inc/sifui.h                  MW_LAYER_PLATFORM_EXPORT_PATH( sifui.h )
+../inc/sifuiappinfo.h           MW_LAYER_PLATFORM_EXPORT_PATH( sifuiappinfo.h )
+../inc/sifuicertificateinfo.h   MW_LAYER_PLATFORM_EXPORT_PATH( sifuicertificateinfo.h )
+../rom/sifui.iby                CORE_MW_LAYER_IBY_EXPORT_PATH( sifui.iby )
 
 PRJ_MMPFILES
 sifui.mmp
--- a/appinstall_plat/sifui_api/group/sifui.mmp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstall_plat/sifui_api/group/sifui.mmp	Thu Jul 22 16:35:01 2010 +0100
@@ -30,14 +30,20 @@
 SOURCEPATH      ../src
 SOURCE          sifui.cpp
 SOURCE          sifuiprivate.cpp
+SOURCE          sifuicertificateinfo.cpp
+SOURCE          sifuiappinfo.cpp
 
 USERINCLUDE     ../inc
 MW_LAYER_SYSTEMINCLUDE
 
 LIBRARY         euser.lib       // User
 LIBRARY         HbCore.lib      // CHbDeviceDialog
+LIBRARY         HbWidgets.lib   // CHbDeviceNotificationDialogSymbian 
 LIBRARY         apgrfx.lib      // CApaMaskedBitmap
 LIBRARY         fbscli.lib      // CFbsBitmap
 LIBRARY         bafl.lib        // CDesC16ArrayFlat
 LIBRARY         efsrv.lib       // RFs
+LIBRARY         estor.lib       // RBufWriteStream
 
+SMPSAFE
+
--- a/appinstall_plat/sifui_api/inc/sifui.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstall_plat/sifui_api/inc/sifui.h	Thu Jul 22 16:35:01 2010 +0100
@@ -29,6 +29,9 @@
 
 class CSifUiPrivate;
 class CApaMaskedBitmap;
+class CSifUiCertificateInfo;
+class CSifUiAppInfo;
+
 namespace Swi {
     class CAppInfo;
     class CCertificateInfo;
@@ -61,7 +64,7 @@
         /**
          * Destructor.
          */
-        CSifUi::~CSifUi();
+        ~CSifUi();
 
     public:     // new functions
         /**
@@ -72,13 +75,10 @@
          * If the installation confirmation query should contain memory selection option,
          * then set the selectable drives with SetMemorySelectionL() first. User selected
          * drive can be retrieved with SelectedDrive().
-         * @param aAppInfo - application information (name, version, and vendor)
-         * @param aAppSize - application size in bytes, not displayed if zero
-         * @param aAppIcon - application icon, default icon is displayed if NULL
+         * @param aAppInfo - application information (name, size, version, vendor, icon)
          * @return TBools - ETrue if user accepted the query, EFalse otherwise
          */
-        IMPORT_C TBool ShowConfirmationL( const Swi::CAppInfo& aAppInfo,
-                TInt aAppSize = 0, const CApaMaskedBitmap* aAppIcon = NULL );
+        IMPORT_C TBool ShowConfirmationL( const CSifUiAppInfo& aAppInfo );
 
         /**
          * Defines memory selection alternatives for the main installation
@@ -101,7 +101,7 @@
          * @param aCertificates - certificate details
          */
         IMPORT_C void SetCertificateInfoL(
-                const RPointerArray<Swi::CCertificateInfo>& aCertificates );
+                const RPointerArray<CSifUiCertificateInfo>& aCertificates );
 
         /**
          * Displays main installation progress note. If the progress note or main
@@ -110,23 +110,49 @@
          * Dialog remains on the screen after progress bar shows full 100% value.
          * Use ShowFailedL() or ShowCompleteL() to replace the dialog content
          * with the final error or complete note.
-         * @param aAppInfo - application information (name, version, and vendor)
-         * @param aAppSize - application size in bytes (not displayed if zero)
+         * @param aAppInfo - application information (name, size, version, vendor, icon)
          * @param aProgressBarFinalValue - final value of the progress bar
          */
-        IMPORT_C void ShowProgressL( const Swi::CAppInfo& aAppInfo,
-                TInt aAppSize, TInt aProgressBarFinalValue );
+        IMPORT_C void ShowProgressL( const CSifUiAppInfo& aAppInfo, TInt aProgressBarFinalValue );
 
         /**
          * Updates the progress bar value displayed in progress note. Initially progress bar
          * shows 0%. Each aIncrement increases the value displayed in progress bar. When all
          * increments reach the final value defined in ShowProgressNoteL() method, then the
-         * progress bar shows full 100%.
+         * progress bar shows full 100%. Caller should check using IsCancelled() method if
+         * the user has cancelled the progress note before updating the progress bar value.
          * @param aIncrement - progress bar value increment
          */
         IMPORT_C void IncreaseProgressBarValueL( TInt aIncrement );
 
         /**
+         * Returns ETrue if the user has cancelled the progress dialog.
+         * @return TBool - ETrue if the progress dialog has been cancelled
+         */
+        IMPORT_C TBool IsCancelled();
+
+        /**
+         * Toolbar buttons in progress and complete notes that can be disabled/hidden.
+         */
+        enum TOptionalButton
+            {
+            EHideProgressButton,
+            ECancelProgressButton,
+            EShowInAppLibButton,
+            EErrorDetailsButton
+            };
+
+        /**
+         * Hides or shows optional toolbar buttons from installation progress note
+         * or installation complete note. All optional buttos are visible by default.
+         * Buttons visibility becomes effective in the next ShowProgressL(),
+         * ShowCompleteL(), or IncreseProgressBarValueL() method calls.
+         * @param aButton - button which visibility is changed
+         * @param aIsVisible - EFalse if button needs to be hidden
+         */
+        IMPORT_C void SetButtonVisible( TOptionalButton aButton, TBool aIsVisible );
+
+        /**
          * Displays main installation complete note. Installation complete note contains
          * button to launch the application libaray to show the recently installed apps.
          */
@@ -142,18 +168,6 @@
         IMPORT_C void ShowFailedL( TInt aErrorCode, const TDesC& aErrorMessage,
             const TDesC& aErrorDetails = KNullDesC );
 
-
-
-        /** DEPRECATED -- DO NOT USE -- WILL BE REMOVED */
-        enum TMode {
-            EUnspecified = 0,
-            EInstalling = 1,
-            EUninstalling = 2
-        };
-        IMPORT_C void SetMode( TMode aMode );
-        IMPORT_C TMode Mode();
-        IMPORT_C void ShowFailedL( TInt aErrorCode );
-
     private:    // new functions
         CSifUi();
         void ConstructL();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/inc/sifuiappinfo.h	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,131 @@
+/*
+* Copyright (c) 2010 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:  CSifUiAppInfo for application details
+*
+*/
+
+#ifndef C_SIFUIAPPINFO_H
+#define C_SIFUIAPPINFO_H
+
+#include <e32base.h>                            // CBase
+
+class RWriteStream;
+class CApaMaskedBitmap;
+
+
+/**
+ * CSifUiAppInfo transfers application details from a SIF plugin
+ * to UI process in device dialog server. See also Swi::CAppInfo.
+ *
+ * @lib sifui.lib
+ * @since 10.1
+ */
+class CSifUiAppInfo : public CBase
+    {
+    public:     // constructors and destructor
+        /**
+         * Creates new CSifUiAppInfo object and pushes it to cleanup stack.
+         * Does not take the ownership of aAppIcon parameter.
+         * @param aAppName - application name
+         * @param aAppVendor - vendor name
+         * @param aAppVersion - application version
+         * @param aAppSize - application size in bytes
+         * @param aAppIcon - application icon (or NULL if no icon)
+         * @returns CSifUiAppInfo* -- new CSifUiAppInfo object
+         */
+        IMPORT_C static CSifUiAppInfo* NewLC( const TDesC& aAppName,
+                const TDesC& aAppVendor, const TVersion& aAppVersion, TInt aAppSize,
+                const CApaMaskedBitmap* aAppIcon );
+
+        /**
+         * Creates new CSifUiAppInfo object.
+         * Does not take the ownership of aAppIcon parameter.
+         * @param aAppName - application name
+         * @param aAppVendor - vendor name
+         * @param aAppVersion - application version
+         * @param aAppSize - application size in bytes
+         * @param aAppIcon - application icon (or NULL if no icon)
+         * @returns CSifUiAppInfo* -- new CSifUiAppInfo object
+         */
+        IMPORT_C static CSifUiAppInfo* NewL( const TDesC& aAppName,
+                const TDesC& aAppVendor, const TVersion& aAppVersion, TInt aAppSize,
+                const CApaMaskedBitmap* aAppIcon );
+
+        /**
+         * Creates new CSifUiAppInfo object by copying existing object.
+         * @param aAppInfo - application info to copy
+         * @returns CSifUiAppInfo* -- new CSifUiAppInfo object
+         */
+        IMPORT_C static CSifUiAppInfo* NewL( const CSifUiAppInfo& aAppInfo );
+
+        /**
+         * Destructor.
+         */
+        ~CSifUiAppInfo();
+
+    public:     // new functions
+
+        /**
+         * Application name.
+         * @returns TDesC - application name
+         */
+        IMPORT_C const TDesC& Name() const;
+
+        /**
+         * Application vendor.
+         * @returns TDesC - vendor name
+         */
+        IMPORT_C const TDesC& Vendor() const;
+
+        /**
+         * Application version.
+         * @returns TVersion - application version
+         */
+        IMPORT_C const TVersion& Version() const;
+
+        /**
+         * Application size.
+         * @returns TInt - application size
+         */
+        IMPORT_C TInt Size() const;
+
+        /**
+         * Application icon and mask bitmaps. Does not transfer ownership.
+         * @returns CApaMaskedBitmap - icon and mask bitmaps, NULL if no bitmaps
+         */
+        IMPORT_C const CApaMaskedBitmap* Bitmaps() const;
+
+        /**
+         * Externalizes this object to the specified write stream.
+         * @param aStream   Stream to which the contents is written.
+         */
+        IMPORT_C void ExternalizeL( RWriteStream& aStream ) const;
+
+    private:    // new functions
+        CSifUiAppInfo();
+        void ConstructL( const TDesC& aAppName, const TDesC& aAppVendor,
+                const TVersion& aAppVersion, TInt aAppSize,
+                const CApaMaskedBitmap* aAppIcon );
+        void ConstructL( const CSifUiAppInfo& aAppInfo );
+
+    private:    // data
+        HBufC* iAppName;
+        HBufC* iAppVendor;
+        TVersion iAppVersion;
+        TInt iAppSize;
+        CApaMaskedBitmap* iAppIcon;
+    };
+
+#endif  // C_SIFUIAPPINFO_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/inc/sifuicertificateinfo.h	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2010 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:  CSifUiCertificateInfo for certificate details
+*
+*/
+
+#ifndef C_SIFUICERTIFICATEINFO_H
+#define C_SIFUICERTIFICATEINFO_H
+
+#include <e32base.h>                            // CBase
+
+namespace Swi {
+    class CCertificateInfo;
+}
+class RWriteStream;
+
+
+/**
+ * CSifUiCertificateInfo transfers certificate details from a SIF plugin
+ * to UI process in device dialog server. See also Swi::CCertificateInfo.
+ *
+ * @lib sifui.lib
+ * @since 10.1
+ */
+class CSifUiCertificateInfo : public CBase
+    {
+    public:     // constructors and destructor
+        /**
+         * Creates new CSifUiCertificateInfo object and pushes it to cleanup stack.
+         * @returns CSifUiCertificateInfo* -- new CSifUiCertificateInfo object
+         */
+        IMPORT_C static CSifUiCertificateInfo* NewLC( Swi::CCertificateInfo& aCertInfo );
+
+        /**
+         * Creates new CSifUiCertificateInfo object.
+         * @returns CSifUiCertificateInfo* -- new CSifUiCertificateInfo object
+         */
+        IMPORT_C static CSifUiCertificateInfo* NewL( Swi::CCertificateInfo& aCertInfo );
+
+        /**
+         * Destructor.
+         */
+        ~CSifUiCertificateInfo();
+
+    public:     // new functions
+        /**
+         * Externalizes this object to the specified write stream.
+         * @param aStream   Stream to which the contents is written.
+         */
+        IMPORT_C void ExternalizeL( RWriteStream& aStream ) const;
+
+    private:    // new functions
+        CSifUiCertificateInfo();
+        void ConstructL( Swi::CCertificateInfo& aCertInfo );
+        const TDesC& SubjectName() const;
+        const TDesC& IssuerName() const;
+        const TDesC8& Fingerprint() const;
+        const TDesC8& SerialNumber() const;
+
+    private:    // data
+        HBufC* iSubjectName;
+        HBufC* iIssuerName;
+        HBufC8* iFingerprint;
+        HBufC8* iSerialNumber;
+        TDateTime iValidFrom;
+        TDateTime iValidTo;
+    };
+
+#endif  // C_SIFUICERTIFICATEINFO_H
+
--- a/appinstall_plat/sifui_api/inc/sifuidefs.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstall_plat/sifui_api/inc/sifuidefs.h	Thu Jul 22 16:35:01 2010 +0100
@@ -20,11 +20,11 @@
 
 // SifUi plugin literal and variant map key names defined as _LIT macros.
 // Note that _LIT macros defined in this file must match to the definitions
-// in sifuidevicedialogdefinitions.h file. This header is used in Symbian
-// code since Symbian code requires 16-bit descriptors, and definitions in
-// Qt side (in sifuidevicedialogdefinitions.h) are 8-bit wide.
+// in sifuidevicedialogdefinitions.h and sifuiinstallindicatorparams.h files.
+// Symbian code needs descriptor constants, as Qt code uses QString constants.
 
 _LIT( KSifUiDeviceDialog, "com.nokia.sifui/1.0" );
+_LIT( KSifUiInstallIndicatorType, "com.nokia.sifui.indi/1.0" );
 
 enum TSifUiDeviceDialogType
     {
@@ -34,11 +34,18 @@
     ESifUiErrorNote = 4
     };
 
+enum TSifUiDeviceDialogReturnValue
+    {
+    ESifUiContinue = 0,
+    ESifUiCancel = 1,
+    ESifUiIndicator = 3
+    };
+
 // Variant map keys for dialog type and title (common to all dialog types)
 _LIT( KSifUiDialogType, "type" );                   // enum TSifUiDeviceDialogType
 
 // Variant map keys for device dialog return values
-_LIT( KSifUiQueryAccepted, "accept" );              // boolean
+_LIT( KSifUiQueryReturnValue, "ret" );              // enum TSifUiDeviceDialogReturnValue
 _LIT( KSifUiSelectedMemory, "drv" );                // drive letter
 
 // Variant map keys for "confirmation query" dialog parameters
@@ -49,13 +56,19 @@
 _LIT( KSifUiApplicationSize, "size" );              // integer
 _LIT( KSifUiApplicationDetails, "details" );        // descriptor array
 _LIT( KSifUiMemorySelection, "mem" );               // descriptor (comma separated drive letters)
-_LIT( KSifUiCertificates, "cert" );                 // boolean ???
+_LIT( KSifUiCertificates, "cert" );                 // binary
 
 // Variant map keys for "progress note" dialog parameters
 _LIT( KSifUiProgressNoteText, "txt" );              // string
 _LIT( KSifUiProgressNoteFinalValue, "fin" );        // integer
 _LIT( KSifUiProgressNoteValue, "val" );             // integer
 
+// Variant map keys for "progress note" and "installation complete note" buttons
+_LIT( KSifUiProgressNoteIsHideButtonHidden, "hidebtn" );        // boolean
+_LIT( KSifUiProgressNoteIsCancelButtonHidden, "cancelbtn" );    // boolean
+_LIT( KSifUiCompleteNoteIsShowButtonHidden, "showbtn" );        // boolean
+_LIT( KSifUiErrorNoteIsDetailsButtonHidden, "errdtlbtn" );      // boolean
+
 // Variant map keys for "error" dialog parameters
 _LIT( KSifUiErrorCode, "err" );                     // integer
 _LIT( KSifUiErrorMessage, "msg" );                  // string
--- a/appinstall_plat/sifui_api/inc/sifuiprivate.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstall_plat/sifui_api/inc/sifuiprivate.h	Thu Jul 22 16:35:01 2010 +0100
@@ -20,12 +20,14 @@
 
 #include <e32base.h>                            // CActive
 #include <hb/hbcore/hbdevicedialogsymbian.h>    // MHbDeviceDialogObserver
+#include <hb/hbcore/hbindicatorsymbian.h>       // MHbIndicatorSymbianObserver
 #include <bamdesca.h>                           // MDesCArray
+#include <sifui.h>                              // CSifUi::TOptionalButtons
+#include <sifuidefs.h>                          // TSifUiDeviceDialogType
 
-class CHbDeviceDialog;
 class CHbSymbianVariantMap;
+class CHbSymbianVariant;
 class CActiveSchedulerWait;
-class CApaMaskedBitmap;
 
 namespace Swi {
     class CAppInfo;
@@ -36,21 +38,22 @@
  * Private part of the SIF UI API.
  * Only CSifUi class should use CSifUiPrivate class.
  */
-class CSifUiPrivate : public CActive, public MHbDeviceDialogObserver
+class CSifUiPrivate : public CActive, public MHbDeviceDialogObserver,
+        public MHbIndicatorSymbianObserver
     {
     public:     // constructor and destructor
         static CSifUiPrivate* NewL();
-        CSifUiPrivate::~CSifUiPrivate();
+        ~CSifUiPrivate();
 
     public:     // new functions
-        TBool ShowConfirmationL( const Swi::CAppInfo& aAppInfo, TInt aAppSize,
-        		const CApaMaskedBitmap* aAppIcon );
+        TBool ShowConfirmationL( const CSifUiAppInfo& aAppInfo );
         void SetMemorySelectionL( const RArray<TInt>& aDriveNumbers );
         TInt SelectedDrive( TInt& aDriveNumber );
-        void SetCertificateInfoL( const RPointerArray<Swi::CCertificateInfo>& aCertificates );
-        void ShowProgressL( const Swi::CAppInfo& aAppInfo, TInt aAppSize,
-                TInt aProgressBarFinalValue );
+        void SetCertificateInfoL( const RPointerArray<CSifUiCertificateInfo>& aCertificates );
+        void ShowProgressL( const CSifUiAppInfo& aAppInfo, TInt aProgressBarFinalValue );
         void IncreaseProgressBarValueL( TInt aIncrement );
+        TBool IsCancelled();
+        void SetButtonVisible( CSifUi::TOptionalButton aButton, TBool aIsVisible );
         void ShowCompleteL();
         void ShowFailedL( TInt aErrorCode, const TDesC& aErrorMessage,
                 const TDesC& aErrorDetails );
@@ -63,32 +66,55 @@
         void DataReceived( CHbSymbianVariantMap& aData );
         void DeviceDialogClosed( TInt aCompletionCode );
 
+    private:    // from MHbIndicatorSymbianObserver
+        void IndicatorUserActivated( const TDesC& aType, CHbSymbianVariantMap& aData );
+
     private:    // new functions
         CSifUiPrivate();
         void ConstructL();
-        void ClearParamsL();
+        void ClearParams();
+        CHbSymbianVariantMap* VariantMapL();
         void ChangeNoteTypeL( TInt aType );
         void AddParamL( const TDesC& aKey, TInt aValue );
         void AddParamL( const TDesC& aKey, const TDesC& aValue );
         void AddParamListL( const TDesC& aKey, const MDesCArray& aList );
-        void AddParamsAppInfoAndSizeL( const Swi::CAppInfo& aAppInfo, TInt aAppSize );
-        void AddParamsIconL( const CApaMaskedBitmap* aIcon );
-        void AddParamsCertificatesL( const RPointerArray<Swi::CCertificateInfo>& aCertificates );
+        void AddParamsAppInfoL( const CSifUiAppInfo& aAppInfo );
+        void AddParamsCertificatesL();
+        void AddParamsHiddenButtonsL();
+        void ResendAllInstallationDetailsL();
+        void ActivateInstallIndicatorL();
+        void UpdateInstallIndicatorProgressL();
+        void CloseInstallIndicator();
+        TBool IsIndicatorActive();
+        void ShowInstallIndicatorCompleteL( TInt aErrorCode );
+        void UpdateDialogAndWaitForResponseL();
+        void UpdateDialogOrIndicatorWithoutWaitingL();
+        void CompleteDialogOrIndicatorAndWaitForResponseL( TInt aErrorCode );
         void DisplayDeviceDialogL();
-        TInt WaitForResponse();
-        void ResponseReceived( TInt aCompletionCode );
+        void WaitForResponseL();
+        void WaitedResponseReceived( TInt aCompletionCode );
 
     private:    // data
         CHbDeviceDialogSymbian* iDeviceDialog;
+        CHbIndicatorSymbian* iIndicator;
         CHbSymbianVariantMap* iVariantMap;
         CActiveSchedulerWait* iWait;
         TBool iIsDisplayingDialog;
-        TInt iCompletionCode;
-        TInt iReturnValue;
-        CApaMaskedBitmap* iBitmap;
+        TBool iIsFirstTimeToDisplay;
+        TInt iWaitCompletionCode;
+        TInt iDialogReturnValue;
+        TSifUiDeviceDialogType iDialogType;
+        CSifUiAppInfo* iAppInfo;
+        CBufBase* iCertificateBuffer;
         HBufC* iSelectableDrives;
         TBool iSelectedDriveSet;
         TChar iSelectedDrive;
+        TInt iProgressBarFinalValue;
+        TInt iProgressBarCurrentValue;
+        TBool iNoHideProgressButton;
+        TBool iNoCancelProgressButton;
+        TBool iNoShowInAppLibButton;
+        TBool iNoErrorDetailsButton;
     };
 
 
--- a/appinstall_plat/sifui_api/src/sifui.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstall_plat/sifui_api/src/sifui.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description:  Implementation of RSifUiCli class.
+* Description:  Implementation of CSifUi class.
 *
 */
 
@@ -50,55 +50,54 @@
 //
 CSifUi::~CSifUi()
     {
-	delete iPrivate;
+    delete iPrivate;
     }
 
 // ---------------------------------------------------------------------------
 // CSifUi::ShowConfirmationL()
 // ---------------------------------------------------------------------------
 //
-EXPORT_C TBool CSifUi::ShowConfirmationL( const Swi::CAppInfo& aAppInfo,
-    TInt aAppSize, const CApaMaskedBitmap* aAppIcon )
-	{
-	return iPrivate->ShowConfirmationL( aAppInfo, aAppSize, aAppIcon );
-	}
+EXPORT_C TBool CSifUi::ShowConfirmationL( const CSifUiAppInfo& aAppInfo )
+    {
+    return iPrivate->ShowConfirmationL( aAppInfo );
+    }
 
 // ---------------------------------------------------------------------------
 // CSifUi::SetMemorySelectionL()
 // ---------------------------------------------------------------------------
 //
 EXPORT_C void CSifUi::SetMemorySelectionL( const RArray<TInt>& aDriveNumbers )
-	{
-	iPrivate->SetMemorySelectionL( aDriveNumbers );
-	}
+    {
+    iPrivate->SetMemorySelectionL( aDriveNumbers );
+    }
 
 // ---------------------------------------------------------------------------
 // CSifUi::SelectedDrive()
 // ---------------------------------------------------------------------------
 //
 EXPORT_C TInt CSifUi::SelectedDrive( TInt& aDriveNumber )
-	{
-	return iPrivate->SelectedDrive( aDriveNumber );
-	}
+    {
+    return iPrivate->SelectedDrive( aDriveNumber );
+    }
 
 // ---------------------------------------------------------------------------
 // CSifUi::SetCertificateInfoL()
 // ---------------------------------------------------------------------------
 //
 EXPORT_C void CSifUi::SetCertificateInfoL(
-        const RPointerArray<Swi::CCertificateInfo>& aCertificates )
-	{
-	iPrivate->SetCertificateInfoL( aCertificates );
-	}
+        const RPointerArray<CSifUiCertificateInfo>& aCertificates )
+    {
+    iPrivate->SetCertificateInfoL( aCertificates );
+    }
 
 // ---------------------------------------------------------------------------
 // CSifUi::ShowProgressL()
 // ---------------------------------------------------------------------------
 //
-EXPORT_C void CSifUi::ShowProgressL( const Swi::CAppInfo& aAppInfo,
-        TInt aAppSize, TInt aProgressBarFinalValue )
+EXPORT_C void CSifUi::ShowProgressL( const CSifUiAppInfo& aAppInfo,
+        TInt aProgressBarFinalValue )
     {
-	iPrivate->ShowProgressL( aAppInfo, aAppSize, aProgressBarFinalValue );
+    iPrivate->ShowProgressL( aAppInfo, aProgressBarFinalValue );
     }
 
 // ---------------------------------------------------------------------------
@@ -107,7 +106,25 @@
 //
 EXPORT_C void CSifUi::IncreaseProgressBarValueL( TInt aNewValue )
     {
-	iPrivate->IncreaseProgressBarValueL( aNewValue );
+    iPrivate->IncreaseProgressBarValueL( aNewValue );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::IsCancelled()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CSifUi::IsCancelled()
+    {
+    return iPrivate->IsCancelled();
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUi::SetButtonVisible()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CSifUi::SetButtonVisible( TOptionalButton aButton, TBool aIsVisible )
+    {
+    iPrivate->SetButtonVisible( aButton, aIsVisible );
     }
 
 // ---------------------------------------------------------------------------
@@ -116,7 +133,7 @@
 //
 EXPORT_C void CSifUi::ShowCompleteL()
     {
-	iPrivate->ShowCompleteL();
+    iPrivate->ShowCompleteL();
     }
 
 // ---------------------------------------------------------------------------
@@ -126,7 +143,7 @@
 EXPORT_C void CSifUi::ShowFailedL( TInt aErrorCode, const TDesC& aErrorMessage,
         const TDesC& aErrorDetails )
     {
-	iPrivate->ShowFailedL( aErrorCode, aErrorMessage, aErrorDetails );
+    iPrivate->ShowFailedL( aErrorCode, aErrorMessage, aErrorDetails );
     }
 
 // ---------------------------------------------------------------------------
@@ -143,29 +160,8 @@
 //
 void CSifUi::ConstructL()
     {
-	iPrivate = CSifUiPrivate::NewL();
+    iPrivate = CSifUiPrivate::NewL();
     }
 
 
 
-
-// DEPRECATED FUNCTIONS -- TO BE REMOVED
-
-EXPORT_C void CSifUi::SetMode( TMode /*aMode*/ )
-    {
-    User::Invariant();
-    }
-
-EXPORT_C CSifUi::TMode CSifUi::Mode()
-    {
-    User::Invariant();
-    return EUnspecified;
-    }
-
-EXPORT_C void CSifUi::ShowFailedL( TInt /*aErrorCode*/ )
-    {
-    User::Invariant();
-    }
-
-
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/src/sifuiappinfo.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,201 @@
+/*
+* Copyright (c) 2010 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:  CSifUiAppInfo for application details
+*
+*/
+
+#include "sifuiappinfo.h"           // CSifUiAppInfo
+#include <s32strm.h>                // RWriteStream
+#include <apgicnfl.h>               // CApaMaskedBitmap
+
+
+// in sifuicertificateinfo.cpp:
+void WriteBufToStreamL( RWriteStream& aStream, const TDesC& aBuffer );
+
+
+// ======== LOCAL FUNCTIONS ========
+
+void WriteVersionToStreamL( RWriteStream& aStream, const TVersion& aVersion )
+    {
+    TPckg<TVersion> buffer( aVersion );
+    aStream.WriteL( buffer );
+    }
+
+void WriteBitmapsToStreamL( RWriteStream& /*aStream*/, const CApaMaskedBitmap* /*aIcon*/ )
+    {
+    // TODO: implement
+    }
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CSifUiAppInfo::NewLC()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CSifUiAppInfo* CSifUiAppInfo::NewLC( const TDesC& aAppName,
+        const TDesC& aAppVendor, const TVersion& aAppVersion, TInt aAppSize,
+        const CApaMaskedBitmap* aAppIcon )
+    {
+    CSifUiAppInfo* self = new ( ELeave ) CSifUiAppInfo;
+    CleanupStack::PushL( self );
+    self->ConstructL( aAppName, aAppVendor, aAppVersion, aAppSize, aAppIcon );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiAppInfo::NewL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CSifUiAppInfo* CSifUiAppInfo::NewL( const TDesC& aAppName,
+        const TDesC& aAppVendor, const TVersion& aAppVersion, TInt aAppSize,
+        const CApaMaskedBitmap* aAppIcon )
+    {
+    CSifUiAppInfo* self = CSifUiAppInfo::NewLC( aAppName, aAppVendor,
+            aAppVersion, aAppSize, aAppIcon );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiAppInfo::NewL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CSifUiAppInfo* CSifUiAppInfo::NewL( const CSifUiAppInfo& aAppInfo )
+    {
+    CSifUiAppInfo* self = new ( ELeave ) CSifUiAppInfo;
+    CleanupStack::PushL( self );
+    self->ConstructL( aAppInfo );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiAppInfo::~CSifUiAppInfo()
+// ---------------------------------------------------------------------------
+//
+CSifUiAppInfo::~CSifUiAppInfo()
+    {
+    delete iAppName;
+    delete iAppVendor;
+    delete iAppIcon;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiAppInfo::Name()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CSifUiAppInfo::Name() const
+    {
+    if( iAppName )
+        {
+        return *iAppName;
+        }
+    return KNullDesC;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiAppInfo::Vendor()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CSifUiAppInfo::Vendor() const
+    {
+    if( iAppVendor )
+        {
+        return *iAppVendor;
+        }
+    return KNullDesC;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiAppInfo::Version()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TVersion& CSifUiAppInfo::Version() const
+    {
+    return iAppVersion;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiAppInfo::Size()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CSifUiAppInfo::Size() const
+    {
+    return iAppSize;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiAppInfo::Bitmaps()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const CApaMaskedBitmap* CSifUiAppInfo::Bitmaps() const
+    {
+    return iAppIcon;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiAppInfo::ExternalizeL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CSifUiAppInfo::ExternalizeL( RWriteStream& aStream ) const
+    {
+    WriteBufToStreamL( aStream, *iAppName );
+    WriteBufToStreamL( aStream, *iAppVendor );
+    WriteVersionToStreamL( aStream, iAppVersion );
+    aStream.WriteInt32L( iAppSize );
+    WriteBitmapsToStreamL( aStream, iAppIcon );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiAppInfo::CSifUiAppInfo()
+// ---------------------------------------------------------------------------
+//
+CSifUiAppInfo::CSifUiAppInfo()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiAppInfo::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiAppInfo::ConstructL( const TDesC& aAppName, const TDesC& aAppVendor,
+        const TVersion& aAppVersion, TInt aAppSize, const CApaMaskedBitmap* aAppIcon )
+    {
+    iAppName = aAppName.AllocL();
+    iAppVendor = aAppVendor.AllocL();
+    iAppVersion = aAppVersion;
+    iAppSize = aAppSize;
+    if( aAppIcon )
+        {
+        iAppIcon = CApaMaskedBitmap::NewL( aAppIcon );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiAppInfo::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiAppInfo::ConstructL( const CSifUiAppInfo& aAppInfo )
+    {
+    iAppName = aAppInfo.Name().AllocL();
+    iAppVendor = aAppInfo.Vendor().AllocL();
+    iAppVersion = aAppInfo.iAppVersion;
+    iAppSize = aAppInfo.iAppSize;
+    if( aAppInfo.iAppIcon )
+        {
+        iAppIcon = CApaMaskedBitmap::NewL( aAppInfo.iAppIcon );
+        }
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/src/sifuicertificateinfo.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,170 @@
+/*
+* Copyright (c) 2010 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:  CSifUiCertificateInfo for certificate details.
+*
+*/
+
+#include "sifuicertificateinfo.h"               // CSifUiCertificateInfo
+#include <swi/msisuihandlers.h>                 // Swi::CCertificateInfo
+
+
+// ======== LOCAL FUNCTIONS ========
+
+void WriteBufToStreamL( RWriteStream& aStream, const TDesC& aBuffer )
+    {
+    aStream.WriteInt32L( aBuffer.Length() );
+    aStream.WriteL( aBuffer );
+    }
+
+void WriteBufToStreamL( RWriteStream& aStream, const TDesC8& aBuffer )
+    {
+    aStream.WriteInt32L( aBuffer.Length() );
+    aStream.WriteL( aBuffer );
+    }
+
+void WriteDateTimeToStreamL( RWriteStream& aStream, const TDateTime& aDateTime )
+    {
+    TPckg<TDateTime> buffer( aDateTime );
+    aStream.WriteL( buffer );
+    }
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CSifUiCertificateInfo::NewLC()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CSifUiCertificateInfo* CSifUiCertificateInfo::NewLC(
+        Swi::CCertificateInfo& aCertInfo )
+    {
+    CSifUiCertificateInfo* self = new( ELeave ) CSifUiCertificateInfo();
+    CleanupStack::PushL( self );
+    self->ConstructL( aCertInfo );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiCertificateInfo::NewL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CSifUiCertificateInfo* CSifUiCertificateInfo::NewL(
+        Swi::CCertificateInfo& aCertInfo )
+    {
+    CSifUiCertificateInfo* self = CSifUiCertificateInfo::NewLC( aCertInfo );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiCertificateInfo::~CSifUiCertificateInfo()
+// ---------------------------------------------------------------------------
+//
+CSifUiCertificateInfo::~CSifUiCertificateInfo()
+    {
+    delete iSubjectName;
+    delete iIssuerName;
+    delete iFingerprint;
+    delete iSerialNumber;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiCertificateInfo::ExternalizeL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CSifUiCertificateInfo::ExternalizeL( RWriteStream& aStream ) const
+    {
+    WriteBufToStreamL( aStream, SubjectName() );
+    WriteBufToStreamL( aStream, IssuerName() );
+    WriteBufToStreamL( aStream, Fingerprint() );
+    WriteBufToStreamL( aStream, SerialNumber() );
+    WriteDateTimeToStreamL( aStream, iValidFrom );
+    WriteDateTimeToStreamL( aStream, iValidTo );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiCertificateInfo::CSifUiCertificateInfo()
+// ---------------------------------------------------------------------------
+//
+CSifUiCertificateInfo::CSifUiCertificateInfo()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiCertificateInfo::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiCertificateInfo::ConstructL(
+        Swi::CCertificateInfo& aCertInfo )
+    {
+    iSubjectName = aCertInfo.SubjectName().AllocL();
+    iIssuerName = aCertInfo.IssuerName().AllocL();
+    iFingerprint = aCertInfo.Fingerprint().AllocL();
+    iSerialNumber = aCertInfo.SerialNumber().AllocL();
+    iValidFrom = aCertInfo.ValidFrom();
+    iValidTo = aCertInfo.ValidTo();
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiCertificateInfo::SubjectName()
+// ---------------------------------------------------------------------------
+//
+const TDesC& CSifUiCertificateInfo::SubjectName() const
+    {
+    if( iSubjectName )
+        {
+        return *iSubjectName;
+        }
+    return KNullDesC;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiCertificateInfo::IssuerName()
+// ---------------------------------------------------------------------------
+//
+const TDesC& CSifUiCertificateInfo::IssuerName() const
+    {
+    if( iIssuerName )
+        {
+        return *iIssuerName;
+        }
+    return KNullDesC;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiCertificateInfo::Fingerprint()
+// ---------------------------------------------------------------------------
+//
+const TDesC8& CSifUiCertificateInfo::Fingerprint() const
+    {
+    if( iFingerprint )
+        {
+        return *iFingerprint;
+        }
+    return KNullDesC8;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiCertificateInfo::SerialNumber()
+// ---------------------------------------------------------------------------
+//
+const TDesC8& CSifUiCertificateInfo::SerialNumber() const
+    {
+    if( iSerialNumber )
+        {
+        return *iSerialNumber;
+        }
+    return KNullDesC8;
+    }
+
--- a/appinstall_plat/sifui_api/src/sifuiprivate.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstall_plat/sifui_api/src/sifuiprivate.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -11,17 +11,27 @@
 *
 * Contributors:
 *
-* Description:  Implementation of RSifUiCli class.
+* Description:  Implementation of CSifUiPrivate class.
 *
 */
 
 #include "sifuiprivate.h"                       // CSifUiPrivate
-#include "sifuidefs.h"                          // SIF UI device dialog parameters
+#include "sifuicertificateinfo.h"               // CSifUiCertificateInfo
+#include "sifuiappinfo.h"                       // CSifUiAppInfo
 #include <hb/hbcore/hbsymbianvariant.h>         // CHbSymbianVariantMap
-#include <swi/msisuihandlers.h>                 // Swi::CAppInfo
+#include <hb/hbwidgets/hbdevicenotificationdialogsymbian.h> // CHbDeviceNotificationDialogSymbian
 #include <apgicnfl.h>                           // CApaMaskedBitmap
+#include <s32mem.h>                             // RDesReadStream
+#include <e32property.h>                        // RProperty
 
 const TInt KDriveLettersLen = 32;
+const TInt KCertificateBufferGranularity = 1024;
+const TInt KProgFull = 100;                     // 100%
+
+const TUid KInstallIndicatorCategory = { 0x20022FC5 };
+const TUint KInstallIndicatorStatus = 0x2002E690;
+
+_LIT( KSifUiDefaultApplicationIcon, "qtg_large_application" );
 
 
 // ======== MEMBER FUNCTIONS ========
@@ -49,104 +59,119 @@
     delete iWait;
     delete iDeviceDialog;
     delete iVariantMap;
-    delete iBitmap;
+    delete iIndicator;
+    delete iAppInfo;
     delete iSelectableDrives;
+    delete iCertificateBuffer;
     }
 
 // ---------------------------------------------------------------------------
 // CSifUiPrivate::ShowConfirmationL()
 // ---------------------------------------------------------------------------
 //
-TBool CSifUiPrivate::ShowConfirmationL( const Swi::CAppInfo& aAppInfo,
-    TInt aAppSize, const CApaMaskedBitmap* aAppIcon )
-	{
-	ChangeNoteTypeL( ESifUiConfirmationQuery );
+TBool CSifUiPrivate::ShowConfirmationL( const CSifUiAppInfo& aAppInfo )
+    {
+    ChangeNoteTypeL( ESifUiConfirmationQuery );
 
-	AddParamsAppInfoAndSizeL( aAppInfo, aAppSize );
-	if( aAppIcon )
-		{
-		AddParamsIconL( aAppIcon );
-		}
-	if( iSelectableDrives )
-		{
-		AddParamL( KSifUiMemorySelection, *iSelectableDrives );
-		}
+    AddParamsAppInfoL( aAppInfo );
+    if( iSelectableDrives )
+        {
+        AddParamL( KSifUiMemorySelection, *iSelectableDrives );
+        }
+    AddParamsCertificatesL();
 
-	DisplayDeviceDialogL();
-	User::LeaveIfError( WaitForResponse() );
-	return( iReturnValue == KErrNone );
-	}
+    UpdateDialogAndWaitForResponseL();
+    return( iDialogReturnValue == KErrNone );
+    }
 
 // ---------------------------------------------------------------------------
 // CSifUiPrivate::SetMemorySelectionL()
 // ---------------------------------------------------------------------------
 //
 void CSifUiPrivate::SetMemorySelectionL( const RArray<TInt>& aDriveNumbers )
-	{
-	if( iSelectableDrives )
-		{
-		delete iSelectableDrives;
-		iSelectableDrives = NULL;
-		}
+    {
+    if( iSelectableDrives )
+        {
+        delete iSelectableDrives;
+        iSelectableDrives = NULL;
+        }
 
-	TInt driveCount = aDriveNumbers.Count();
-	if( driveCount > 0 )
-		{
-		const TChar KComma = ',';
-		TBuf<KDriveLettersLen> driveList;
-		for( TInt index = 0; index < driveCount; ++index )
-			{
-			TChar driveLetter;
-			TInt err = RFs::DriveToChar( aDriveNumbers[ index ], driveLetter );
-			if( !err )
-				{
-				driveList.Append( driveLetter );
-				driveList.Append( KComma );
-				}
-			}
-		iSelectableDrives = driveList.AllocL();
-		}
-	}
+    TInt driveCount = aDriveNumbers.Count();
+    if( driveCount > 0 )
+        {
+        const TChar KComma = ',';
+        TBuf<KDriveLettersLen> driveList;
+        for( TInt index = 0; index < driveCount; ++index )
+            {
+            TChar driveLetter;
+            TInt err = RFs::DriveToChar( aDriveNumbers[ index ], driveLetter );
+            if( !err )
+                {
+                driveList.Append( driveLetter );
+                driveList.Append( KComma );
+                }
+            }
+        iSelectableDrives = driveList.AllocL();
+        }
+    }
 
 // ---------------------------------------------------------------------------
 // CSifUiPrivate::SelectedDrive()
 // ---------------------------------------------------------------------------
 //
 TInt CSifUiPrivate::SelectedDrive( TInt& aDriveNumber )
-	{
+    {
     if( iSelectedDriveSet )
         {
         return RFs::CharToDrive( iSelectedDrive, aDriveNumber );
         }
     return KErrNotFound;
-	}
+    }
 
 // ---------------------------------------------------------------------------
 // CSifUiPrivate::SetCertificateInfoL()
 // ---------------------------------------------------------------------------
 //
 void CSifUiPrivate::SetCertificateInfoL(
-        const RPointerArray<Swi::CCertificateInfo>& aCertificates )
-	{
-   if( aCertificates.Count() )
-		{
-		AddParamsCertificatesL( aCertificates );
-		}
-	}
+        const RPointerArray<CSifUiCertificateInfo>& aCertificates )
+    {
+    if( iCertificateBuffer )
+        {
+        delete iCertificateBuffer;
+        iCertificateBuffer = NULL;
+        }
+    if( aCertificates.Count() )
+        {
+        iCertificateBuffer = CBufFlat::NewL( KCertificateBufferGranularity );
+        RBufWriteStream writeStream( *iCertificateBuffer );
+        CleanupClosePushL( writeStream );
+
+        TInt32 count = aCertificates.Count();
+        writeStream.WriteInt32L( count );
+        for( TInt index = 0; index < count; ++index )
+           {
+           aCertificates[ index ]->ExternalizeL( writeStream );
+           }
+
+        CleanupStack::PopAndDestroy( &writeStream );
+        }
+    }
 
 // ---------------------------------------------------------------------------
 // CSifUiPrivate::ShowProgressL()
 // ---------------------------------------------------------------------------
 //
-void CSifUiPrivate::ShowProgressL( const Swi::CAppInfo& aAppInfo,
-        TInt aAppSize, TInt aProgressBarFinalValue )
+void CSifUiPrivate::ShowProgressL( const CSifUiAppInfo& aAppInfo,
+        TInt aProgressBarFinalValue )
     {
     ChangeNoteTypeL( ESifUiProgressNote );
 
-    AddParamsAppInfoAndSizeL( aAppInfo, aAppSize );
+    AddParamsAppInfoL( aAppInfo );
     AddParamL( KSifUiProgressNoteFinalValue, aProgressBarFinalValue );
+    iProgressBarFinalValue = aProgressBarFinalValue;
+    AddParamsHiddenButtonsL();
 
-    DisplayDeviceDialogL();
+    UpdateDialogOrIndicatorWithoutWaitingL();
     }
 
 // ---------------------------------------------------------------------------
@@ -158,8 +183,44 @@
     ChangeNoteTypeL( ESifUiProgressNote );
 
     AddParamL( KSifUiProgressNoteValue, aNewValue );
+    iProgressBarCurrentValue += aNewValue;
+    AddParamsHiddenButtonsL();
 
-    DisplayDeviceDialogL();
+    UpdateDialogOrIndicatorWithoutWaitingL();
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::IsCancelled()
+// ---------------------------------------------------------------------------
+//
+TBool CSifUiPrivate::IsCancelled()
+    {
+    return( iDialogReturnValue == KErrCancel );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::SetButtonVisible()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::SetButtonVisible( CSifUi::TOptionalButton aButton, TBool aIsVisible )
+    {
+    switch( aButton )
+        {
+        case CSifUi::EHideProgressButton:
+            iNoHideProgressButton = !aIsVisible;
+            break;
+        case CSifUi::ECancelProgressButton:
+            iNoCancelProgressButton = !aIsVisible;
+            break;
+        case CSifUi::EShowInAppLibButton:
+            iNoShowInAppLibButton = !aIsVisible;
+            break;
+        case CSifUi::EErrorDetailsButton:
+            iNoErrorDetailsButton = !aIsVisible;
+            break;
+        default:
+            break;
+        }
     }
 
 // ---------------------------------------------------------------------------
@@ -169,8 +230,10 @@
 void CSifUiPrivate::ShowCompleteL()
     {
     ChangeNoteTypeL( ESifUiCompleteNote );
-    DisplayDeviceDialogL();
-    User::LeaveIfError( WaitForResponse() );
+
+    AddParamsHiddenButtonsL();
+
+    CompleteDialogOrIndicatorAndWaitForResponseL( KErrNone );
     }
 
 // ---------------------------------------------------------------------------
@@ -189,8 +252,7 @@
         AddParamL( KSifUiErrorDetails, aErrorDetails );
         }
 
-    DisplayDeviceDialogL();
-    User::LeaveIfError( WaitForResponse() );
+    CompleteDialogOrIndicatorAndWaitForResponseL( aErrorCode );
     }
 
 // ---------------------------------------------------------------------------
@@ -201,7 +263,7 @@
     {
     if( iWait && iWait->IsStarted() && iWait->CanStopNow() )
         {
-        iCompletionCode = KErrCancel;
+        iWaitCompletionCode = KErrCancel;
         iWait->AsyncStop();
         }
     }
@@ -226,24 +288,41 @@
     {
     const CHbSymbianVariant* selectedDriveVariant = aData.Get( KSifUiSelectedMemory );
     if( selectedDriveVariant )
-    	{
-		iSelectedDrive = *( selectedDriveVariant->Value<TChar>() );
-		iSelectedDriveSet = ETrue;
-    	}
+        {
+        iSelectedDrive = *( selectedDriveVariant->Value<TChar>() );
+        iSelectedDriveSet = ETrue;
+        }
 
-    const CHbSymbianVariant* acceptedVariant = aData.Get( KSifUiQueryAccepted );
-    if( acceptedVariant )
+    const CHbSymbianVariant* variant = aData.Get( KSifUiQueryReturnValue );
+    if( variant )
         {
-        TBool* acceptedValue = acceptedVariant->Value<TBool>();
-        if( acceptedValue && *acceptedValue )
+        TInt* value = variant->Value<TInt>();
+        if( value )
             {
-            iReturnValue = KErrNone;
+            TSifUiDeviceDialogReturnValue returnValue =
+                    static_cast<TSifUiDeviceDialogReturnValue>( *value );
+            switch( returnValue )
+                {
+                case ESifUiContinue:
+                    iDialogReturnValue = KErrNone;
+                    WaitedResponseReceived( KErrNone );
+                    break;
+                case ESifUiCancel:
+                    iDialogReturnValue = KErrCancel;
+                    WaitedResponseReceived( KErrNone );
+                    break;
+                case ESifUiIndicator:
+                    ActivateInstallIndicatorL();
+                    break;
+                default:
+                    __ASSERT_DEBUG( EFalse, User::Invariant() );
+                    break;
+                }
             }
         else
             {
-            iReturnValue = KErrCancel;
+            __ASSERT_DEBUG( EFalse, User::Invariant() );
             }
-        ResponseReceived( KErrNone );
         }
     }
 
@@ -254,14 +333,29 @@
 void CSifUiPrivate::DeviceDialogClosed( TInt aCompletionCode )
     {
     iIsDisplayingDialog = EFalse;
-    ResponseReceived( aCompletionCode );
+    WaitedResponseReceived( aCompletionCode );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::IndicatorUserActivated()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::IndicatorUserActivated( const TDesC& aType,
+        CHbSymbianVariantMap& /*aData*/ )
+    {
+    if( aType == KSifUiInstallIndicatorType )
+        {
+        CloseInstallIndicator();
+        TRAP_IGNORE( DisplayDeviceDialogL() );
+        }
     }
 
 // ---------------------------------------------------------------------------
 // CSifUiPrivate::CSifUiPrivate()
 // ---------------------------------------------------------------------------
 //
-CSifUiPrivate::CSifUiPrivate() : CActive( CActive::EPriorityStandard )
+CSifUiPrivate::CSifUiPrivate() : CActive( CActive::EPriorityStandard ),
+        iIsFirstTimeToDisplay( ETrue )
     {
     CActiveScheduler::Add( this );
     }
@@ -273,21 +367,34 @@
 void CSifUiPrivate::ConstructL()
     {
     iWait = new( ELeave ) CActiveSchedulerWait;
-    // iDeviceDialog is allocated later, first call of DisplayDeviceDialogL()
+    // iDeviceDialog is created later, in the first call of DisplayDeviceDialogL()
+    // iIndicator is also created later, in the first call of ActivateInstallIndicator()
     }
 
 // ---------------------------------------------------------------------------
-// CSifUiPrivate::ClearParamsL()
+// CSifUiPrivate::ClearParams()
 // ---------------------------------------------------------------------------
 //
-void CSifUiPrivate::ClearParamsL()
+void CSifUiPrivate::ClearParams()
     {
     if( iVariantMap )
         {
         delete iVariantMap;
         iVariantMap = NULL;
         }
-    iVariantMap = CHbSymbianVariantMap::NewL();
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::VariantMapL()
+// ---------------------------------------------------------------------------
+//
+CHbSymbianVariantMap* CSifUiPrivate::VariantMapL()
+    {
+    if( !iVariantMap )
+        {
+        iVariantMap = CHbSymbianVariantMap::NewL();
+        }
+    return iVariantMap;
     }
 
 // ---------------------------------------------------------------------------
@@ -296,8 +403,9 @@
 //
 void CSifUiPrivate::ChangeNoteTypeL( TInt aType )
     {
-    ClearParamsL();
+    ClearParams();
     AddParamL( KSifUiDialogType, aType );
+    iDialogType = static_cast< TSifUiDeviceDialogType >( aType );
     }
 
 // ---------------------------------------------------------------------------
@@ -308,7 +416,7 @@
     {
     CHbSymbianVariant* variant = NULL;
     variant = CHbSymbianVariant::NewL( &aValue, CHbSymbianVariant::EInt );
-    iVariantMap->Add( aKey, variant );
+    User::LeaveIfError( VariantMapL()->Add( aKey, variant ) );
     }
 
 // ---------------------------------------------------------------------------
@@ -319,7 +427,7 @@
     {
     CHbSymbianVariant* variant = NULL;
     variant = CHbSymbianVariant::NewL( &aValue, CHbSymbianVariant::EDes );
-    iVariantMap->Add( aKey, variant );
+    User::LeaveIfError( VariantMapL()->Add( aKey, variant ) );
     }
 
 // ---------------------------------------------------------------------------
@@ -330,53 +438,39 @@
     {
     CHbSymbianVariant* variant = NULL;
     variant = CHbSymbianVariant::NewL( &aList, CHbSymbianVariant::EDesArray );
-    iVariantMap->Add( aKey, variant );
+    User::LeaveIfError( VariantMapL()->Add( aKey, variant ) );
     }
 
 // ---------------------------------------------------------------------------
-// CSifUiPrivate::AddParamsAppInfoAndSizeL()
+// CSifUiPrivate::AddParamsAppInfoL()
 // ---------------------------------------------------------------------------
 //
-void CSifUiPrivate::AddParamsAppInfoAndSizeL( const Swi::CAppInfo& aAppInfo, TInt aAppSize )
+void CSifUiPrivate::AddParamsAppInfoL( const CSifUiAppInfo& aAppInfo )
     {
-    AddParamL( KSifUiApplicationName, aAppInfo.AppName() );
-    const TVersion& version( aAppInfo.AppVersion() );
+    AddParamL( KSifUiApplicationName, aAppInfo.Name() );
+    const TVersion& version( aAppInfo.Version() );
     if( version.iBuild || version.iMajor || version.iMinor )
         {
         AddParamL( KSifUiApplicationVersion, version.Name() );
         }
-    if( aAppInfo.AppVendor().Length() )
+    if( aAppInfo.Vendor().Length() )
         {
-        AddParamL( KSifUiApplicationDetails, aAppInfo.AppVendor() );
+        AddParamL( KSifUiApplicationDetails, aAppInfo.Vendor() );
         }
-    if( aAppSize > 0 )
+    if( aAppInfo.Size() > 0 )
         {
-        AddParamL( KSifUiApplicationSize, aAppSize );
+        AddParamL( KSifUiApplicationSize, aAppInfo.Size() );
         }
-    }
+    // TODO: icons missing, could use binary transfer as in certificates
 
-// ---------------------------------------------------------------------------
-// CSifUiPrivate::AddParamsIconL()
-// ---------------------------------------------------------------------------
-//
-void CSifUiPrivate::AddParamsIconL( const CApaMaskedBitmap* aIcon )
-    {
-    if( aIcon )
+    if( iAppInfo != &aAppInfo )
         {
-        if( iBitmap )
+        if( iAppInfo )
             {
-            delete iBitmap;
-            iBitmap = NULL;
+            delete iAppInfo;
+            iAppInfo = NULL;
             }
-        iBitmap = CApaMaskedBitmap::NewL( aIcon );
-
-        CHbSymbianVariant* variant = NULL;
-        TInt bitmapHandle = iBitmap->Handle();
-        variant = CHbSymbianVariant::NewL( &bitmapHandle, CHbSymbianVariant::EInt );
-        iVariantMap->Add( KSifUiApplicationIconHandle, variant );
-        TInt bitmapMaskHandle = iBitmap->Mask()->Handle();
-        variant = CHbSymbianVariant::NewL( &bitmapMaskHandle, CHbSymbianVariant::EInt );
-        iVariantMap->Add( KSifUiApplicationIconMaskHandle, variant );
+        iAppInfo = CSifUiAppInfo::NewL( aAppInfo );
         }
     }
 
@@ -384,9 +478,222 @@
 // CSifUiPrivate::AddParamsCertificatesL()
 // ---------------------------------------------------------------------------
 //
-void CSifUiPrivate::AddParamsCertificatesL( const RPointerArray<Swi::CCertificateInfo>& /*aCertificates*/ )
+void CSifUiPrivate::AddParamsCertificatesL()
+    {
+    if( iCertificateBuffer )
+        {
+        const TPtrC8 dataPtr( iCertificateBuffer->Ptr( 0 ).Ptr(),
+                iCertificateBuffer->Size() );
+        CHbSymbianVariant* certificates = CHbSymbianVariant::NewL( &dataPtr,
+                CHbSymbianVariant::EBinary );
+        CleanupStack::PushL( certificates );
+        User::LeaveIfError( VariantMapL()->Add( KSifUiCertificates, certificates ) );
+        CleanupStack::Pop( certificates );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::AddParamsHiddenButtonsL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::AddParamsHiddenButtonsL()
+    {
+    CHbSymbianVariant* variant = NULL;
+    if( iNoHideProgressButton )
+        {
+        variant = CHbSymbianVariant::NewL( &iNoHideProgressButton, CHbSymbianVariant::EBool );
+        TInt err = VariantMapL()->Add( KSifUiProgressNoteIsHideButtonHidden, variant );
+        User::LeaveIfError( err );
+        }
+    if( iNoCancelProgressButton )
+        {
+        variant = CHbSymbianVariant::NewL( &iNoCancelProgressButton, CHbSymbianVariant::EBool );
+        TInt err = VariantMapL()->Add( KSifUiProgressNoteIsCancelButtonHidden, variant );
+        User::LeaveIfError( err );
+        }
+    if( iNoShowInAppLibButton )
+        {
+        variant = CHbSymbianVariant::NewL( &iNoShowInAppLibButton, CHbSymbianVariant::EBool );
+        TInt err = VariantMapL()->Add( KSifUiCompleteNoteIsShowButtonHidden, variant );
+        User::LeaveIfError( err );
+        }
+    if( iNoErrorDetailsButton )
+        {
+        variant = CHbSymbianVariant::NewL( &iNoErrorDetailsButton, CHbSymbianVariant::EBool );
+        TInt err = VariantMapL()->Add( KSifUiErrorNoteIsDetailsButtonHidden, variant );
+        User::LeaveIfError( err );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::ResendAllInstallationDetailsL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::ResendAllInstallationDetailsL()
+    {
+    AddParamL( KSifUiDialogType, iDialogType );
+    if( iAppInfo )
+        {
+        AddParamsAppInfoL( *iAppInfo );
+        }
+    AddParamsCertificatesL();
+    // TODO: AddParamsIconL();
+    AddParamsHiddenButtonsL();
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::ActivateInstallIndicatorL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::ActivateInstallIndicatorL()
+    {
+    if( !iIndicator )
+        {
+        iIndicator = CHbIndicatorSymbian::NewL();
+        iIndicator->SetObserver( this );
+        }
+
+    if( iAppInfo && iAppInfo->Name().Length() )
+        {
+        CHbSymbianVariant* param = NULL;
+        TPtrC appName = iAppInfo->Name();
+        param = CHbSymbianVariant::NewL( &appName, CHbSymbianVariant::EDes );
+        CleanupStack::PushL( param );
+        iIndicator->Activate( KSifUiInstallIndicatorType, param );
+        CleanupStack::PopAndDestroy( param );
+        }
+    else
+        {
+        iIndicator->Activate( KSifUiInstallIndicatorType );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::UpdateInstallIndicatorProgressL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::UpdateInstallIndicatorProgressL()
     {
-    // TODO: implement
+    if( iProgressBarFinalValue )
+        {
+        CHbSymbianVariant* param = NULL;
+        TInt progressPercent = KProgFull * iProgressBarCurrentValue / iProgressBarFinalValue;
+        param = CHbSymbianVariant::NewL( &progressPercent, CHbSymbianVariant::EInt );
+        CleanupStack::PushL( param );
+        iIndicator->Activate( KSifUiInstallIndicatorType, param );
+        CleanupStack::PopAndDestroy( param );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::CloseInstallIndicator()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::CloseInstallIndicator()
+    {
+    if( iIndicator )
+        {
+        iIndicator->Deactivate( KSifUiInstallIndicatorType );
+        delete iIndicator;
+        iIndicator = NULL;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::IsIndicatorActive()
+// ---------------------------------------------------------------------------
+//
+TBool CSifUiPrivate::IsIndicatorActive()
+    {
+    TBool isActive = EFalse;
+
+    if( iIndicator )
+        {
+        TInt value = 0;
+        TInt err = RProperty::Get( KInstallIndicatorCategory, KInstallIndicatorStatus,
+            value );
+        if( !err )
+            {
+            isActive = ( value > 0 );
+            }
+        }
+
+    return isActive;
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::ShowInstallIndicatorCompleteL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::ShowInstallIndicatorCompleteL( TInt aErrorCode )
+    {
+    CHbDeviceNotificationDialogSymbian* completeNote =
+            CHbDeviceNotificationDialogSymbian::NewL();
+    CleanupStack::PushL( completeNote );
+    completeNote->SetIconNameL( KSifUiDefaultApplicationIcon );
+    if( aErrorCode == KErrNone )
+        {
+        // TODO: use HbTextResolverSymbian to get localized text
+        _LIT( KInstalled, "Installed" );
+        completeNote->SetTitleL( KInstalled );
+        }
+    else
+        {
+        // TODO: use HbTextResolverSymbian to get localized text
+        _LIT( KInstallationFailed, "Installation failed" );
+        completeNote->SetTitleL( KInstallationFailed );
+        }
+    completeNote->ShowL();
+    CleanupStack::PopAndDestroy( completeNote );
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::UpdateDialogAndWaitForResponseL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::UpdateDialogAndWaitForResponseL()
+    {
+    CloseInstallIndicator();
+    DisplayDeviceDialogL();
+    WaitForResponseL();
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::UpdateDialogOrIndicatorWithoutWaitingL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::UpdateDialogOrIndicatorWithoutWaitingL()
+    {
+    if( IsIndicatorActive() )
+        {
+        UpdateInstallIndicatorProgressL();
+        }
+    else
+        {
+        DisplayDeviceDialogL();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSifUiPrivate::CompleteDialogOrIndicatorAndWaitForResponseL()
+// ---------------------------------------------------------------------------
+//
+void CSifUiPrivate::CompleteDialogOrIndicatorAndWaitForResponseL( TInt aErrorCode )
+    {
+    if( !IsCancelled() )
+        {
+        if( IsIndicatorActive() )
+            {
+            UpdateInstallIndicatorProgressL();
+            ShowInstallIndicatorCompleteL( aErrorCode );
+            CloseInstallIndicator();
+            }
+        else
+            {
+            DisplayDeviceDialogL();
+            WaitForResponseL();
+            }
+        }
     }
 
 // ---------------------------------------------------------------------------
@@ -397,7 +704,7 @@
     {
     if( iDeviceDialog && iIsDisplayingDialog )
         {
-        iDeviceDialog->Update( *iVariantMap );
+        User::LeaveIfError( iDeviceDialog->Update( *VariantMapL() ) );
         }
     else
         {
@@ -405,37 +712,42 @@
             {
             iDeviceDialog = CHbDeviceDialogSymbian::NewL();
             }
-        iDeviceDialog->Show( KSifUiDeviceDialog, *iVariantMap, this );
+        if( !iIsFirstTimeToDisplay )
+            {
+            ResendAllInstallationDetailsL();
+            }
+        User::LeaveIfError( iDeviceDialog->Show( KSifUiDeviceDialog, *VariantMapL(), this ) );
         iIsDisplayingDialog = ETrue;
         }
+    iIsFirstTimeToDisplay = EFalse;
     }
 
 // ---------------------------------------------------------------------------
-// CSifUiPrivate::WaitForResponse()
+// CSifUiPrivate::WaitForResponseL()
 // ---------------------------------------------------------------------------
 //
-TInt CSifUiPrivate::WaitForResponse()
+void CSifUiPrivate::WaitForResponseL()
     {
-    iCompletionCode = KErrInUse;
-    iReturnValue = KErrUnknown;
+    iWaitCompletionCode = KErrInUse;    // changed in WaitedResponseReceived() or in DoCancel()
+    iDialogReturnValue = KErrUnknown;   // changed in DataReceived()
     if( !IsActive() && iWait && !iWait->IsStarted() )
         {
         iStatus = KRequestPending;
         SetActive();
         iWait->Start();
         }
-    return iCompletionCode;
+    User::LeaveIfError( iWaitCompletionCode );
     }
 
 // ---------------------------------------------------------------------------
-// CSifUiPrivate::ResponseReceived()
+// CSifUiPrivate::WaitedResponseReceived()
 // ---------------------------------------------------------------------------
 //
-void CSifUiPrivate::ResponseReceived( TInt aCompletionCode )
+void CSifUiPrivate::WaitedResponseReceived( TInt aCompletionCode )
     {
     if( IsActive() )
         {
-        iCompletionCode = aCompletionCode;
+        iWaitCompletionCode = aCompletionCode;
         TRequestStatus* status( &iStatus );
         User::RequestComplete( status, KErrNone );
         }
--- a/appinstall_plat/sifui_api/tsrc/conf/sifuitestscripter.cfg	Tue Jun 15 13:36:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-#
-# Copyright (c) 2010 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:  SifUi STIF TestScripter configuration file
-#
-
-[Test]
-title Startup and Shutdown
-[Endtest]
-
Binary file appinstall_plat/sifui_api/tsrc/data/mmc/test_x509_cert.cer has changed
--- a/appinstall_plat/sifui_api/tsrc/group/bld.inf	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstall_plat/sifui_api/tsrc/group/bld.inf	Thu Jul 22 16:35:01 2010 +0100
@@ -10,8 +10,8 @@
 * Nokia Corporation - initial contribution.
 *
 * Contributors:
-* 
-* Description:
+*
+* Description:  SifUi API test code
 *
 */
 
@@ -19,7 +19,12 @@
 DEFAULT
 
 PRJ_EXPORTS
-../init/sifuitestscripter.ini   /epoc32/winscw/c/testframework/sifuitestscripter.ini
+../init/sifuitest.ini           /epoc32/winscw/c/testframework/TestFramework.ini
+../data/mmc/test_x509_cert.cer  /epoc32/winscw/c/testing/data/test_x509_cert.cer
+../init/sifuitest.ini           /epoc32/data/z/system/data/TestFramework.ini
+
+// Note: data files may need to be copied manually from ../data/mmc to memory card e:/testing/data/
+// See sifuitest.pkg file for details (i.e. which files needs to be installed to run the tests).
 
 PRJ_TESTMMPFILES
 sifuitest.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/tsrc/group/ctc_compile_tests.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,26 @@
+@echo off
+rem
+rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  Module tests for SIF UI API.
+rem
+
+echo ----------------------------------------------------------------------
+echo.
+echo Compiling module tests
+echo.
+echo ----------------------------------------------------------------------
+echo.
+call sbs reallyclean
+call sbs
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/tsrc/group/ctc_instrument_code.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,32 @@
+@echo off
+rem
+rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  Module tests for SIF UI API.
+rem
+
+echo ----------------------------------------------------------------------
+echo.
+echo Instrumenting code (armv5 urel and winscw udeb, function coverage)
+echo.
+echo ----------------------------------------------------------------------
+echo.
+pushd ..\..\group
+if exist MON.sym del MON.sym
+if exist MON.dat del MON.dat
+if exist profile.txt del profile.txt
+call sbs reallyclean
+call ctcwrap -i f -2comp -C "EXCLUDE+*.UID.CPP" sbs -c armv5_urel
+call ctcwrap -i f -2comp -C "EXCLUDE+*.UID.CPP" sbs -c winscw_udeb
+popd
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/tsrc/group/ctc_process_results.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,28 @@
+@echo off
+rem
+rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  Module tests for SIF UI API.
+rem
+
+echo ----------------------------------------------------------------------
+echo.
+echo Processing test results
+echo.
+echo ----------------------------------------------------------------------
+echo.
+pushd ..\..\group
+call ctcpost MON.sym MON.dat -p profile.txt
+call ctc2html -i profile.txt
+popd
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/tsrc/group/ctc_remove_instrumentation.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,28 @@
+@echo off
+rem
+rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  Module tests for SIF UI API.
+rem
+
+echo ----------------------------------------------------------------------
+echo.
+echo Removing instrumentation
+echo.
+echo ----------------------------------------------------------------------
+echo.
+pushd ..\..\group
+call sbs reallyclean
+call sbs
+popd
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/tsrc/group/ctc_run_tests.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,27 @@
+@echo off
+rem
+rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  Module tests for SIF UI API.
+rem
+
+echo ----------------------------------------------------------------------
+echo.
+echo Running module tests
+echo.
+echo ----------------------------------------------------------------------
+echo.
+echo Note that closing dialogs automatically is not implemented yet.
+echo.
+call \epoc32\release\winscw\udeb\ATSInterface.exe -testmodule sifuitest
+
--- a/appinstall_plat/sifui_api/tsrc/group/sifuitest.mmp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstall_plat/sifui_api/tsrc/group/sifuitest.mmp	Thu Jul 22 16:35:01 2010 +0100
@@ -11,7 +11,7 @@
 *
 * Contributors:
 * 
-* Description: MMP file for RSifUi STIF test module.
+* Description:  SifUi API test code
 *
 */
 
@@ -38,4 +38,10 @@
 LIBRARY         stiftestinterface.lib               // STIF Framework
 LIBRARY         stiftestengine.lib                  // STIF Framework
 LIBRARY         sifui.lib                           // CSifUi
+LIBRARY         estor.lib                           // RBufWriteStream
+LIBRARY         uissclient.lib                      // Swi::CCertificateInfo
+LIBRARY         x509.lib                            // CX509Certificate
+LIBRARY         apgrfx.lib                          // RApaLsSession 
 
+SMPSAFE
+
--- a/appinstall_plat/sifui_api/tsrc/group/sifuitest.pkg	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstall_plat/sifui_api/tsrc/group/sifuitest.pkg	Thu Jul 22 16:35:01 2010 +0100
@@ -11,9 +11,7 @@
 ;
 ; Contributors:
 ; 
-; Description:
-;
-; 	Installation file for STIF
+; Description:  SifUi API test code installation file
 ;
 
 ; Languages
@@ -33,7 +31,7 @@
 :"Nokia"
 
 ; Install files
-"\epoc32\release\armv5\udeb\sifuitest.dll" - "c:\sys\bin\sifuitest.dll"
-"..\init\sifuitestscripter.ini" - "c:\TestFramework\sifuitestscripter.ini"
-"..\conf\sifuitestscripter.cfg" - "c:\TestFramework\sifuitestscripter.cfg"
+"\epoc32\release\armv5\udeb\sifuitest.dll"-"c:\sys\bin\sifuitest.dll"
+"..\init\sifuitestscripter.ini"-"c:\TestFramework\sifuitestscripter.ini"
+"..\data\mmc\test_x509_cert.cer"-"e:\testing\data\test_x509_cert.cer"
 
--- a/appinstall_plat/sifui_api/tsrc/group/sifuitest_nrm.mmp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstall_plat/sifui_api/tsrc/group/sifuitest_nrm.mmp	Thu Jul 22 16:35:01 2010 +0100
@@ -11,10 +11,12 @@
 *
 * Contributors:
 * 
-* Description: MMP file for RSifUi STIF test module.
+* Description:  SifUi API test code
 *
 */
 
-// Same MMP file is used for both "BUILD" and "TEST BUILD" ABLD commands
+// Same MMP file is used both in normal and in test builds
 #include "sifuitest.mmp"
 
+SMPSAFE
+
--- a/appinstall_plat/sifui_api/tsrc/inc/sifuidummydetailsprovider.h	Tue Jun 15 13:36:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-/*
-* Copyright (c) 2010 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: Dummy implementation for details provider interface.
-*
-*/
-
-#ifndef C_DUMMYDETAILSPROVIDER_H
-#define C_DUMMYDETAILSPROVIDER_H
-
-#include <e32base.h>            // CBase
-#include <sifuidetailsif.h>     // MSifUiDetailsIf, MSifUiListIterator, MSifUiDetailsIterator
-
-
-class CDummyDetailsProvider : public CBase, public MSifUiDetailsIf,
-        public MSifUiListIterator, public MSifUiDetailsIterator
-    {
-public:
-    CDummyDetailsProvider( RFs& aFs );
-    ~CDummyDetailsProvider();
-
-public:
-    // from MSifUiDetailsIterator
-    void SetToFirstFieldL();
-    TBool HasNextField();
-    void GetNextFieldL( TDes& aFieldName, TDes& aFieldValue );
-
-    // from MSifUiListIterator
-    void SetToFirstItemL();
-    TBool HasNextItem();
-    void GetNextItemL( TDes& aItemName );
-    MSifUiDetailsIterator* DetailsIterator( const TDesC& aItemName );
-
-    // from MSifUiDetailsIf
-    MSifUiDetailsIterator* AppDetailsIterator();
-    MSifUiListIterator* CertificatesListL();
-    MSifUiListIterator* DrmFilesListL();
-    void GetDriveListL( RArray<TDriveUnit>& aDriveList );
-    void GetFolderListL( const TDesC& aParent, CDesCArray& aFolderList );
-    TBool HasFolderSubfolders( const TDesC& aParent, const TDesC& aFolder );
-
-private:    // data
-    RFs& iFs;
-    TInt iCurrentField;
-    TInt iCurrentItem;
-    };
-
-#endif // C_DUMMYDETAILSPROVIDER_H
-
--- a/appinstall_plat/sifui_api/tsrc/inc/sifuitest.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstall_plat/sifui_api/tsrc/inc/sifuitest.h	Thu Jul 22 16:35:01 2010 +0100
@@ -38,6 +38,7 @@
 #define OOM_ENTRY(str,func,a,b,c) {_S(str), GETPTR func,a,b,c}
 #define OOM_FUNCENTRY(func,a,b,c) {_S(#func), GETPTR func,a,b,c}
 
+class CX509Certificate;
 class CSifUiTest;
 class CSifUi;
 
@@ -143,10 +144,9 @@
                 const TKeyEvent& aKeyEvent ) const;
 
         /**
-         * Helper function to create new CSifUi object in iSifUi member.
-         * @return TInt - result code for creating new CSifUi
+         * Helper function to create Swi::CCertificateInfo objects.
          */
-        TInt CreateSifUi();
+        CX509Certificate* ReadCertificateL( const TDesC& aFileName );
 
 
         // --- TEST CASE FUNCTIONS ---
@@ -159,53 +159,52 @@
         TInt CreateLowMemTest( TTestResult& aResult );
 
         /**
-         * Run information note test case.
+         * Run drive selection test case.
          * @param aResult - test case result (PASS/FAIL)
          * @return Symbian OS error code (other than test result)
          */
-        TInt InformationNoteTest( TTestResult& aResult );
+        TInt MemorySelectionTest( TTestResult& aResult );
 
         /**
-         * Run warning note test case.
-         * @param aResult - test case result (PASS/FAIL)
-         * @return Symbian OS error code (other than test result)
+         * Helper function for MemorySelectionTest()
          */
-        TInt WarningNoteTest( TTestResult& aResult );
+        void DoMemorySelectionTestL( TTestResult& aResult );
 
         /**
-         * Run error note test case.
+         * Run certificate info test case.
          * @param aResult - test case result (PASS/FAIL)
          * @return Symbian OS error code (other than test result)
          */
-        TInt ErrorNoteTest( TTestResult& aResult );
+        TInt CertificateInfoTest( TTestResult& aResult );
 
         /**
-         * Run permanent note test case.
-         * @param aResult - test case result (PASS/FAIL)
-         * @return Symbian OS error code (other than test result)
+         * Helper function for CertificateInfoTest()
          */
-        TInt PermanentNoteTest( TTestResult& aResult );
+        void DoCertificateInfoTestL( TTestResult& aResult );
 
         /**
-         * Run progress note test case.
+         * Run application info test case.
          * @param aResult - test case result (PASS/FAIL)
          * @return Symbian OS error code (other than test result)
          */
-        TInt ProgressNoteTest( TTestResult& aResult );
+        TInt AppInfoTest( TTestResult& aResult );
 
         /**
-         * Run wait note test case.
+         * Helper function for AppInfoTest()
+         */
+        void DoAppInfoTestL( TTestResult& aResult );
+        
+        /**
+         * Run progress dialogs test case.
          * @param aResult - test case result (PASS/FAIL)
          * @return Symbian OS error code (other than test result)
          */
-        TInt WaitNoteTest( TTestResult& aResult );
+        TInt ProgressDialogsTest( TTestResult& aResult );
 
         /**
-         * Run launch help test case.
-         * @param aResult - test case result (PASS/FAIL)
-         * @return Symbian OS error code (other than test result)
+         * Helper function for ProgressDialogsTest()
          */
-        TInt LaunchHelpTest( TTestResult& aResult );
+        void DoProgressDialogsTestL( TTestResult& aResult );
 
     private:        // data
         TestFunction iMethod;
@@ -216,8 +215,6 @@
         TBool iVersionLogged;
         RFs iFs;
         CActiveScheduler* iScheduler;
-
-        CSifUi* iSifUi;
     };
 
 #endif      // SIFUITEST_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/tsrc/inc/sifuitestcleanuputils.h	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   Defines CleanupResetAndDestroyPushL
+*
+*/
+
+
+#ifndef SIFUITESTCLEANUPUTILS_H
+#define SIFUITESTCLEANUPUTILS_H
+
+template <class T>
+class CleanupResetAndDestroy
+    {
+public:
+    inline static void PushL( T& aRef );
+private:
+    static void ResetAndDestroy( TAny *aPtr );
+    };
+
+template <class T>
+inline void CleanupResetAndDestroyPushL( T& aRef );
+
+template <class T>
+inline void CleanupResetAndDestroy<T>::PushL( T& aRef )
+    {
+    CleanupStack::PushL( TCleanupItem( &ResetAndDestroy, &aRef ) );
+    }
+
+template <class T>
+void CleanupResetAndDestroy<T>::ResetAndDestroy( TAny *aPtr )
+    {
+    if( aPtr )
+        {
+        static_cast<T*>( aPtr )->ResetAndDestroy();
+        }
+    }
+
+template <class T>
+inline void CleanupResetAndDestroyPushL( T& aRef )
+    {
+    CleanupResetAndDestroy<T>::PushL( aRef );
+    }
+
+#endif // SIFUITESTCLEANUPUTILS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/tsrc/init/sifuitest.ini	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,36 @@
+#
+# Copyright (c) 2010 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: SifUi STIF tests initialization file
+#
+#
+
+[Engine_Defaults]
+TestReportMode= FullReport
+CreateTestReport= YES
+TestReportFilePath= C:\LOGS\TestFramework\
+TestReportFileName= TestReport
+TestReportFormat= TXT
+TestReportOutput= FILE
+TestReportFileCreationMode= OVERWRITE
+DeviceResetDllName= StifResetForNokia.dll
+DisableMeasurement= stifmeasurementdisablenone
+Timeout= 0
+UITestingSupport= YES
+SeparateProcesses= NO
+[End_Defaults]
+
+[New_Module]
+ModuleName= sifuitest
+[End_Module]
+
--- a/appinstall_plat/sifui_api/tsrc/init/sifuitestscripter.ini	Tue Jun 15 13:36:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-#
-# Copyright (c) 2010 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: SifUi STIF TestScripter initialization file
-#
-#
-
-[Engine_Defaults]
-TestReportMode= FullReport
-CreateTestReport= YES
-TestReportFilePath= C:\LOGS\TestFramework\
-TestReportFileName= TestReport
-TestReportFormat= TXT
-TestReportOutput= FILE
-TestReportFileCreationMode= OVERWRITE
-DeviceResetDllName= StifResetForNokia.dll
-DisableMeasurement= stifmeasurementdisablenone
-Timeout= 0
-UITestingSupport= YES
-SeparateProcesses= NO
-[End_Defaults]
-
-[New_Module]
-ModuleName= sifuitest
-[End_Module]
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstall_plat/sifui_api/tsrc/run_module_tests.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,24 @@
+@echo off
+rem
+rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  Module tests for SIF UI API.
+rem
+
+pushd group
+call ctc_instrument_code.bat
+call ctc_compile_tests.bat
+call ctc_run_tests.bat
+call ctc_process_results.bat
+call ctc_remove_instrumentation.bat
+popd
--- a/appinstall_plat/sifui_api/tsrc/src/sifuidummydetailsprovider.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,140 +0,0 @@
-/*
-* Copyright (c) 2010 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: Dummy implementation for details provider interface.
-*
-*/
-
-#include <sifuidummydetailsprovider.h>  // CDummyDetailsProvider
-#include <f32file.h>                    // RFs, TVolumeInfo
-
-
-CDummyDetailsProvider::CDummyDetailsProvider( RFs& aFs ) : iFs( aFs )
-    {
-    }
-
-CDummyDetailsProvider::~CDummyDetailsProvider()
-    {
-    }
-
-void CDummyDetailsProvider::SetToFirstFieldL()
-    {
-    iCurrentField = 0;
-    }
-
-TBool CDummyDetailsProvider::HasNextField()
-    {
-    return( iCurrentField < 3 );
-    }
-
-void CDummyDetailsProvider::GetNextFieldL( TDes& aFieldName, TDes& aFieldValue )
-    {
-    __ASSERT_ALWAYS( iCurrentField < 3, User::Invariant() );
-    aFieldName.Zero();
-    aFieldName.AppendFormat( _L("Field_%d"), iCurrentField );
-    aFieldValue.Zero();
-    aFieldValue.AppendFormat( _L("Value %d"), iCurrentField );
-    ++iCurrentField;
-    }
-
-void CDummyDetailsProvider::SetToFirstItemL()
-    {
-    iCurrentItem = 0;
-    }
-
-TBool CDummyDetailsProvider::HasNextItem()
-    {
-    return( iCurrentField < 3 );
-    }
-
-void CDummyDetailsProvider::GetNextItemL( TDes& aItemName )
-    {
-    __ASSERT_ALWAYS( iCurrentItem < 3, User::Invariant() );
-    aItemName.Zero();
-    aItemName.AppendFormat( _L("Item_%d"), iCurrentItem );
-    ++iCurrentItem;
-    }
-
-MSifUiDetailsIterator* CDummyDetailsProvider::DetailsIterator( const TDesC& aItemName )
-    {
-    return this;
-    }
-
-MSifUiDetailsIterator* CDummyDetailsProvider::AppDetailsIterator()
-    {
-    return this;
-    }
-
-MSifUiListIterator* CDummyDetailsProvider::CertificatesListL()
-    {
-    return this;
-    }
-
-MSifUiListIterator* CDummyDetailsProvider::DrmFilesListL()
-    {
-    return this;
-    }
-
-void CDummyDetailsProvider::GetDriveListL( RArray<TDriveUnit>& aDriveList )
-    {
-    aDriveList.Reset();
-    TDriveList driveList;
-    User::LeaveIfError( iFs.DriveList( driveList ) );
-    for( TInt driveNumber = EDriveA; driveNumber <= EDriveZ; ++driveNumber )
-        {
-        if( driveList[ driveNumber ] )
-            {
-            TVolumeInfo volInfo;
-            if( iFs.Volume( volInfo, driveNumber ) == KErrNone )
-                {
-                if( volInfo.iDrive.iType != EMediaNotPresent &&
-                    volInfo.iDrive.iType != EMediaRom &&
-                    volInfo.iDrive.iType != EMediaRemote &&
-                    !( volInfo.iDrive.iDriveAtt & KDriveAttRom ) &&
-                    !( volInfo.iDrive.iDriveAtt & KDriveAttSubsted ) )
-                    {
-                    aDriveList.AppendL( driveNumber );
-                    }
-                }
-            }
-        }
-    }
-
-void CDummyDetailsProvider::GetFolderListL( const TDesC& aParent, CDesCArray& aFolderList )
-    {
-    aFolderList.Reset();
-    if( aParent.Find( _L("SubSub") ) != KErrNotFound )
-        {
-        // no subfolders, should not get here
-        User::Invariant();
-        }
-    else if( ( aParent.Find( _L("Applications") ) != KErrNotFound ) ||
-             ( aParent.Find( _L("Programs") ) != KErrNotFound ) ||
-             ( aParent.Find( _L("Installations") ) != KErrNotFound ) )
-        {
-        aFolderList.AppendL( _L("SubSubDir") );
-        aFolderList.AppendL( _L("SubSubFolder") );
-        }
-    else
-        {
-        aFolderList.AppendL( _L("Applications") );
-        aFolderList.AppendL( _L("Programs") );
-        aFolderList.AppendL( _L("Installations") );
-        }
-    }
-
-TBool CDummyDetailsProvider::HasFolderSubfolders( const TDesC& aParent, const TDesC& aFolder )
-    {
-    return( aParent.Find( _L("SubSub") ) != KErrNotFound );
-    }
-
--- a/appinstall_plat/sifui_api/tsrc/src/sifuitest.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstall_plat/sifui_api/tsrc/src/sifuitest.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -21,93 +21,9 @@
 #include <sifui.h>                      // CSifUi
 #include "SifUiTest.h"
 
-
-//
-// NOTE: This cpp file contains just generic STIF module code.
-// Test case functions are defined in SifUiTestCases.cpp
-//
-
-
-_LIT( KWaitAndSendThread, "WaitAndSendKey" );
-const TInt KWaitAndSendThreadStack = 0x1000;
-
-class TDelayAndKeyEvent {
-public:
-    TTimeIntervalMicroSeconds32 iDelay;
-    TKeyEvent iKeyEvent;
-};
-
-
-// ======== LOCAL FUNCTIONS =========
-
-// -----------------------------------------------------------------------------
-// DoSendKeyEventL( const TKeyEvent& aKeyEvent )
-// -----------------------------------------------------------------------------
-//
-void DoSendKeyEventL( const TKeyEvent& aKeyEvent )
-    {
-    RWsSession wsSession;
-    User::LeaveIfError( wsSession.Connect() );
-    CleanupClosePushL( wsSession );
-    TInt focusedGroup = wsSession.GetFocusWindowGroup();
-
-    TWsEvent event;
-    TKeyEvent& keyEvent( *event.Key() );
-    TInt err;
-
-    /*
-    event.SetType( EEventKeyDown );
-    event.SetTimeNow();
-    keyEvent = aKeyEvent;
-    err = wsSession.SendEventToWindowGroup( focusedGroup, event );
-    User::LeaveIfError( err );
-    */
-
-    event.SetType( EEventKey );
-    event.SetTimeNow();
-    keyEvent = aKeyEvent;
-    err = wsSession.SendEventToWindowGroup( focusedGroup, event );
-    User::LeaveIfError( err );
-
-    /*
-    event.SetType( EEventKeyUp );
-    event.SetTimeNow();
-    keyEvent = aKeyEvent;
-    err = wsSession.SendEventToWindowGroup( focusedGroup, event );
-    User::LeaveIfError( err );
-    */
-
-    CleanupStack::PopAndDestroy( &wsSession );
-    }
-
-// -----------------------------------------------------------------------------
-// WaitAndSendThreadFunc()
-// -----------------------------------------------------------------------------
-//
-TInt WaitAndSendThreadFunc( TAny* aPtr )
-    {
-    TDelayAndKeyEvent* params = reinterpret_cast<TDelayAndKeyEvent*>( aPtr );
-    ASSERT( params );
-    TInt retVal = KErrNone;
-
-    CTrapCleanup* cleanup = CTrapCleanup::New();
-    if( !cleanup )
-        {
-        delete params;
-        retVal = KErrNoMemory;
-        }
-
-    RThread::Rendezvous( retVal );
-    if( retVal == KErrNone )
-        {
-        User::After( params->iDelay );
-        TRAP( retVal, DoSendKeyEventL( params->iKeyEvent ) );
-        }
-
-    delete cleanup;
-    delete params;
-    return retVal;
-    }
+const TInt KTestStackSize = 0x8000;     // 32K stack
+const TInt KTestMinHeap = 0x4000;       // 16K heap min
+const TInt KTestMaxHeap = 0x200000;     // 2M heap max
 
 
 // ======== MEMBER FUNCTIONS ========
@@ -131,7 +47,6 @@
 //
 CSifUiTest::~CSifUiTest()
     {
-    delete iSifUi;
     iLog = NULL;
     delete iStdLog;
     delete iTCLog;
@@ -269,14 +184,14 @@
     {
     User::LeaveIfError( iFs.Connect() );
 
-    // Read logger settings
-    RSettingServer settingServer;
-    TInt ret = settingServer.Connect();
-    User::LeaveIfError( ret );
+    RSettingServer settingsServer;
+    User::LeaveIfError( settingsServer.Connect() );
+    CleanupClosePushL( settingsServer );
+
     TLoggerSettings loggerSettings;
-    ret = settingServer.GetLoggerSettings( loggerSettings );
-    User::LeaveIfError( ret );
-    settingServer.Close();
+    User::LeaveIfError( settingsServer.GetLoggerSettings( loggerSettings ) );
+
+    CleanupStack::PopAndDestroy( &settingsServer );
 
     iAddTestCaseTitleToLogName = loggerSettings.iAddTestCaseTitle;
     iStdLog = CStifLogger::NewL( KSifUiTestLogPath, KSifUiTestLogFile );
@@ -415,43 +330,6 @@
     aResult.SetResult( aReturnCode, ErrorCodeString( aReturnCode ) );
     }
 
-// -----------------------------------------------------------------------------
-// CSifUiTest::AsyncWaitAndSendKeyEventL()
-// -----------------------------------------------------------------------------
-//
-void CSifUiTest::AsyncWaitAndSendKeyEventL( TTimeIntervalMicroSeconds32 aDelay,
-        const TKeyEvent& aKeyEvent ) const
-    {
-    if( aDelay.Int() )
-        {
-        TDelayAndKeyEvent* paramPack = new( ELeave ) TDelayAndKeyEvent;
-        paramPack->iDelay = aDelay;
-        paramPack->iKeyEvent = aKeyEvent;
-
-        RThread waitingAndSendingThread;
-        TInt err = waitingAndSendingThread.Create( KWaitAndSendThread, WaitAndSendThreadFunc,
-                KWaitAndSendThreadStack, NULL, reinterpret_cast< TAny* >( paramPack ) );
-        if( err == KErrNone )
-            {
-            TRequestStatus status;
-            waitingAndSendingThread.Rendezvous( status );
-            waitingAndSendingThread.Resume();
-            User::WaitForRequest( status );
-            waitingAndSendingThread.Close();
-            User::LeaveIfError( status.Int() );
-            }
-        else
-            {
-            delete paramPack;
-            User::Leave( err );
-            }
-        }
-    else
-        {
-        DoSendKeyEventL( aKeyEvent );
-        }
-    }
-
 
 // ==== OTHER EXPORTED FUNCTIONS ====
 
@@ -473,12 +351,16 @@
     {
     aParameterValid = KStifTestModuleParameterChanged;
 
-    CTestModuleParamVer01* param = CTestModuleParamVer01::NewL();
-    param->iTestThreadStackSize = 16384;    // 16K stack
-    param->iTestThreadMinHeap = 4096;       // 4K heap min
-    param->iTestThreadMaxHeap = 1048576;    // 1M heap max
-    aTestModuleParam = param;
+    CTestModuleParamVer01* param = NULL;
+    TRAPD( error, param = CTestModuleParamVer01::NewL() );
+    if( !error )
+        {
+        param->iTestThreadStackSize = KTestStackSize;
+        param->iTestThreadMinHeap = KTestMinHeap;
+        param->iTestThreadMaxHeap = KTestMaxHeap;
+        aTestModuleParam = param;
+        }
 
-    return KErrNone;
+    return error;
     }
 
--- a/appinstall_plat/sifui_api/tsrc/src/sifuitestcases.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstall_plat/sifui_api/tsrc/src/sifuitestcases.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -15,14 +15,27 @@
 *
 */
 
-#include <badesca.h>                    // CDesCArray
+#include <badesca.h>                    // CDesCArray, StifUnitMacros.h needs this
+#include <StifUnitMacros.h>             // STIF_ASSERT_NULL, STIF_ASSERT_NOT_NULL
 #include <sifui.h>                      // CSifUi
-#include "SifUiTest.h"                  // CSifUiTest
+#include <sifuiappinfo.h>               // CSifUiAppInfo
+#include <sifuicertificateinfo.h>       // CSifUiCertificateInfo
+#include <s32file.h>                    // RFileReadStream
+#include <s32mem.h>                     // RDesReadStream
+#include <apgcli.h>                     // RApaLsSession
+#include <swi/msisuihandlers.h>         // Swi::CCertificateInfo
+#include "sifuitest.h"                  // CSifUiTest
+#include "sifuitestcleanuputils.h"      // CleanupResetAndDestroyPushL
+
+_LIT( KX509TestCertFile, "\\testing\\data\\test_x509_cert.cer" );
 
 _LIT( KEnter, "Enter" );
 _LIT( KStepFormat, "Step %d" );
 _LIT( KExit, "Exit" );
 
+const TInt KBufferGranularity = 1024;
+
+
 // Internal structure containing test case name and pointer to test function
 class TCaseInfoInternal
     {
@@ -34,12 +47,6 @@
         TInt            iLastMemoryAllocation;
     };
 
-const TInt KOneSecond = 1000000;
-const TInt KThreeSeconds = 3 * KOneSecond;
-const TInt KFiveSeconds = 5 * KOneSecond;
-const TInt KHalfSecond = KOneSecond / 2;
-const TKeyEvent KRightSoftkey = { EKeyDevice1, 0, 0, EStdKeyDevice1 };  // EKeyCBA2
-
 
 // ======== MEMBER FUNCTIONS ========
 
@@ -69,13 +76,10 @@
     static TCaseInfoInternal const KCases[] =
         {
         ENTRY( "CreateLowMemTest", CSifUiTest::CreateLowMemTest ),
-        ENTRY( "InformationNoteTest", CSifUiTest::InformationNoteTest ),
-        ENTRY( "WarningNoteTest", CSifUiTest::WarningNoteTest ),
-        ENTRY( "ErrorNoteTest", CSifUiTest::ErrorNoteTest ),
-        ENTRY( "PermanentNoteTest", CSifUiTest::PermanentNoteTest ),
-        ENTRY( "ProgressNoteTest", CSifUiTest::ProgressNoteTest ),
-        ENTRY( "WaitNoteTest", CSifUiTest::WaitNoteTest ),
-        ENTRY( "LaunchHelpTest", CSifUiTest::LaunchHelpTest )
+        ENTRY( "MemorySelectionTest", CSifUiTest::MemorySelectionTest ),
+        ENTRY( "CertificateInfoTest", CSifUiTest::CertificateInfoTest ),
+        ENTRY( "AppInfoTest", CSifUiTest::AppInfoTest ),
+        ENTRY( "ProgressDialogsTest", CSifUiTest::ProgressDialogsTest )
         };
 
     if( (TUint) aCaseNumber >= sizeof( KCases ) / sizeof( TCaseInfoInternal ) )
@@ -98,19 +102,30 @@
     }
 
 // -----------------------------------------------------------------------------
-// CSifUiTest::CreateSifUi()
+// CSifUiTest::ReadCertificateL()
 // -----------------------------------------------------------------------------
 //
-TInt CSifUiTest::CreateSifUi()
+CX509Certificate* CSifUiTest::ReadCertificateL( const TDesC& aFileName )
     {
-    if( iSifUi )
-        {
-        delete iSifUi;
-        iSifUi = NULL;
-        }
+    TFindFile findFile( iFs );
+    User::LeaveIfError( findFile.FindByDir( aFileName, KNullDesC ) );
+
+    RFile file;
+    User::LeaveIfError( file.Open( iFs, findFile.File(), EFileRead ) );
+    CleanupClosePushL( file );
+
+    TInt fileSize = 0;
+    User::LeaveIfError( file.Size( fileSize ) );
 
-    TRAPD( err, iSifUi = CSifUi::NewL() );
-    return err;
+    HBufC8* buffer = HBufC8::NewLC( fileSize );
+    TPtr8 ptr( buffer->Des() );
+    User::LeaveIfError( file.Read( ptr ) );
+
+    CX509Certificate* x509cert = CX509Certificate::NewL( *buffer );
+
+    CleanupStack::PopAndDestroy( buffer );
+    CleanupStack::PopAndDestroy( &file );
+    return x509cert;
     }
 
 // -----------------------------------------------------------------------------
@@ -124,321 +139,228 @@
 
     TInt count = 0;
     TInt error = KErrNoMemory;
+    CSifUi* sifUi = NULL;
     while( error == KErrNoMemory )
         {
         User::__DbgSetAllocFail( EFalse, RHeap::EDeterministic, ++count );
-        __UHEAP_MARK;
-        error = CreateSifUi();
-        __UHEAP_MARKEND;
+        TRAP( error, sifUi = CSifUi::NewL() );
         User::__DbgSetAllocFail( EFalse, RHeap::ENone, count );
+        if( !error )
+            {
+            delete sifUi;
+            sifUi = NULL;
+            }
         }
     TestModuleIf().Printf( 1, KTestName, _L("count %d, last error %d"), count, error );
     SetResult( aResult, error );
-    delete iSifUi;
-    iSifUi = NULL;
-
-    TestModuleIf().Printf( 0, KTestName, KExit );
-    return KErrNone;
-    }
-
-// -----------------------------------------------------------------------------
-// CSifUiTest::InformationNoteTest()
-// -----------------------------------------------------------------------------
-//
-TInt CSifUiTest::InformationNoteTest( TTestResult& aResult )
-    {
-    _LIT( KTestName, "InformationNoteTest" );
-    TestModuleIf().Printf( 0, KTestName, KEnter );
-
-    enum TTestSteps
-        {
-        EFirstStep,
-        EChangeText,
-        EWaitSomeTime,
-        EAllDone
-        };
-    _LIT( KInfoNoteText, "This is information note" );
-    _LIT( KChangedInfoNoteText, "Changed information note text" );
-
-    TInt result = CreateSifUi();
-    for( TInt step = EFirstStep; step < EAllDone && result == KErrNone; ++step )
-        {
-        TestModuleIf().Printf( 1, KTestName, KStepFormat, step );
-        switch( step )
-            {
-            case EFirstStep:
-                TRAP( result, iSifUi->DisplayInformationNoteL( KInfoNoteText ) );
-                break;
-            case EChangeText:
-                User::After( KOneSecond );
-                TRAP( result, iSifUi->DisplayInformationNoteL( KChangedInfoNoteText ) );
-                break;
-            case EWaitSomeTime:
-                User::After( KOneSecond );
-                break;
-            default:
-                User::Leave( KErrGeneral );
-                break;
-            }
-        }
-
-    delete iSifUi;
-    iSifUi = NULL;
-
-    SetResult( aResult, result );
-
-    TestModuleIf().Printf( 0, KTestName, KExit );
-    return KErrNone;
-    }
-
-// -----------------------------------------------------------------------------
-// CSifUiTest::WarningNoteTest()
-// -----------------------------------------------------------------------------
-//
-TInt CSifUiTest::WarningNoteTest( TTestResult& aResult )
-    {
-    _LIT( KTestName, "WarningNoteTest" );
-    TestModuleIf().Printf( 0, KTestName, KEnter );
-
-    enum TTestSteps
-        {
-        EFirstStep,
-        EChangeText,
-        EWaitSomeTime,
-        EAllDone
-        };
-    _LIT( KWarningNoteText, "This is warning note" );
-    _LIT( KChangedWarningNoteText, "Changed warning note text" );
-
-    TInt result = CreateSifUi();
-    for( TInt step = EFirstStep; step < EAllDone && result == KErrNone; ++step )
-        {
-        TestModuleIf().Printf( 1, KTestName, KStepFormat, step );
-        switch( step )
-            {
-            case EFirstStep:
-                TRAP( result, iSifUi->DisplayInformationNoteL( KWarningNoteText ) );
-                break;
-            case EChangeText:
-                User::After( KOneSecond );
-                TRAP( result, iSifUi->DisplayInformationNoteL( KChangedWarningNoteText ) );
-                break;
-            case EWaitSomeTime:
-                User::After( KOneSecond );
-                break;
-            default:
-                User::Leave( KErrGeneral );
-                break;
-            }
-        }
-
-    delete iSifUi;
-    iSifUi = NULL;
-
-    SetResult( aResult, result );
 
     TestModuleIf().Printf( 0, KTestName, KExit );
     return KErrNone;
     }
 
 // -----------------------------------------------------------------------------
-// CSifUiTest::ErrorNoteTest()
+// CSifUiTest::MemorySelectionTest()
 // -----------------------------------------------------------------------------
 //
-TInt CSifUiTest::ErrorNoteTest( TTestResult& aResult )
+TInt CSifUiTest::MemorySelectionTest( TTestResult& aResult )
     {
-    _LIT( KTestName, "ErrorNoteTest" );
+    TRAPD( result, DoMemorySelectionTestL( aResult ) );
+    SetResult( aResult, result );
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CSifUiTest::DoMemorySelectionTestL()
+// -----------------------------------------------------------------------------
+//
+void CSifUiTest::DoMemorySelectionTestL( TTestResult& aResult )
+    {
+    _LIT( KTestName, "MemorySelectionTest" );
     TestModuleIf().Printf( 0, KTestName, KEnter );
 
     enum TTestSteps
         {
         EFirstStep,
-        EChangeText,
-        EAllDone
-        };
-    _LIT( KErrorNoteText, "This is error note" );
-    _LIT( KChangedErrorNoteText, "Changed error note text" );
-
-    TInt result = CreateSifUi();
-    for( TInt step = EFirstStep; step < EAllDone && result == KErrNone; ++step )
-        {
-        TestModuleIf().Printf( 1, KTestName, KStepFormat, step );
-        switch( step )
-            {
-            case EFirstStep:
-                TRAP( result, iSifUi->DisplayErrorNoteL( KErrorNoteText ) );
-                break;
-            case EChangeText:
-                User::After( KOneSecond );
-                TRAP( result, iSifUi->DisplayErrorNoteL( KChangedErrorNoteText ) );
-                break;
-            default:
-                User::Leave( KErrGeneral );
-                break;
-            }
-        }
-
-    delete iSifUi;
-    iSifUi = NULL;
-
-    SetResult( aResult, result );
-
-    TestModuleIf().Printf( 0, KTestName, KExit );
-    return KErrNone;
-    }
-
-// -----------------------------------------------------------------------------
-// CSifUiTest::PermanentNoteTest()
-// -----------------------------------------------------------------------------
-//
-TInt CSifUiTest::PermanentNoteTest( TTestResult& aResult )
-    {
-    _LIT( KTestName, "PermanentNoteTest" );
-    TestModuleIf().Printf( 0, KTestName, KEnter );
-
-    enum TTestSteps
-        {
-        EFirstStep,
-        EDisplayNote,
-        EChangeText,
-        ECloseNote,
-        EDisplayDelayedNote,
-        EChangeDelayedNoteText,
-        ECloseSecondNote,
+        EGetSelectedWhenNotSet,
+        ESetNoDrivesStep,
+        ESetThreeDriveStep,
+        ESetOneDriveStep,
+        EGetSelectedWhenSetButNotAskedStep,
+        ELastStep,
         EAllDone
         };
 
-    _LIT( KPermanentNoteText, "This is permanent note" );
-    _LIT( KChangedNoteText, "Changed permanent note text" );
-    _LIT( KDelayedNoteText, "This is delayed permanent note" );
-    _LIT( KChangedDelayedNoteText, "Changed delayed permanent note text" );
+    CSifUi* sifUi = NULL;
+    RArray<TInt> driveNumbers;
+    CleanupClosePushL( driveNumbers );
+    TInt drive = 0;
+    TInt errorCode = KErrNone;
 
-    TInt result = CreateSifUi();
-    for( TInt step = EFirstStep; step < EAllDone && result == KErrNone; ++step )
+    TInt error = KErrNone;
+    for( TInt step = EFirstStep; step < EAllDone && !error; ++step )
         {
         TestModuleIf().Printf( 1, KTestName, KStepFormat, step );
         switch( step )
             {
             case EFirstStep:
-                TRAP( result, iSifUi->ClosePermanentNote() );
-                break;
-            case EDisplayNote:
-                TRAP( result, iSifUi->DisplayPermanentNoteL( KPermanentNoteText ) );
+                STIF_ASSERT_NULL( sifUi );
+                TRAP( error, sifUi = CSifUi::NewL() );
+                if( !error )
+                    {
+                    CleanupStack::PushL( sifUi );
+                    }
                 break;
-            case EChangeText:
-                User::After( KThreeSeconds );
-                TRAP( result, iSifUi->DisplayPermanentNoteL( KChangedNoteText ) );
+
+            case EGetSelectedWhenNotSet:
+                STIF_ASSERT_NOT_NULL( sifUi );
+                TRAP( error, errorCode = sifUi->SelectedDrive( drive ) );
+                if( error == KErrNone && errorCode == KErrNotFound )
+                    {
+                    error = KErrNone;
+                    }
+                else
+                    {
+                    error = KErrGeneral;
+                    }
                 break;
-            case ECloseNote:
-                TRAP( result, iSifUi->ClosePermanentNote() );
+
+            case ESetNoDrivesStep:
+                STIF_ASSERT_NOT_NULL( sifUi );
+                TRAP( error, sifUi->SetMemorySelectionL( driveNumbers ) );
                 break;
-            case EDisplayDelayedNote:
-                User::After( KThreeSeconds );
-                TRAP( result, iSifUi->DisplayPermanentNoteL( KDelayedNoteText ) );
+
+            case ESetThreeDriveStep:
+                STIF_ASSERT_NOT_NULL( sifUi );
+                driveNumbers.Append( EDriveC );
+                driveNumbers.Append( EDriveE );
+                driveNumbers.Append( EDriveF );
+                TRAP( error, sifUi->SetMemorySelectionL( driveNumbers ) );
+                break;
+
+            case ESetOneDriveStep:
+                STIF_ASSERT_NOT_NULL( sifUi );
+                driveNumbers.Append( EDriveC );
+                TRAP( error, sifUi->SetMemorySelectionL( driveNumbers ) );
                 break;
-            case EChangeDelayedNoteText:
-                User::After( KFiveSeconds );
-                TRAP( result, iSifUi->DisplayPermanentNoteL( KChangedDelayedNoteText ) );
+
+            case EGetSelectedWhenSetButNotAskedStep:
+                STIF_ASSERT_NOT_NULL( sifUi );
+                TRAP( error, errorCode = sifUi->SelectedDrive( drive ) );
+                if( error == KErrNone && errorCode == KErrNotFound )
+                    {
+                    error = KErrNone;
+                    }
+                else
+                    {
+                    error = KErrGeneral;
+                    }
                 break;
-            case ECloseSecondNote:
-                User::After( KOneSecond );
-                TRAP( result, iSifUi->ClosePermanentNote() );
+
+            case ELastStep:
+                STIF_ASSERT_NOT_NULL( sifUi );
+                CleanupStack::PopAndDestroy( sifUi );
+                sifUi = NULL;
                 break;
+
             default:
                 User::Leave( KErrGeneral );
                 break;
             }
         }
+    User::LeaveIfError( error );
 
-    delete iSifUi;
-    iSifUi = NULL;
+    CleanupStack::PopAndDestroy( &driveNumbers );
+    TestModuleIf().Printf( 0, KTestName, KExit );
+    }
 
+// -----------------------------------------------------------------------------
+// CSifUiTest::CertificateInfoTest()
+// -----------------------------------------------------------------------------
+//
+TInt CSifUiTest::CertificateInfoTest( TTestResult& aResult )
+    {
+    TRAPD( result, DoCertificateInfoTestL( aResult ) );
     SetResult( aResult, result );
-
-    TestModuleIf().Printf( 0, KTestName, KExit );
     return KErrNone;
     }
 
 // -----------------------------------------------------------------------------
-// CSifUiTest::ProgressNoteTest()
+// CSifUiTest::DoCertificateInfoTestL()
 // -----------------------------------------------------------------------------
 //
-TInt CSifUiTest::ProgressNoteTest( TTestResult& aResult )
+void CSifUiTest::DoCertificateInfoTestL( TTestResult& aResult )
     {
-    _LIT( KTestName, "ProgressNoteTest" );
+    _LIT( KTestName, "CertificateInfoTest" );
     TestModuleIf().Printf( 0, KTestName, KEnter );
 
     enum TTestSteps
         {
-        EDisplayProgressNote,
-        EIncreaseBar1,
-        EIncreaseBar2,
-        EChangeProgressText,
-        EIncreaseBar3,
-        EIncreaseBar4,
-        EIncreaseBar5,
-        ECloseProgressNote,
-        EDelayedProgressNote,
+        EFirstStep,
+        ESetNoCertificates,
+        EReadAndSetCertificate,
+        ELastStep,
         EAllDone
         };
-    _LIT( KProgressNoteText, "This is progress note" );
-    _LIT( KChangedProgressNoteText, "Changed progress note text" );
 
-    const TInt KProgressBarFinalValue = 6;
-    TInt progressBarValue = -1;
-    TRequestStatus reqStatus;       // ignored now, not monitoring if user cancels the note
-    TRequestStatus reqUpdate;
-    TInt result = CreateSifUi();
-    for( TInt step = EDisplayProgressNote; step < EAllDone && result == KErrNone; ++step )
+    CSifUi* sifUi = NULL;
+    RPointerArray<CSifUiCertificateInfo> certificates;
+    CleanupResetAndDestroyPushL( certificates );
+
+    TInt error = KErrNone;
+    for( TInt step = EFirstStep; step < EAllDone && !error; ++step )
         {
         TestModuleIf().Printf( 1, KTestName, KStepFormat, step );
         switch( step )
             {
-            case EDisplayProgressNote:
-                TRAP( result, iSifUi->DisplayProgressNoteL( KProgressNoteText, reqStatus ) );
-                if( result == KErrNone )
+            case EFirstStep:
+                STIF_ASSERT_NULL( sifUi );
+                TRAP( error, sifUi = CSifUi::NewL() );
+                if( !error )
                     {
-                    TRAP( result, iSifUi->SetProgressNoteFinalValueL( KProgressBarFinalValue ) );
+                    CleanupStack::PushL( sifUi );
                     }
                 break;
 
-            case EIncreaseBar1:
-            case EIncreaseBar2:
-            case EIncreaseBar3:
-            case EIncreaseBar4:
-            case EIncreaseBar5:
-                User::After( KOneSecond );
-                TRAP( result, iSifUi->UpdateProgressNoteValueL( progressBarValue ) );
-                progressBarValue += 2;
+            case ESetNoCertificates:
+                STIF_ASSERT_NOT_NULL( sifUi );
+                TRAP( error, sifUi->SetCertificateInfoL( certificates ) );
                 break;
 
-            case EChangeProgressText:
-                User::After( KOneSecond );
-                TRAP( result, iSifUi->DisplayProgressNoteL( KChangedProgressNoteText, reqUpdate ) );
-                if( result == KErrNone )
-                    {
-                    User::WaitForRequest( reqUpdate );
-                    result = reqUpdate.Int();
-                    }
+            case EReadAndSetCertificate:
+                {
+                STIF_ASSERT_NOT_NULL( sifUi );
+                CX509Certificate* x509cert = ReadCertificateL( KX509TestCertFile );
+                CleanupStack::PushL( x509cert );
+
+                Swi::CCertificateInfo* swiCert = Swi::CCertificateInfo::NewLC( *x509cert );
+                CSifUiCertificateInfo* testCert = CSifUiCertificateInfo::NewLC( *swiCert );
+
+                CBufBase* buf = CBufFlat::NewL( KBufferGranularity );
+                CleanupStack::PushL( buf );
+                RBufWriteStream writeStream( *buf );
+                CleanupClosePushL( writeStream );
+                STIF_ASSERT_TRUE( buf->Size() == 0 );
+                testCert->ExternalizeL( writeStream );
+                STIF_ASSERT_TRUE( buf->Size() > 0 );
+                CleanupStack::PopAndDestroy( 2, buf );      // writeStream, buf
+
+                CleanupStack::PopAndDestroy( testCert );
+                testCert = NULL;
+
+                testCert = CSifUiCertificateInfo::NewL( *swiCert );
+                CleanupStack::PushL( testCert );
+                certificates.AppendL( testCert );
+                CleanupStack::Pop( testCert );
+                TRAP( error, sifUi->SetCertificateInfoL( certificates ) );
+
+                CleanupStack::PopAndDestroy( 2, x509cert );     // swiCert, x509cert
+                }
                 break;
 
-            case ECloseProgressNote:
-                User::After( KOneSecond );
-                TRAP( result, iSifUi->CloseProgressNoteL() );
-                if( result == KErrNone )
-                    {
-                    User::WaitForRequest( reqStatus );
-                    result = reqStatus.Int();
-                    }
-                break;
-
-            case EDelayedProgressNote:
-                TRAP( result, iSifUi->DisplayProgressNoteL( KProgressNoteText, reqStatus ) );
-                if( result == KErrNone )
-                    {
-                    User::After( KHalfSecond );
-                    TRAP( result, iSifUi->CloseProgressNoteL() );
-                    }
+            case ELastStep:
+                STIF_ASSERT_NOT_NULL( sifUi );
+                CleanupStack::PopAndDestroy( sifUi );
+                sifUi = NULL;
                 break;
 
             default:
@@ -446,141 +368,274 @@
                 break;
             }
         }
+    User::LeaveIfError( error );
 
-    delete iSifUi;
-    iSifUi = NULL;
+    CleanupStack::PopAndDestroy( &certificates );
+    TestModuleIf().Printf( 0, KTestName, KExit );
+    }
 
+// -----------------------------------------------------------------------------
+// CSifUiTest::AppInfoTest()
+// -----------------------------------------------------------------------------
+//
+TInt CSifUiTest::AppInfoTest( TTestResult& aResult )
+    {
+    TRAPD( result, DoAppInfoTestL( aResult ) );
     SetResult( aResult, result );
-
-    TestModuleIf().Printf( 0, KTestName, KExit );
     return KErrNone;
     }
 
 // -----------------------------------------------------------------------------
-// CSifUiTest::WaitNoteTest()
+// CSifUiTest::DoAppInfoTestL()
 // -----------------------------------------------------------------------------
 //
-TInt CSifUiTest::WaitNoteTest( TTestResult& aResult )
+void CSifUiTest::DoAppInfoTestL( TTestResult& aResult )
     {
-    _LIT( KTestName, "WaitNoteTest" );
+    _LIT( KTestName, "AppInfoTest" );
     TestModuleIf().Printf( 0, KTestName, KEnter );
 
     enum TTestSteps
         {
-        ECloseWaitNoteBeforeItsOpened,
-        EDisplayWaitNote,
-        EChangeDisplayedText,
-        ECloseFirstWaitNote,
-        EDisplayDelayedWaitNote,
-        EChangeDelayedWaitNoteText,
-        ECloseWaitNote,
+        EFirstStep,
+        EAppInfoTests,
+        EAppInfoIconTest,
+        EShowConfirmation,
+        EShowError,
+        ELastStep,
         EAllDone
         };
-    _LIT( KWaitNoteText, "This is wait note" );
-    _LIT( KChangedWaitNoteText, "Changed wait note text" );
-    _LIT( KDelayedWaitNoteText, "This is delayed wait note" );
-    _LIT( KChangedDelayedWaitNoteText, "Changed delayed wait note text" );
+
+    CSifUi* sifUi = NULL;
 
-    TInt result = CreateSifUi();
-    TRequestStatus reqStatus;       // ignored now, not monitoring if user cancels the note
-    for( TInt step = EDisplayWaitNote; step < EAllDone && result == KErrNone; ++step )
+    _LIT( KAppName, "TestApplication" );
+    _LIT( KAppVendor, "TestSupplier" );
+    const TVersion KAppVersion( 1, 2, 3 );
+    const TInt KAppSize = 0x1234;
+
+    TInt error = KErrNone;
+    for( TInt step = EFirstStep; step < EAllDone && !error; ++step )
         {
         TestModuleIf().Printf( 1, KTestName, KStepFormat, step );
         switch( step )
             {
-            case ECloseWaitNoteBeforeItsOpened:
-                TRAP( result, iSifUi->CloseWaitNote() );
-                break;
-            case EDisplayWaitNote:
-                TRAP( result, iSifUi->DisplayWaitNoteL( KWaitNoteText, reqStatus ) );
-                if( result == KErrNone && reqStatus != KRequestPending )
+            case EFirstStep:
+                STIF_ASSERT_NULL( sifUi );
+                TRAP( error, sifUi = CSifUi::NewL() );
+                if( !error )
                     {
-                    User::WaitForRequest( reqStatus );
-                    result = reqStatus.Int();
-                    }
-                break;
-            case EChangeDisplayedText:
-                User::After( KThreeSeconds );
-                TRAP( result, iSifUi->DisplayWaitNoteL( KChangedWaitNoteText, reqStatus ) );
-                if( result == KErrNone && reqStatus != KRequestPending )
-                    {
-                    User::WaitForRequest( reqStatus );
-                    result = reqStatus.Int();
-                    }
-                break;
-            case ECloseFirstWaitNote:
-                TRAP( result, iSifUi->CloseWaitNote() );
-                if( result == KErrNone )
-                    {
-                    User::WaitForRequest( reqStatus );
-                    result = reqStatus.Int();
+                    CleanupStack::PushL( sifUi );
                     }
                 break;
-            case EDisplayDelayedWaitNote:
-                User::After( KOneSecond );
-                TRAP( result, iSifUi->DisplayWaitNoteL( KDelayedWaitNoteText, reqStatus ) );
-                if( result == KErrNone && reqStatus != KRequestPending )
-                    {
-                    User::WaitForRequest( reqStatus );
-                    result = reqStatus.Int();
-                    }
+
+            case EAppInfoTests:
+                {
+                STIF_ASSERT_NOT_NULL( sifUi );
+                CSifUiAppInfo* appInfo = NULL;
+                appInfo = CSifUiAppInfo::NewLC( KAppName, KAppVendor, KAppVersion, KAppSize, NULL );
+
+                STIF_ASSERT_TRUE( appInfo->Name().Compare( KAppName ) == 0 );
+                STIF_ASSERT_TRUE( appInfo->Vendor().Compare( KAppVendor ) == 0 );
+
+                STIF_ASSERT_TRUE( appInfo->Version().iMajor == KAppVersion.iMajor );
+                STIF_ASSERT_TRUE( appInfo->Version().iMinor == KAppVersion.iMinor );
+                STIF_ASSERT_TRUE( appInfo->Version().iBuild == KAppVersion.iBuild );
+
+                STIF_ASSERT_TRUE( appInfo->Size() == KAppSize );
+                STIF_ASSERT_TRUE( appInfo->Bitmaps() == NULL );
+
+                CBufBase* buf = CBufFlat::NewL( KBufferGranularity );
+                CleanupStack::PushL( buf );
+                RBufWriteStream writeStream( *buf );
+                CleanupClosePushL( writeStream );
+                STIF_ASSERT_TRUE( buf->Size() == 0 );
+                appInfo->ExternalizeL( writeStream );
+                STIF_ASSERT_TRUE( buf->Size() > 0 );
+                CleanupStack::PopAndDestroy( &writeStream );
+                CleanupStack::PopAndDestroy( buf );
+
+                CleanupStack::PopAndDestroy( appInfo );
+                }
                 break;
-            case EChangeDelayedWaitNoteText:
-                User::After( KThreeSeconds );
-                TRAP( result, iSifUi->DisplayWaitNoteL( KChangedDelayedWaitNoteText, reqStatus ) );
-                if( result == KErrNone && reqStatus != KRequestPending )
+
+            case EAppInfoIconTest:
+                {
+                STIF_ASSERT_NOT_NULL( sifUi );
+                CSifUiAppInfo* appInfo = NULL;
+
+                // TODO: proper icon test needed
+                CApaMaskedBitmap* appBitmap = NULL;
+                appInfo = CSifUiAppInfo::NewLC( KAppName, KAppVendor, KAppVersion, KAppSize, appBitmap );
+
+                CBufBase* buf = CBufFlat::NewL( KBufferGranularity );
+                CleanupStack::PushL( buf );
+                RBufWriteStream writeStream( *buf );
+                CleanupClosePushL( writeStream );
+                STIF_ASSERT_TRUE( buf->Size() == 0 );
+                appInfo->ExternalizeL( writeStream );
+                STIF_ASSERT_TRUE( buf->Size() > 0 );
+                CleanupStack::PopAndDestroy( &writeStream );
+                CleanupStack::PopAndDestroy( buf );
+
+                CleanupStack::PopAndDestroy( appInfo );
+                }
+                break;
+
+            case EShowConfirmation:
+                {
+                STIF_ASSERT_NOT_NULL( sifUi );
+                CSifUiAppInfo* appInfo = NULL;
+                appInfo = CSifUiAppInfo::NewL( KAppName, KAppVendor, KAppVersion, KAppSize, NULL );
+                CleanupStack::PushL( appInfo );
+
+                CBufBase* buf = CBufFlat::NewL( KBufferGranularity );
+                CleanupStack::PushL( buf );
+                RBufWriteStream writeStream( *buf );
+                CleanupClosePushL( writeStream );
+                STIF_ASSERT_TRUE( buf->Size() == 0 );
+                appInfo->ExternalizeL( writeStream );
+                STIF_ASSERT_TRUE( buf->Size() > 0 );
+                CleanupStack::PopAndDestroy( &writeStream );
+                CleanupStack::PopAndDestroy( buf );
+
+                TBool result = EFalse;
+                // TODO: how to close opened dialog automatically?
+                TRAP( error, result = sifUi->ShowConfirmationL( *appInfo ) );
+                if( result )
                     {
-                    User::WaitForRequest( reqStatus );
-                    result = reqStatus.Int();
+                    _LIT( KAccepted, "Accepted" );
+                    TestModuleIf().Printf( 1, KTestName, KAccepted );
                     }
+                else
+                    {
+                    _LIT( KCancelled, "Cancelled" );
+                    TestModuleIf().Printf( 1, KTestName, KCancelled );
+                    }
+                CleanupStack::PopAndDestroy( appInfo );
+                }
                 break;
-            case ECloseWaitNote:
-                User::After( KOneSecond );
-                TRAP( result, iSifUi->CloseWaitNote() );
-                if( result == KErrNone )
-                    {
-                    User::WaitForRequest( reqStatus );
-                    result = reqStatus.Int();
-                    }
+
+            case EShowError:
+                {
+                STIF_ASSERT_NOT_NULL( sifUi );
+                _LIT( KErrorMessage, "Test error" );
+                _LIT( KErrorDetails, "Test error details" );
+                // TODO: how to close opened dialog automatically?
+                TRAP( error, sifUi->ShowFailedL( KErrNotFound, KErrorMessage, KErrorDetails ) );
+                }
                 break;
+
+            case ELastStep:
+                STIF_ASSERT_NOT_NULL( sifUi );
+                CleanupStack::PopAndDestroy( sifUi );
+                sifUi = NULL;
+                break;
+
             default:
                 User::Leave( KErrGeneral );
                 break;
             }
         }
-
-    delete iSifUi;
-    iSifUi = NULL;
-
-    SetResult( aResult, result );
+    User::LeaveIfError( error );
 
     TestModuleIf().Printf( 0, KTestName, KExit );
+    }
+
+// -----------------------------------------------------------------------------
+// CSifUiTest::ProgressDialogsTest()
+// -----------------------------------------------------------------------------
+//
+TInt CSifUiTest::ProgressDialogsTest( TTestResult& aResult )
+    {
+    TRAPD( result, DoProgressDialogsTestL( aResult ) );
+    SetResult( aResult, result );
     return KErrNone;
     }
 
 // -----------------------------------------------------------------------------
-// CSifUiTest::LaunchHelpTest()
+// CSifUiTest::DoProgressDialogsTestL()
 // -----------------------------------------------------------------------------
 //
-TInt CSifUiTest::LaunchHelpTest( TTestResult& aResult )
+void CSifUiTest::DoProgressDialogsTestL( TTestResult& aResult )
     {
-    _LIT( KTestName, "LaunchHelpTest" );
+    _LIT( KTestName, "ProgressDlgsTest" );
     TestModuleIf().Printf( 0, KTestName, KEnter );
 
-    TInt result = CreateSifUi();
-    if( result == KErrNone )
+    enum TTestSteps
         {
-        AsyncWaitAndSendKeyEventL( KFiveSeconds, KRightSoftkey );
+        EFirstStep,
+        EShowProgress,
+        EUpdateProgress,
+        EShowComplete,
+        ELastStep,
+        EAllDone
+        };
+
+    CSifUi* sifUi = NULL;
+
+    _LIT( KAppName, "NoitaCilppa" );
+    _LIT( KAppVendor, "Rodnev" );
+    const TVersion KAppVersion( 3, 2, 1 );
+    const TInt KAppSize = 0x4321;
+
+    const TInt KMaxProgress = 150;
+    const TInt KUpdateStarts = -10;
+    const TInt KUpdateEnds = KMaxProgress + 10;
+    const TInt KUpdateStep = 4;
+
+    TInt error = KErrNone;
+    for( TInt step = EFirstStep; step < EAllDone && !error; ++step )
+        {
+        TestModuleIf().Printf( 1, KTestName, KStepFormat, step );
+        switch( step )
+            {
+            case EFirstStep:
+                STIF_ASSERT_NULL( sifUi );
+                TRAP( error, sifUi = CSifUi::NewL() );
+                if( !error )
+                    {
+                    CleanupStack::PushL( sifUi );
+                    }
+                break;
 
-        _LIT( KAM_HLP_INSTALL_CAPAB, "AM_HLP_INSTALL_CAPAB" );
-        TRAP( result, iSifUi->LaunchHelpL( KAM_HLP_INSTALL_CAPAB ) );
+            case EShowProgress:
+                {
+                STIF_ASSERT_NOT_NULL( sifUi );
+                CSifUiAppInfo* appInfo = NULL;
+                appInfo = CSifUiAppInfo::NewL( KAppName, KAppVendor, KAppVersion, KAppSize, NULL );
+                CleanupStack::PushL( appInfo );
+                TRAP( error, sifUi->ShowProgressL( *appInfo, KMaxProgress ) );
+                CleanupStack::PopAndDestroy( appInfo );
+                }
+                break;
 
-        delete iSifUi;
-        iSifUi = NULL;
+            case EUpdateProgress:
+                {
+                STIF_ASSERT_NOT_NULL( sifUi );
+                for( TInt i = KUpdateStarts; i < KUpdateEnds; i += KUpdateStep )
+                    {
+                    TRAP( error, sifUi->IncreaseProgressBarValueL( KUpdateStep ) );
+                    }
+                }
+                break;
+
+            case EShowComplete:
+                STIF_ASSERT_NOT_NULL( sifUi );
+                TRAP( error, sifUi->ShowCompleteL() );
+                break;
+
+            case ELastStep:
+                STIF_ASSERT_NOT_NULL( sifUi );
+                CleanupStack::PopAndDestroy( sifUi );
+                sifUi = NULL;
+                break;
+
+            default:
+                User::Leave( KErrGeneral );
+                break;
+            }
         }
-    SetResult( aResult, result );
+    User::LeaveIfError( error );
 
     TestModuleIf().Printf( 0, KTestName, KExit );
-    return KErrNone;
     }
 
--- a/appinstaller/AppinstUi/Daemon/Inc/DialogWrapper.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/Daemon/Inc/DialogWrapper.h	Thu Jul 22 16:35:01 2010 +0100
@@ -22,17 +22,20 @@
 //  INCLUDES
 #include <e32base.h>
 #include <f32file.h>
-
-// TODO probably removed in 10.1
-// #include <barsc.h>
 #include "dialogwatcher.h"
 
 class CHbDeviceProgressDialogSymbian;
 class CHbDeviceNotificationDialogSymbian;
+class CHbIndicatorSymbian;
 
 namespace Swi
 {
+// Define uninstaller mode for universal indicator.
+const TInt KSWIDaemonUninstallerMode = -1; 
+// Define installer mode for universal indicator.
+const TInt KSWIDaemonInstallerMode = 0;
 
+class CDialogTimer;
 /**
 * This class wraps functions for showing some global dialogs.
 * 
@@ -75,7 +78,7 @@
         * Cancel global waiting note (after installing).
         * @since 3.0
         */
-        void CancelWaitingNoteL();
+        void CancelWaitingNote();
         
         /**
          * Sets dialog control flag.
@@ -89,6 +92,40 @@
           * @since 3.2         
           */              
         void ShowWaitingNoteForUninstallerL();
+        
+        /**
+         * Cancel global waiting note (after installing).
+         * @since 10.1
+         */        
+        void CancelWaitingNoteForUninstaller();
+ 
+        /**
+         * Show universal indicator for install or uninstall process.
+         * @since 10.1          
+         */ 
+        void ActivateIndicatorL( TReal aProcessValue );
+        
+        /**
+         * Set mode for universal indicator plugin. 
+         * @since 10.1 
+         * @parm aMode Flag for switchig to uninstaller mode. By default
+         * plugin works as installer mode.       
+         */        
+        void SetModeToIndicatorL( TInt aMode );
+        
+        /**
+         * Close universal indicator for install or uninstall process.
+         * @since 10.1         
+         */        
+        void CancelIndicatorL();
+ 
+//TODO: remove, it seems that this is no needed after wk18.        
+        /**
+         * Check system state. This is needed to know, can Daemon show UI
+         * dialogs.
+         * @since 10.1         
+         */       
+        //void CheckSystemState();
 
     private:
 
@@ -117,10 +154,83 @@
         TInt iDisableAllNotes;
         CDialogWatcher* iWatcher;
         
-        TBool iIsProgressDialog;
+        TBool iIsProgressDialog; // Defines that dialog is constructed.  
         CHbDeviceProgressDialogSymbian* iHbProgressDialog;
-        TBool iIsUninstallerProgressDialog;                    
-        CHbDeviceProgressDialogSymbian* iHbProgressDialogForUninstaller;                
+        TBool iIsUninstallerProgressDialog; // Defines that dialog is constructed.                   
+        CHbDeviceProgressDialogSymbian* iHbProgressDialogForUninstaller;
+        TBool iIsIndicator; // Defines that indicator is constructed.
+        CHbIndicatorSymbian* iHbIndicator;  // Univeral indicator.
+        CDialogTimer* iTimer;   // Timer for closing procress dialog.
+        // Defines that dialog has used the time interval and can not be shown.
+        TBool iTimeOffDisableProgress;         
+    };
+
+/**
+* Helper class for closing the progress dialogs shown by 
+* the DialogWrapper class.
+* 
+* @since 10.1 
+*/
+class CDialogTimer : public CActive
+    {
+    public:
+    
+        /**
+        * Destructor.
+        */
+        virtual ~CDialogTimer();
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CDialogTimer* NewL( CDialogWrapper* aDialog );
+        
+        /**
+         * Function sets time interva for progress dialog.
+         * After this time interval the progress dialog is closed.
+         * @param aRefresTime Time in microseconds.
+         */          
+         void StartDialogTimer( TUint32 aRefreshTime );
+        
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CDialogTimer();
+
+        /**
+        * 2nd phase constructor. 
+        * @param 
+        */
+        void ConstructL( CDialogWrapper* aDialog );
+        
+        /**
+         * Function sets time.
+         * @param aRefresTime Time in microseconds.
+         */          
+         void TimerSet( TUint32 aRefreshTime );
+      
+        /**
+        * 
+        */        
+        void RunL();
+
+        /**
+        * Cancel timer.
+        */        
+        void DoCancel();
+        
+        /**
+        * Handles a leave occurring in the request completion 
+        * event handler RunL.
+        */             
+        TInt RunError( TInt aError );
+
+    private:
+
+        RTimer          iRTimer;     // Timer.   
+        CDialogWrapper* iDialog;     // Dialog class.                     
     };
 }
 
--- a/appinstaller/AppinstUi/Daemon/Inc/daemonbehaviour.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/Daemon/Inc/daemonbehaviour.h	Thu Jul 22 16:35:01 2010 +0100
@@ -20,6 +20,8 @@
 
 #include <e32base.h>
 #include <f32file.h>
+#include <usif/scr/scr.h>
+#include <usif/scr/screntries.h>
 
 #include "daemon.h"
 #include "daemoninstaller.h"
@@ -119,8 +121,13 @@
     
     
     void UpdateComponentStatusL( TChangeType aChangeType, TInt aDrive );
-
-          
+    
+    void UpdateStatusL( Usif::RSoftwareComponentRegistry& iScrServer,
+                        Usif::TComponentId componentId,
+                        TChangeType aChangeType,
+                        TInt aTargetDrive,
+                        RArray<TApaAppUpdateInfo>& iAppInfoArray );
+    
 private:
     
     RFs iFs;        
@@ -131,13 +138,10 @@
     // Has MediaProcessingStart already been called?
     TBool iStartNotified;
     TInt iDrive;
-  
-#ifdef RD_MULTIPLE_DRIVE 
     // Contains inserted drives.
-    RArray<TInt> iDriveArray;
-#endif   
+    RArray<TInt> iDriveArray;   
     // General program status. Note this do not affect to plug-in.
-    TInt iGeneralProcessStatus; //For uninstaller
+    TInt iGeneralProcessStatus; //For uninstaller   
     };
 
 } // namespace Swi
--- a/appinstaller/AppinstUi/Daemon/Inc/daemoninstaller.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/Daemon/Inc/daemoninstaller.h	Thu Jul 22 16:35:01 2010 +0100
@@ -176,7 +176,13 @@
         /**
         * Indicates if this package is valid.
         */
-        TBool IsValidPackageL();      
+        TBool IsValidPackageL(); 
+        
+        /**
+         * Calculate precent value for universal indicator.
+         * This precent value show how many packages has been installed.
+         */      
+        void CalcPercentValue();
         	          
 	
     private:
@@ -215,6 +221,8 @@
         // File handle for USIF.
         RFile iSisFileHandle;
         TBool iFileOpen;
+        //CDialogTimer* iDialogTimer; 
+        TReal32 iPercentValue;
     };		
 }
 
--- a/appinstaller/AppinstUi/Daemon/Inc/uninstaller.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/Daemon/Inc/uninstaller.h	Thu Jul 22 16:35:01 2010 +0100
@@ -137,6 +137,12 @@
          * @since 3.2 
          */       
         void ExitUninstaller();
+        
+        /**
+          * Calculate precent value for universal indicator.
+          * This precent value show how many packages has been uninstalled.
+          */              
+        void CalcPercentValue();
                                              
     private:
                 
@@ -163,7 +169,9 @@
         // Uninstaller dialog.        
         CDialogWrapper* iDialogs;
         // Descriptor for mime type.
-        HBufC* iMime;                 
+        HBufC* iMime;  
+        // Percent value for universal indicator.
+        TReal iPercentValue;
     };      
 
 } //namespace Swi
--- a/appinstaller/AppinstUi/Daemon/Src/DialogWrapper.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/Daemon/Src/DialogWrapper.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -20,13 +20,24 @@
 // INCLUDE FILES
 #include <hb/hbwidgets/hbdeviceprogressdialogsymbian.h>
 #include <hb/hbwidgets/hbdevicenotificationdialogsymbian.h>
+#include <hb/hbcore/hbindicatorsymbian.h>
+#include <hb/hbcore/hbsymbianvariant.h>
+//#include <ssm/ssmstateawaresession.h> // For system state
+//#include <ssm/ssmstate.h>
+//#include <ssm/ssmdomaindefs.h> // KUIFrameworkDomain
 #include "DialogWrapper.h"
 #include "SWInstDebug.h"
 
 using namespace Swi;
 
+// Time interval for progress dialog.
+const TUint KDialogTimeOut = 5000000;
+// Indicator type
+_LIT( KIndicatorTypeSWIDaemon, 
+        "com.nokia.sisxsilentinstall.indicatorplugin/1.0" );
+
 //TODO: remove when HB dialogs do not crash in HW/WINS
-#define _SWIDAEMON_DISABLE_NOTES_
+//#define _SWIDAEMON_DISABLE_NOTES_
 
 // ============================ MEMBER FUNCTIONS ===============================
 
@@ -52,12 +63,13 @@
     iHbProgressDialog = NULL;
     iIsUninstallerProgressDialog = EFalse;
     iHbProgressDialogForUninstaller = NULL;
-                  
+    iIsIndicator = EFalse;
+    iHbIndicator = NULL;                        
     // By default Daemon will show all notes.
-    iDisableAllNotes = EFalse;
-    
+    iDisableAllNotes = EFalse;    
+    iTimeOffDisableProgress = EFalse;    
     // Create watcher AO for PS Key.
-    iWatcher = CDialogWatcher::NewL( this );   
+    iWatcher = CDialogWatcher::NewL( this );              
     // Get current PS Key 
     TInt err = iWatcher->GetPSKeyForUI( iDisableAllNotes );
     if ( err )
@@ -66,7 +78,9 @@
         iDisableAllNotes = ETrue;
         }
     // Start AO
-    iWatcher->StartWatcher();
+    iWatcher->StartWatcher();    
+    // Create dialog timer for progress dialog.
+    iTimer = CDialogTimer::NewL( this );
     }
 
 // -----------------------------------------------------------------------------
@@ -90,13 +104,34 @@
 //    
 CDialogWrapper::~CDialogWrapper()
     {
+    FLOG( _L("Daemon: CDialogWrapper::~CDialogWrapper") );
+    delete iTimer;
+    
+    // If installer's RunL leaves make sure that dialogs are closed.
+    if ( iIsProgressDialog && iHbProgressDialog )
+            {
+            iHbProgressDialog->Close();
+            }    
     delete iHbProgressDialog;
-    delete iHbProgressDialogForUninstaller;                          
+    
+    // If uninstaller's RunL leaves make sure that dialogs are closed.
+    if ( iIsUninstallerProgressDialog && iHbProgressDialogForUninstaller )
+            {
+            iHbProgressDialogForUninstaller->Close();
+            }    
+    delete iHbProgressDialogForUninstaller;
+    
+    if ( iIsIndicator && iHbIndicator )
+            {             
+            iHbIndicator->Deactivate( KIndicatorTypeSWIDaemon );                                     
+            }
+    delete iHbIndicator;
+    
     if ( iWatcher )
         {
-        iWatcher->StopWatcher();
-        delete iWatcher;
-        }
+        iWatcher->StopWatcher();        
+        }       
+    delete iWatcher;
     }
 
 // -----------------------------------------------------------------------------
@@ -108,19 +143,19 @@
 void CDialogWrapper::ShowUntrustedResultL()
     {
     FLOG( _L("Daemon: CDialogWrapper::ShowUntrustedResultL") );
-
+        
 #ifdef _SWIDAEMON_DISABLE_NOTES_
     FLOG( _L("Daemon: CDialogWrapper: iDisableAllNotes = ETrue") );
     iDisableAllNotes = ETrue;
-#endif      
-      
+#endif                
+    
     // Let watcher to know that waiting note is canceled.
     iWatcher->CancelNoteRequest();            
         
     // Inform watcher that we have request to show note. 
-    iWatcher->CancelNoteRequest();   
-    
-    if ( iDisableAllNotes == EFalse )
+    iWatcher->CancelNoteRequest(); 
+            
+    if ( !iDisableAllNotes  )
         {    
         CHbDeviceNotificationDialogSymbian* notificationDialog = 
                 CHbDeviceNotificationDialogSymbian::NewL( NULL );
@@ -131,9 +166,7 @@
         _LIT( KTempIconText,"note_info");
         _LIT( KTempTextTitle,"SW Silent Installer" );
         _LIT( KTempTextForErrorMessage,"Untrusted software was found." ); 
-                     
-        //notificationDialog->SetTimeout( KHbLongNotificationDialogTimeout );        
-        
+                                         
         notificationDialog->NotificationL( KTempIconText, 
                                            KTempTextTitle , 
                                            KTempTextForErrorMessage );
@@ -159,8 +192,8 @@
     
     // Inform watcher that we have request to show note. 
     iWatcher->CancelNoteRequest();   
-    
-    if ( iDisableAllNotes == EFalse )
+            
+    if ( !iDisableAllNotes )
         {    
         CHbDeviceNotificationDialogSymbian* notificationDialog = 
                 CHbDeviceNotificationDialogSymbian::NewL( NULL );
@@ -171,9 +204,7 @@
         _LIT( KTempIconText,"note_info");
         _LIT( KTempTextTitle,"SW Silent Installer" );
         _LIT( KTempTextForErrorMessage,"Installation was not completed." ); 
-                   
-        //notificationDialog->SetTimeout( KHbLongNotificationDialogTimeout );        
-        
+                                        
         notificationDialog->NotificationL( KTempIconText, 
                                            KTempTextTitle , 
                                            KTempTextForErrorMessage );
@@ -191,26 +222,32 @@
 void CDialogWrapper::ShowWaitingNoteL()
 	{
     FLOG( _L("Daemon: CDialogWrapper::ShowWaitingNoteL") );
-    
+           
 #ifdef _SWIDAEMON_DISABLE_NOTES_
     FLOG( _L("Daemon: CDialogWrapper: iDisableAllNotes = ETrue") );
     iDisableAllNotes = ETrue;
 #endif
     
-    if ( iDisableAllNotes == EFalse )
+    FLOG_1( _L("Daemon: iDisableAllNotes: %d"), iDisableAllNotes );
+    FLOG_1( _L("Daemon: iIsProgressDialog: %d"), iIsProgressDialog );
+    FLOG_1( _L("Daemon: iTimeOffDisableProgress: %d"), iTimeOffDisableProgress );
+            
+    if ( !iDisableAllNotes )
         {          
-        if ( !iIsProgressDialog )
+        if ( !iIsProgressDialog && !iTimeOffDisableProgress )
             {    
             iHbProgressDialog = CHbDeviceProgressDialogSymbian::NewL( 
                                    CHbDeviceProgressDialogSymbian::EWaitDialog, 
                                    NULL );
             iIsProgressDialog = ETrue;
-            
-//TODO get string from log file.            
+                       
             _LIT( KTempTextForProgressDialog,"Installing" );
             
-            iHbProgressDialog->SetTextL( KTempTextForProgressDialog );            
-            iHbProgressDialog->ShowL();
+            iHbProgressDialog->SetTextL( KTempTextForProgressDialog ); 
+            FLOG( _L("Daemon: ShowWaitingNoteL: ShowL") );
+            iHbProgressDialog->ShowL();            
+            FLOG( _L("Daemon: ShowWaitingNoteL: StartDialogTimer") );
+            iTimer->StartDialogTimer( KDialogTimeOut );
             }
         }
     else if ( iDisableAllNotes )
@@ -227,7 +264,7 @@
 // (other items were commented in a header).
 // -----------------------------------------------------------------------------
 // 
-void CDialogWrapper::CancelWaitingNoteL()
+void CDialogWrapper::CancelWaitingNote()
 	{ 
     FLOG( _L("Daemon: CDialogWrapper::CancelWaitingNoteL") );
     
@@ -235,8 +272,11 @@
 		{
 		iHbProgressDialog->Close();
 		delete iHbProgressDialog;
+		//Make sure not to delete twice in destructor.
 		iHbProgressDialog = NULL;
 		iIsProgressDialog = EFalse;
+		
+		iTimeOffDisableProgress = ETrue;
 		}
 		
     // Let watcher to know that waiting note is canceled.
@@ -279,10 +319,13 @@
     iDisableAllNotes = ETrue;
 #endif
     
-    //TODO: All resoureces nees to be rewriten for device dialogs (QT)   
-    if ( iDisableAllNotes == EFalse )
+    FLOG_1( _L("Daemon: iDisableAllNotes: %d"), iDisableAllNotes );
+    FLOG_1( _L("Daemon: iIsProgressDialog: %d"), iIsProgressDialog );
+    FLOG_1( _L("Daemon: iTimeOffDisableProgress: %d"), iTimeOffDisableProgress );
+              
+    if ( !iDisableAllNotes )
         {
-        if ( !iIsUninstallerProgressDialog )
+        if ( !iIsUninstallerProgressDialog && !iTimeOffDisableProgress )
             {    
             iHbProgressDialogForUninstaller = 
                     CHbDeviceProgressDialogSymbian::NewL( 
@@ -291,8 +334,11 @@
             iIsUninstallerProgressDialog = ETrue;
     //TODO get string from log file.            
             _LIT( KTempTextForProgressDialog,"Uninstalling" );            
-            iHbProgressDialogForUninstaller->SetTextL( KTempTextForProgressDialog );            
+            iHbProgressDialogForUninstaller->SetTextL( KTempTextForProgressDialog ); 
+            FLOG( _L("Daemon: ShowWaitingNoteForUninstallerL: ShowL") );
             iHbProgressDialogForUninstaller->ShowL();
+            FLOG( _L("Daemon: ShowWaitingNoteForUninstallerL: StartDialogTimer") );
+            iTimer->StartDialogTimer( KDialogTimeOut );
             }
         }
     else if ( iDisableAllNotes )
@@ -302,4 +348,275 @@
         iWatcher->RequestToDisplayNote();
         }
     }
+
+// -----------------------------------------------------------------------------
+// CDialogWrapper::CancelWaitingNoteL  
+// Cancel global waiting note after installing.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+// 
+void CDialogWrapper::CancelWaitingNoteForUninstaller()
+    { 
+    FLOG( _L("Daemon: CDialogWrapper::CancelWaitingNoteForUninstallerL") );
+    
+    if ( iIsUninstallerProgressDialog )
+        {
+        iHbProgressDialogForUninstaller->Close();
+        delete iHbProgressDialogForUninstaller;
+        //Make sure not to delete twice in destructor.
+        iHbProgressDialogForUninstaller = NULL; 
+        iIsUninstallerProgressDialog = EFalse;
+        
+        iTimeOffDisableProgress = ETrue;
+        }
+        
+    // Let watcher to know that waiting note is canceled.
+    iWatcher->CancelNoteRequest();
+    }
+
+// -----------------------------------------------------------------------------
+// CDialogWrapper::ActivateIndicatorL()  
+// 
+// -----------------------------------------------------------------------------
+// 
+void CDialogWrapper::ActivateIndicatorL( TReal aProcessValue )
+    {  
+    FLOG( _L("Daemon: CDialogWrapper::ActivateIndicatorL") );
+                  
+    if ( !iIsIndicator )
+        {
+        FLOG( _L("Daemon: CHbIndicatorSymbian::NewL") );
+        iHbIndicator = CHbIndicatorSymbian::NewL();
+        iIsIndicator = ETrue;             
+        }
+    
+    TInt value = static_cast<TInt>( aProcessValue );
+    FLOG_1( _L("Daemon: ActivateIndicatorL: precent value: %d"), value );
+          
+    CHbSymbianVariant* hbParam = CHbSymbianVariant::NewL( 
+                                                 &value,
+                                                 CHbSymbianVariant::EInt );    
+    CleanupStack::PushL( hbParam );
+    
+    FLOG( _L("Daemon: ActivateIndicatorL: Activate") );
+    iHbIndicator->Activate( KIndicatorTypeSWIDaemon, hbParam );
+    
+    CleanupStack::PopAndDestroy( hbParam );         
+    }
+
+// -----------------------------------------------------------------------------
+// CDialogWrapper::SetModeToIndicatorL()  
+// 
+// -----------------------------------------------------------------------------
+// 
+void CDialogWrapper::SetModeToIndicatorL( TInt aMode )
+    {  
+    FLOG_1( _L("Daemon: CDialogWrapper::SetModeToIndicatorL: aMode: %d"),
+            aMode );
+                  
+    if ( !iIsIndicator )
+        {
+        FLOG( _L("Daemon: CHbIndicatorSymbian::NewL") );
+        iHbIndicator = CHbIndicatorSymbian::NewL();
+        iIsIndicator = ETrue;        
+        }
+    // Set mode.
+    TReal mode = aMode;    
+    CHbSymbianVariant* hbParam = CHbSymbianVariant::NewL( 
+                                                 &mode,
+                                                 CHbSymbianVariant::EReal );    
+    CleanupStack::PushL( hbParam );    
+    FLOG( _L("Daemon: SetModeToIndicatorL: Activate") );
+    iHbIndicator->Activate( KIndicatorTypeSWIDaemon, hbParam );
+    
+    CleanupStack::PopAndDestroy( hbParam );         
+    }
+
+
+// -----------------------------------------------------------------------------
+// CDialogWrapper::CancelIndicatorL  
+// 
+// -----------------------------------------------------------------------------
+// 
+void CDialogWrapper::CancelIndicatorL()
+    {
+    FLOG( _L("Daemon: CDialogWrapper::CancelIndicatorL") );
+    
+    if ( iIsIndicator )
+        { 
+        FLOG( _L("Daemon: CancelIndicatorL: Deactivate") );
+        iHbIndicator->Deactivate( KIndicatorTypeSWIDaemon );              
+        delete iHbIndicator;
+        iHbIndicator = NULL; //Make sure not to delete twice in destructor.
+        iIsIndicator = EFalse;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CDialogWrapper::CheckSystemState()  
+// 
+// -----------------------------------------------------------------------------
+// 
+/*
+void CDialogWrapper::CheckSystemState()
+    {
+    FLOG( _L("Daemon: CDialogWrapper::CheckSystemState TEST") );
+
+    // We need to check this only if system is not ready to show 
+    // dialogs e.g. UI is not up.
+    if ( !iSystemReadyToShowDialogs )
+        {    
+        RSsmStateAwareSession systemStateSession;
+         
+        TInt err = systemStateSession.Connect( KUIFrameworkDomain3 );
+        FLOG_1( _L("Daemon: systemStateSession.Connect err = %d"), err ); 
+        
+        if ( err == KErrNone )
+            {
+            TSsmState currentState = systemStateSession.State();
+            systemStateSession.Close();
+            
+            FLOG_1( _L("Daemon: System main state = %d"), currentState.MainState() ); 
+            FLOG_1( _L("Daemon: System sub state = %d"), currentState.SubState() ); 
+            
+            
+            if ( currentState.MainState() == ESsmNormal )
+                {
+                iSystemReadyToShowDialogs = ETrue;            
+                }
+            else
+                {
+                iSystemReadyToShowDialogs = EFalse;            
+                }
+            }
+        else
+            {
+            iSystemReadyToShowDialogs = EFalse;
+            }
+        }
+    FLOG_1( _L("Daemon: iSystemReadyToShowDialogs = %d"), 
+            iSystemReadyToShowDialogs );      
+    }
+*/
+
+//-------------------------------------------------------------------------------
+
+// -----------------------------------------------------------------------------
+// CDialogTimer::CDialogTimer()
+//
+// -----------------------------------------------------------------------------
+//
+CDialogTimer::CDialogTimer() : CActive( EPriorityNormal )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CDialogTimer::~CDialogTimer()
+//
+// -----------------------------------------------------------------------------
+//
+CDialogTimer::~CDialogTimer()
+    {
+    FLOG( _L("Daemon: CDialogTimer::~CDialogTimer") );
+    // Cancel the outstanding request. Calls the active object’s
+    // DoCancel function if request is outstanding.
+    Cancel();
+    // Delete RTimer
+    iRTimer.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// CDialogTimer::NewL()
+//
+// -----------------------------------------------------------------------------
+//
+CDialogTimer* CDialogTimer::NewL( CDialogWrapper* aDialog )
+    {
+    CDialogTimer* activeTimer = new (ELeave) CDialogTimer();
+    CleanupStack::PushL( activeTimer );
+    activeTimer->ConstructL( aDialog );
+    CleanupStack::Pop();
+    return activeTimer;
+    }
+
+// -----------------------------------------------------------------------------
+// CDialogTimer::ConstructL()
+//
+// -----------------------------------------------------------------------------
+//
+void CDialogTimer::ConstructL( CDialogWrapper* aDialog )
+    {  
+    if ( aDialog == NULL )
+        {
+        User::Leave( KErrArgument );
+        }  
+    iDialog = aDialog;
+    CActiveScheduler::Add( this );                 
+    iRTimer.CreateLocal();                                     
+    }
+
+// -----------------------------------------------------------------------------
+// CDialogTimer::StartDialogTimer()
+//
+// -----------------------------------------------------------------------------
+//
+void CDialogTimer::StartDialogTimer( TUint32 aRefreshTime )
+    {
+    FLOG( _L("Daemon: CDialogTimer::StartDialogTimer") );
+    // Check first that we do not have request outstanding.
+    if ( !IsActive() )
+        {
+        // Set time interval for dialog.
+        TimerSet( aRefreshTime );     
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CDialogTimer::TimerSet()
+//
+// -----------------------------------------------------------------------------
+//
+void CDialogTimer::TimerSet( TUint32 aRefreshTime )
+    {  
+    FLOG_1( _L("Daemon: CDialogTimer::TimerSet time: %d"), aRefreshTime );
+    // Set timer interval.    
+    iRTimer.After( iStatus, aRefreshTime );               
+    // Set active. Start wait for timer.
+    SetActive();
+    }
+
+// -----------------------------------------------------------------------------
+// CDialogTimer::RunL()
+//
+// -----------------------------------------------------------------------------
+//
+void CDialogTimer::RunL()
+    {
+    FLOG( _L("Daemon: CDialogTimer::RunL: Cancel waiting note") );
+    iDialog->CancelWaitingNote();
+    iDialog->CancelWaitingNoteForUninstaller();
+    }
+
+// -----------------------------------------------------------------------------
+// CDialogTimer::DoCancel()
+//
+// -----------------------------------------------------------------------------
+//
+void CDialogTimer::DoCancel()
+    {
+    // Cancel outstanding request for a timer event.
+    iRTimer.Cancel();
+    }
+
+// -----------------------------------------------------------------------------
+// CDialogTimer::RunError()
+//
+// -----------------------------------------------------------------------------
+//
+TInt CDialogTimer::RunError( TInt aError )
+    {                        
+    return aError;       
+    }
+
+
 //  End of File  
--- a/appinstaller/AppinstUi/Daemon/Src/SilentLauncher.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/Daemon/Src/SilentLauncher.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -60,9 +60,7 @@
     iSifOptions->AddIntL( Usif::KSifInParam_GrantCapabilities, EFalse ); 
     // Defined for the install.
     iSifOptions->AddIntL( Usif::KSifInParam_InstallOptionalItems, ETrue );          
-    iSifOptions->AddIntL( Usif::KSifInParam_IgnoreOCSPWarnings, ETrue ); 
-    // TODO: Is this removed from current USIF ?	  
-    //iSifOptions->AddIntL( Usif::KSifInParam_DisplayPackageInfo, ETrue );     
+    iSifOptions->AddIntL( Usif::KSifInParam_IgnoreOCSPWarnings, ETrue );            
     iSifOptions->AddIntL( Usif::KSifInParam_AllowAppShutdown, ETrue );
     iSifOptions->AddIntL( Usif::KSifInParam_AllowDownload, ETrue );
     iSifOptions->AddIntL( Usif::KSifInParam_AllowOverwrite, ETrue );
@@ -70,6 +68,8 @@
     
 // TODO: is this defined in USIF?    
     //iSifOptions->AddIntL( Usif::KSifInParam_Languages, NULL );
+// TODO: Not supported anymore after wk18, do we have some other param for this.
+    //iSifOptions->AddIntL( Usif::KSifInParam_DisplayPackageInfo, ETrue );
     
 // TODO: remove old params.
     /*
--- a/appinstaller/AppinstUi/Daemon/Src/daemonbehaviour.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/Daemon/Src/daemonbehaviour.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -18,9 +18,8 @@
 #include <usif/scr/scr.h>
 #include <usif/scr/scrcommon.h>
 #include <usif/scr/screntries.h>
-#include <apgcli.h>    //RApaSession
-//TODO enable apparc support
-//#include <appinfo.h> //TAppInfo
+#include <apgcli.h>    // RApaSession
+#include <apgupdate.h> // TApaAppUpdateInfo
 
 #include "daemonbehaviour.h"
 #include "swispubsubdefs.h"
@@ -31,7 +30,6 @@
 
 using namespace Swi;
 
-
 // -----------------------------------------------------------------------
 // CDaemonBehaviour::NewL
 // -----------------------------------------------------------------------
@@ -83,11 +81,8 @@
         }   
     delete iSisInstaller;
     iSisInstaller = NULL;
-    iFs.Close();  
-            
-#ifdef RD_MULTIPLE_DRIVE    
-    iDriveArray.Close();
-#endif        
+    iFs.Close();                
+    iDriveArray.Close();        
     }
 
 // -----------------------------------------------------------------------
@@ -106,7 +101,7 @@
 //     
 void CDaemonBehaviour::MediaChangeL(TInt aDrive, TChangeType aChangeType)
     {
-    FLOG_1( _L("Daemon: Media change %d"), aDrive );
+    FLOG_1( _L("Daemon: MediaChangeL: Media change %d"), aDrive );
     RSisRegistryWritableSession registrySession;
     
     User::LeaveIfError( registrySession.Connect() );
@@ -115,20 +110,23 @@
     
     if ( aChangeType==EMediaInserted )
         {
-        FLOG( _L("Daemon: Media inserted") ); 
-
+        FLOG( _L("Daemon: MediaChangeL: Media inserted") ); 
+        TInt err = KErrNone;
         // Notify SCR and AppArc for media change.
-        UpdateComponentStatusL( aChangeType, aDrive );
+        TRAP( err, UpdateComponentStatusL( aChangeType, aDrive ) );
+        FLOG_1( _L("Daemon: UpdateComponentStatusL err = %d"), err );
 
         // We need call sis registry since this call will
         // activate sis registry to clean uninstalled components
         // from inserted media.
-        registrySession.AddDriveL(aDrive);
+        registrySession.AddDriveL( aDrive );
                                                 
         // Scan directory on the card and run pre-installed through SWIS
-        FLOG( _L("Daemon: Media change: Process preinstalled files") );
-        ProcessPreinstalledFilesL(aDrive);            
-       
+        FLOG( _L("Daemon: MediaChangeL: Process preinstalled files") );
+        ProcessPreinstalledFilesL( aDrive );  
+        FLOG_1( _L("Daemon: MediaChangeL: StartInstalling drive: %d"), aDrive );
+        iSisInstaller->StartInstallingL();
+                      
         // Add inserted media drive to drive array.                     
         if ( iDriveArray.Find(aDrive) == KErrNotFound )
             {                
@@ -137,19 +135,22 @@
         }
     else if (aChangeType==EMediaRemoved)
         {
-        FLOG( _L("Daemon: Media removed") );       
-                   
+        FLOG( _L("Daemon: MediaChangeL: Media removed") );       
+        TInt err = KErrNone;           
         // Notify SCR and AppArc for media change.
-        UpdateComponentStatusL( aChangeType, aDrive );
+        TRAP( err, UpdateComponentStatusL( aChangeType, aDrive ) );
+        FLOG_1( _L("Daemon: UpdateComponentStatusL err = %d"), err );
  
         // Get Installer state.                   
         TBool installerRunning = iSisInstaller->IsInstalling();
+        FLOG_1( _L("Daemon: MediaChangeL: IsInstalling = %d"), installerRunning );
         
+        FLOG( _L("Daemon: MediaChangeL: Cancel install process") );
         // Cancel all requests for install
         iSisInstaller->Cancel();                       
     
         // Notify plugin
-        if(iSwiDaemonPlugin)
+        if( iSwiDaemonPlugin )
             {
             TInt index = iDriveArray.Find(aDrive);
             iSwiDaemonPlugin->MediaRemoved(index);
@@ -163,22 +164,24 @@
             iDriveArray.Remove(index); 
             iDriveArray.Compress();   
             }
-    
+                
         // Continue installing from other drives if needed.
         if ( installerRunning )
-            {                                     
+            {
+            FLOG( _L("Daemon: MediaChangeL: Continue installing other drives") );
             // Get count of inserted drives.
             TInt count = iDriveArray.Count();
-                    
+            FLOG_1( _L("Daemon: Drive count = %d"), count );        
             if ( count )            
-                {                             
+                {
+                // Find packages for other drives.
                 for(index = 0; index < count; index++ )
                     {                   
-                    ProcessPreinstalledFilesL(iDriveArray[index]);
-                    
-                    FLOG_1( _L("Daemon: StartInstallingL for drive: %d"), index);
-                    iSisInstaller->StartInstallingL();                
+                    ProcessPreinstalledFilesL(iDriveArray[index]);                                        
                     }
+                // Start installing.
+                FLOG( _L("Daemon: MediaChangeL: StartInstallingL") );
+                iSisInstaller->StartInstallingL();
                 }                
             }                      
         }
@@ -192,11 +195,10 @@
 //          
 void CDaemonBehaviour::ProcessPreinstalledFilesL(TInt aDrive)
     {
+    FLOG_1( _L("Daemon: ProcessPreinstalledFilesL: Drive index: %d"), 
+            aDrive );
      _LIT( KDaemonPrivatePath,":\\private\\10202dce\\" );
     
-#ifndef RD_MULTIPLE_DRIVE
-    iSisInstaller->Cancel();
-#endif      
     // For uninstaller
     // Set on installing mode.
     iGeneralProcessStatus = EStateInstalling; 
@@ -206,7 +208,7 @@
     ProcessPreinstalledFilesL(aDrive, KDaemonPrivatePath);
     iStartNotified = EFalse;
     iDrive = aDrive;    
-    iSisInstaller->StartInstallingL();
+    FLOG( _L("Daemon: ProcessPreInstalledFilesL END") );
     }
 
 // -----------------------------------------------------------------------
@@ -214,8 +216,7 @@
 // -----------------------------------------------------------------------
 //        
 void CDaemonBehaviour::ProcessPreinstalledFilesL(TInt aDrive, const TDesC& aDirectory)
-    {
-    FLOG_1( _L("Daemon: ProcessPreInstalledFilesL: Drive index: %d"), aDrive );
+    {    
     TPath preInstalledPath;
     TChar drive;
     RFs::DriveToChar(aDrive, drive);
@@ -240,7 +241,8 @@
             if(!entry.IsDir())
                 {
                 TFileName fileName(preInstalledPath);
-                fileName.Append(entry.iName);
+                fileName.Append(entry.iName);                
+                // Add files to sis installer.
                 iSisInstaller->AddFileToInstallL(fileName);
                 }
             }
@@ -337,13 +339,12 @@
 // CDaemonBehaviour::UpdateComponentStatusL
 // -----------------------------------------------------------------------
 //         
-void CDaemonBehaviour::UpdateComponentStatusL( 
-   TChangeType aChangeType, 
-   TInt aDrive )
+void CDaemonBehaviour::UpdateComponentStatusL( TChangeType aChangeType, 
+                                               TInt aDrive )
     {
     FLOG( _L("Daemon: UpdateComponentStatus") ); 
             
-    Usif::RSoftwareComponentRegistry scrServer; 
+    Usif::RSoftwareComponentRegistry scrServer;       
     User::LeaveIfError( scrServer.Connect() );
     CleanupClosePushL( scrServer );
             
@@ -360,118 +361,179 @@
    
     if ( componentIdList.Count() )
         {
-// TODO Enabloi AppArcin päivitys. 
-// TODO Hae TAppInfon headeri includeen.        
-//            RArray<TAppInfo> appinfoArray;
-//            CleanupClosePushL( appinfoArray );
-    
-        // Convert the given target drive number to drive letter.
+        RArray<TApaAppUpdateInfo> appInfoArray;         
+        CleanupClosePushL( appInfoArray );
+        FLOG_1( _L("Daemon: target drive: %d"), aDrive );
+                              
+#ifdef _DEBUG
         TChar targetDrive;
         iFs.DriveToChar( aDrive, targetDrive );
-        FLOG_1( _L("Daemon: targetDrive: 0x%x"), TUint( targetDrive ) ); 
+        HBufC* tarceBuf = HBufC::NewL( 16 );
+        TPtr bufPtr = tarceBuf->Des();
+        bufPtr.Append( targetDrive );
+        FLOG_1( _L("Daemon: target drive: %S"), &bufPtr ); 
+        delete tarceBuf;
+#endif         
     
         FLOG( _L("Daemon: Check all SCR native components") ); 
         // Check all components in SCR. If media is removed/inserted
         // change status flag in SCR and in AppArc.
         for ( TInt index=0; index < componentIdList.Count(); index++ )
-            {                       
-            Usif::CComponentEntry* entry = Usif::CComponentEntry::NewL();
-            CleanupStack::PushL( entry );
-            
+            {  
             Usif::TComponentId componentId( componentIdList[index] );
             FLOG_1( _L("Daemon: componentId: %d"), componentId ); 
-            
-            scrServer.GetComponentL( componentId, 
-                                     *entry, 
-                                     Usif::KUnspecifiedLocale ); 
-            
-// TODO poista ei tarvetta jos filter toimii.
-            //if ( entry->SoftwareType() == Usif::KSoftwareTypeNative  )
+        
+            // Check that package is not in ROM. If package is in rom
+            // it can not be removed/not present.
+            TBool inRom = scrServer.IsComponentOnReadOnlyDriveL( componentId );
+            FLOG_1( _L("Daemon: IsComponentOnReadOnlyDriveL: %d"), inRom ); 
             
-            // Get all component drives.
-            TDriveList driveList;                
-            driveList = entry->InstalledDrives();
-               
-            TBool isInTargetDrive = EFalse;
-
-            FLOG( _L("Daemon: Check all drives for this component") ); 
-            // Go through all drives which have files for 
-            // this component.
-            for ( TInt i = 0; i < KMaxDrives; i++ )
-                {                
-                if ( driveList[i] != 0 )
-                    {
-                    TChar installDrive = 
-                            static_cast<TChar>( driveList[i] );
-                
-                    FLOG_1( _L("Daemon: driveList index: %d"), i ); 
-                    FLOG_1( _L("Daemon: installDrive: 0x%x"), TUint( installDrive ) ); 
-                    
-                    if ( targetDrive == installDrive )
-                        {
-                        // Ok we have files in this target drive.
-                        isInTargetDrive = ETrue;
-                        FLOG( _L("Daemon: SW in target drive.") ); 
-                        }
-                    }
-                }
-                                
-            // Check if component or part of it is in the media.
-            if ( isInTargetDrive )
+            if ( !inRom )
+                {              
+                UpdateStatusL( scrServer, 
+                               componentId, 
+                               aChangeType,
+                               aDrive,
+                               appInfoArray );
+                }                            
+            } // for loop
+        
+        FLOG_1( _L("Daemon: appInfoArray.Count = %d"), appInfoArray.Count() );         
+        // Check do we have updated some application info.
+        if ( appInfoArray.Count() )
+            {             
+            // Update AppArc list after we have all application 
+            // uids/status in array. 
+            FLOG( _L("Daemon: Update AppArc") );
+            RApaLsSession appArcSession;
+            TInt err = appArcSession.Connect();
+            FLOG_1( _L("Daemon: appArcSession.Connect err = %d"), err ); 
+            if ( !err )
                 {
-                FLOG( _L("Daemon: Set component status to SCR") ); 
-//                    TAppInfo appInfo;                     
-//                    appInfo.iAppUid = componentId;
-                                    
-                if ( aChangeType == EMediaInserted )
-                    {  
-                    // Update component flag to SCR.
-                    scrServer.SetIsComponentPresentL( componentId, 
-                                                      ETrue );
-                    FLOG( _L("Daemon: Set component present = TRUE") );                             
-                    // Set app status for AppArc. AppArc sees this 
-                    // as new component.
-//                        appInfo.iAppUid = TAppInfo::ENewApp;
-                    }
-                else if ( aChangeType==EMediaRemoved )
-                    {
-                   // Update component flag to SCR.
-                    scrServer.SetIsComponentPresentL( componentId, 
-                                                      EFalse );
-                    FLOG( _L("Daemon: Set component present = FALSE") );                            
-                    // Set app status for AppArc. AppArc sees this 
-                    // component as removed.
-//                        appInfo.iAppUid = TAppInfo::ERemoveApp;
-                    }
-                
-                // Add component info to array.
-//                    appinfoArray.Append( appInfo );                    
-                }                     
-            
-            CleanupStack::PopAndDestroy( entry );
-            entry = NULL;
-            } // for
-//TODO enable AppArc support when TAppInfo is available.            
-/*       
-         FLOG( _L("Daemon: Set component status to AppArc") ); 
-         // Update AppArc list after we have all components in array.               
-         RApaLsSession appArcSession;
-         TInt err = appArcSession.Connect();
-         if ( !err )
-             {
-             CleanupClosePushL(appArcSession);
-             appArcSession.UpdateAppListL( appinfoArray );
-             CleanupStack::PopAndDestroy();                   
-             }
-        
-        CleanupStack::PopAndDestroy( &appinfoArray );
-*/ 
+                CleanupClosePushL( appArcSession );            
+                FLOG( _L("Daemon: UpdateAppListL") ); 
+                appArcSession.UpdateAppListL( appInfoArray );            
+                CleanupStack::PopAndDestroy(); // appArcSession                 
+                }
+            }
+        CleanupStack::PopAndDestroy( &appInfoArray );
         } // if componentList.Count()
              
     CleanupStack::PopAndDestroy( &componentIdList ); //componentIDList.Close();
     CleanupStack::PopAndDestroy( filter ); 
     CleanupStack::PopAndDestroy( &scrServer );  
     FLOG( _L("Daemon: UpdateComponentStatus END") ); 
-    }       
+    } 
+
+// -----------------------------------------------------------------------
+// CDaemonBehaviour::UpdateStatusL
+// -----------------------------------------------------------------------
+//    
+void CDaemonBehaviour::UpdateStatusL( 
+    Usif::RSoftwareComponentRegistry& aScrServer,
+    Usif::TComponentId aComponentId,
+    TChangeType aChangeType,
+    TInt aTargetDrive,
+    RArray<TApaAppUpdateInfo>& aAppInfoArray )     
+    {
+    FLOG( _L("Daemon: CDaemonBehaviour::UpdateStatusL start") ); 
+    
+    Usif::CComponentEntry* entry = Usif::CComponentEntry::NewL();
+    CleanupStack::PushL( entry );
+        
+    TInt err = KErrNone;
+    TRAP( err, aScrServer.GetComponentL( aComponentId, 
+                                         *entry, 
+                                         Usif::KUnspecifiedLocale ) );    
+    FLOG_1( _L("Daemon: GetComponentL TRAP err = %d"), err );
     
+    // If we get error let's not stop the loop.
+    if ( !err )
+        { 
+        TBool isInTargetDrive = EFalse;
+        // Get all component drives.
+        TDriveList driveList;                
+        driveList = entry->InstalledDrives();           
+
+        FLOG( _L("Daemon: Check all drives for this component") ); 
+        // Go through all drives which have files for this component.
+        for ( TInt i = 0; i < KMaxDrives; i++ )
+            {                
+            if ( driveList[i] != 0 )
+                {                                           
+                FLOG_1( _L("Daemon: Found drive: %d"), i ); 
+                
+                if ( aTargetDrive == i )
+                    {
+                    // Ok we have files in this target drive.
+                    isInTargetDrive = ETrue;
+                    FLOG( _L("Daemon: Component has files in target drive") ); 
+                    }
+                }
+            } // for
+                            
+        // Check if component or part of it is in the media.
+        if ( isInTargetDrive )
+            {
+            // We need to update applications status to AppArc when
+            // there is some media change. AppArc needs application
+            // UID (not package UID) so we need to get all app. UIDs
+            // from the package and set them to present or not present.
+            
+            FLOG( _L("Daemon: Create application status for AppArc") );
+            FLOG( _L("Daemon: Get applications UIDs from SCR") );
+            RArray<TUid> appUidArray;
+            CleanupClosePushL( appUidArray );
+             
+            TRAP( err, aScrServer.GetAppUidsForComponentL( aComponentId, appUidArray ) );
+            FLOG_1( _L("Daemon: GetAppUidsForComponentL TRAP err = %d"), err );                        
+            FLOG_1( _L("Daemon: UID array count = %d"), appUidArray.Count() );
+            
+            for (TInt index = 0; index < appUidArray.Count(); index++)
+                {
+                FLOG_1( _L("Daemon: Add app UID = 0x%x"), 
+                 appUidArray[index].iUid );                
+                
+                TApaAppUpdateInfo appInfo;
+                appInfo.iAppUid = appUidArray[index]; 
+                
+                if ( aChangeType == EMediaInserted  )
+                    {
+                    appInfo.iAction = TApaAppUpdateInfo::EAppPresent;
+                    FLOG( _L("Daemon: Set app = EAppPresent") );
+                    }
+                else
+                    {
+                    appInfo.iAction = TApaAppUpdateInfo::EAppNotPresent;
+                    FLOG( _L("Daemon: Set app = EAppNotPresent") );
+                    }
+                
+                aAppInfoArray.Append( appInfo );   
+                }                           
+            CleanupStack::PopAndDestroy(&appUidArray);
+// Set do not work, it will leave.
+/*            
+            FLOG( _L("Daemon: Set component status to SCR") );
+            // Update component flag to SCR. 
+            if ( aChangeType == EMediaInserted )
+                {  
+                FLOG( _L("Daemon: Set component present = TRUE") );                                  
+                TRAP( err, aScrServer.SetIsComponentPresentL( aComponentId, ETrue ) );                                                                            
+                }
+            else if ( aChangeType==EMediaRemoved )
+                {
+                FLOG( _L("Daemon: Set component present = FALSE") );                              
+                TRAP( err, aScrServer.SetIsComponentPresentL( aComponentId, EFalse ) );                                                                               
+                }            
+            FLOG_1( _L("Daemon: SetIsComponentPresentL TRAP err = %d"), err );
+*/                                                          
+            }   // if isInTargetDrive        
+        }   // if err
+    
+    CleanupStack::PopAndDestroy( entry );
+    entry = NULL;
+    
+    FLOG( _L("Daemon: CDaemonBehaviour::UpdateStatusL end") ); 
+    }
+
 //EOF
--- a/appinstaller/AppinstUi/Daemon/Src/daemoninstaller.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/Daemon/Src/daemoninstaller.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -15,9 +15,6 @@
 *
 */
 
-#include <usif/scr/scr.h>
-#include <usif/scr/screntries.h>
-
 #include "daemoninstaller.h"
 #include "DialogWrapper.h"
 #include "swispubsubdefs.h"
@@ -45,7 +42,7 @@
 
 const static TInt KInstallRetryWaitTime = 10000000; // 10 secs
 // For uninstaller
-const static TInt KWaitUninstallerTime = 1000000; // 1 secs  
+const static TInt KWaitUninstallerTime = 1000000; // 1 secs 
 
 _LIT(KMCSisInstaller,"Daemon-Installer"); // Minor-Component name
 
@@ -86,10 +83,11 @@
 //
 CSisInstaller::~CSisInstaller()
     {
+    FLOG( _L("Daemon: CSisInstaller::~CSisInstaller") );
     Cancel();
     iTimer.Close();
     iFilesToInstall.ResetAndDestroy();
-    iFilesToInstall.Close();
+    iFilesToInstall.Close();    
     delete iInstallLauncher;
     delete iDialogs;      
     delete iPreviouslyInstalledAppsCache;
@@ -119,12 +117,15 @@
     iPreviouslyInstalledAppsCache = CPreviouslyInstalledAppsCache::NewL();
     iInstallationFailedAppsCache = CInstallationFailedAppsCache::NewL();
     iShutdownWatcher = CShutdownWatcher::NewL( *this );
-    iShutdownWatcher->Start();
+    iShutdownWatcher->Start();        
+    iPercentValue = 0;
+    
     // For uninstaller
     // SisInstaller do not own this so do not delete.     
     iProgramStatus = &aMainStatus;  
     iUpdateCache = ETrue;    
     iFileOpen = EFalse;    
+    iInstallLauncher = NULL;
     }
 		
 // -----------------------------------------------------------------------
@@ -150,7 +151,7 @@
     {
     FLOG( _L("Daemon: StartInstallingL") );
 
-    if(!iFilesToInstall.Count())
+    if( !iFilesToInstall.Count() )
         {
         // For uninstaller
         // Check state, if installing change it to idle.
@@ -159,7 +160,7 @@
             FLOG( _L("Daemon: StartInstallingL: Set EStateIdle") );
             iProgramStatus->SetProgramStatusToIdle();
             }        
-        
+        FLOG( _L("Daemon: StartInstallingL: User::Leave(KErrAbort)") );
         User::Leave(KErrAbort);
         }
     
@@ -170,12 +171,14 @@
         {
         FLOG( _L("Daemon: StartInstallingL: Set EStateInstalling") );
         iProgramStatus->SetProgramStatus( EStateInstalling );
-        }         
-    FLOG_1( _L("[CSisInstaller] ConstructL iGeneralProcessStatus = %d"),
-            iGeneralProcessStatus );  
+        } 
+    
+    FLOG_1( _L("Daemon: iGeneralProcessStatus: %d"), iGeneralProcessStatus );     
+    FLOG_1( _L("Daemon: iInstallLauncher: 0x%x"),iInstallLauncher );  
         
-    if ( !iInstallLauncher )
+    if ( iInstallLauncher == NULL )
         {
+        FLOG( _L("Daemon: Create iInstallLauncher") );
         iInstallLauncher = CSilentLauncher::NewL( iFs );   
         
         // Update cache so we do not try to start install for
@@ -189,8 +192,7 @@
     if ( iState == EDSisInstallerStateIdle )
         {                
         // Reset the error
-        iInstallErr = KErrNone; 
-          
+        iInstallErr = KErrNone;           
         CompleteSelf();
         }
     }
@@ -223,7 +225,9 @@
     if ( !IsActive() )
         {        
         TRequestStatus* status = &iStatus;
-        User::RequestComplete(status,KErrNone);
+        FLOG( _L("Daemon: CompleteSelf: RequestComplete") );
+        User::RequestComplete( status, KErrNone );
+        FLOG( _L("Daemon: CompleteSelf: SetActive") );
         SetActive();
         }    
     }
@@ -266,7 +270,7 @@
 // -----------------------------------------------------------------------
 //
 void CSisInstaller::RunL()
-    {
+    {    
     FLOG_1( _L("Daemon: Installer RunL status:%d"), iStatus.Int() );  
     FLOG_1( _L("Daemon: Installer RunL state:%d"), iState );                
     
@@ -401,6 +405,9 @@
                 
                 if ( iFileIndex < iFilesToInstall.Count() )
                     { 
+                    // Let's calc. values before index is updated.
+                    CalcPercentValue();
+                                                       
                     // Get next sisx package from array.                 
                     iSisFile.Copy( *iFilesToInstall[iFileIndex] );
                     ++iFileIndex;    
@@ -441,8 +448,9 @@
                                     iSisFile ) );                                                                                  
                             
                             // Let's continue to give all packages to plug-in. 
-                            // Note that we do not have iStatus as this is not async. call 
-                            // so we can not use EDSisInstallerStateInstalling state.                             
+                            // Note that we do not have iStatus as this is not 
+                            // async. call so we can not use 
+                            // EDSisInstallerStateInstalling state.                             
                             iState = EDSisInstallerStateIdle;                                                 
                             iInstallerState = iState;
                 
@@ -451,14 +459,19 @@
                             CompleteSelf(); 
                             }                            
                         else
-                            {                                                
+                            {  
+                            // Start also the universal indicator.
+                            TRAP_IGNORE( iDialogs->ActivateIndicatorL( iPercentValue ) );
+                            // Start to show progress dialog. Dialog is shown 
+                            // only 3 sec. 
+                            TRAP_IGNORE( iDialogs->ShowWaitingNoteL() );    
+                                                        
                             FLOG_1( _L("Daemon: Start install for %S"), &iSisFile );
                                                                                                                                                                                                                                                    
                             iInstallLauncher->InstallL( iSisFileHandle, 
                                                         iSisFile, 
                                                         iStatus );
-                            
-                            iDialogs->ShowWaitingNoteL(); 
+                                                        
                             iState = EDSisInstallerStateInstalling;                       
                             iInstallerState = iState;                                                   
                             SetActive();                               
@@ -498,8 +511,7 @@
                     TInt err = iSisFileHandle.Open( 
                                     iFs, 
                                     iSisFile, 
-                                    EFileRead | EFileShareReadersOnly
-                                    /*EFileShareReadersOrWriters|EFileRead*/ ); 
+                                    EFileRead | EFileShareReadersOnly ); 
                                                            
                     if ( err )
                          {
@@ -578,6 +590,9 @@
 //
 void CSisInstaller::InstallationCompleted( TInt aResult )
     {
+    // Let's update universal indicator ones more.   
+    iDialogs->ActivateIndicatorL( 100 );
+    
     FLOG_1( _L("Daemon: InstallationCompleted with result = %d"), aResult );  
     iState = EDSisInstallerStateIdle;    
     iInstallErr = KErrNone;     
@@ -602,8 +617,11 @@
         iSisFileHandle.Close();
         iFileOpen = EFalse;
         }    
-                            
-    TRAP_IGNORE( iDialogs->CancelWaitingNoteL() );
+    
+    // Make sure that progress note is closed.
+    TRAP_IGNORE( iDialogs->CancelWaitingNote() );
+    // Close the universal indicator. 
+    iDialogs->CancelIndicatorL();
         
     if ( aResult != KErrNone && 
          iSisFile.Length() > 0 && 
@@ -676,12 +694,17 @@
                             HasBeenPreviouslyInstalled(packageId);
 	FLOG_1( _L("Daemon: Has been installed (cache) = %d"), !needsInstalling );
 	
-// TODO: Onko rom stubien tarkistus tarpeen jos upgrade ei ole sallittu.
-// Ei taida kannattaa tarksitaan RU ei pitäisi mennä läpi.
-	FLOG( _L("Daemon: HUOM ROM STUBEJA EI TARKISTETA") ); 	
+	// No need to check rom stubs in here anymore. 
+	// Note 1: SWI Daemon policy has been that RU packages are not installed 
+	// from removable media.	
+	// Note 2: UpdateAllL will add all pkg uids in cache (PreviouslyInstalled),
+	// so rom upgrades are not installed since uid is found from the cache.
+	// Note 3: Install params do not allow RU to be installed. So SWI will
+	// reject RU (rom upgrade) package anyway.
+
 	/*	
-	// Huom! edellinen koodi ollut väärin koska UID on jo cachessä !
-	// Tarkistus pitää tehdä vain jos UID löytyy cachestä.
+	// Note! this code has been wrong. No need to check stubs since
+	// policy do not allow RU updates and SWI will reject the install.
 	if ( !needsInstalling )
         {
         RSisRegistrySession registry;
@@ -780,7 +803,44 @@
     FLOG_1( _L("Daemon: IsValidPackageL = %d"), result );  
     return result;    
     }
-    
+ 
+// -----------------------------------------------------------------------
+// CSisInstaller::CalcPrecentValue
+// -----------------------------------------------------------------------
+//
+void CSisInstaller::CalcPercentValue()
+    {  
+    FLOG( _L("Daemon: CSisInstaller::CalcPercentValue") );
+    FLOG_1( _L("Daemon: iFileIndex = %d"), iFileIndex ); 
+    // Let's calculate indicator value for UI now.
+    TInt sisxFileCount = iFilesToInstall.Count();
+    FLOG_1( _L("Daemon: iFilesToInstall.Count = %d"), sisxFileCount ); 
+    iPercentValue = 0;
+
+    // Note! if iFileIndex is zero, no package is installed bacause
+    // installation process starts after this function.     
+    if ( iFileIndex && sisxFileCount )
+        {
+        // Let's calculate new precent value after some
+        // package is installed.     
+        if ( iFileIndex <= sisxFileCount )
+            {
+            TReal32 realFileIndex = iFileIndex;
+            TReal32 realFileCount = sisxFileCount;
+            iPercentValue = (realFileIndex/realFileCount)*100;                                   
+            }
+        else
+            {
+            // Most probably all is installed if index is bigger then
+            // filen count. Let's not show over 100% to user.
+            // This may happend after last package is processed since 
+            // index counter is updated before install starts.
+            iPercentValue = 100;
+            }
+        }           
+    FLOG_1( _L("Daemon: CalcPercentValue value = %d"), (TInt)iPercentValue );
+    }
+
 //EOF
 
 
--- a/appinstaller/AppinstUi/Daemon/Src/dialogwatcher.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/Daemon/Src/dialogwatcher.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -142,7 +142,8 @@
             {
             FLOG( _L("[CDialogWatcher] RunL: PSKey true -> Cancel notes ") ); 
             // If key is true, cancel all dialogs.
-            iDialogWrapper->CancelWaitingNoteL(); 
+            iDialogWrapper->CancelWaitingNote(); 
+            iDialogWrapper->CancelWaitingNoteForUninstaller();
             iDialogWrapper->SetUIFlag( psKey );
             // Issue new request.
             StartWatcher();
@@ -173,7 +174,8 @@
         FLOG( _L("[CDialogWatcher] RunL: Cancel notes") ); 
         // If we can not read the the PS Key, let's close dialogs, 
         // so we do not block the start applications.
-        iDialogWrapper->CancelWaitingNoteL(); 
+        iDialogWrapper->CancelWaitingNote(); 
+        iDialogWrapper->CancelWaitingNoteForUninstaller();
         iDialogWrapper->SetUIFlag( ETrue );
         // Issue new request.
         StartWatcher();
--- a/appinstaller/AppinstUi/Daemon/Src/main.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/Daemon/Src/main.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -44,15 +44,6 @@
     // Rename thread as SWI Daemon.
     User::RenameThread( KSWIDaemonInstaller );  
 
-#ifdef __WINS__   
-//TODO: this is tomprary hack since we can not show UI
-// dialogs if QT is not up in wins.
-FLOG( _L("Daemon: Let's wait QT UI to boot up in WINS env.") );   
-FLOG( _L("Daemon: Start SWI Daemon after 300 sec.") );   
-User::After( 150000000 );
-User::After( 15000000 );
-#endif  // WINS
-
     // For uninstaller
     // Set status to installing just to be sure that uninstaller 
     // do not run before installing in complete.
--- a/appinstaller/AppinstUi/Daemon/Src/previouslyInstalledAppsCache.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/Daemon/Src/previouslyInstalledAppsCache.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -201,6 +201,7 @@
 //  
 void CPreviouslyInstalledAppsCache::ConstructL()
 	{
+    FLOG( _L("Daemon: CPreviouslyInstalledAppsCache::ConstructL ") );
 	User::LeaveIfError(iFs.Connect());
 	TInt drive = 0;
     iFs.CharToDrive( 
@@ -211,13 +212,13 @@
 
 	// Read cache file
 	TRAP_IGNORE(InitFromCacheFileL());
-		
-    TRAPD( err, UpdateAllL() );
-    if(err == KErrNone)
-        {
-        // If we managed to scan the registry, and update the cache, flush to disk.
-        TRAP_IGNORE(FlushToDiskL());
-        }	
+	
+//TODO: Test if this is really needed. Let's not do updateall 2 time in boot.		
+   // TRAPD( err, UpdateAllL() );
+   // if(err == KErrNone)
+   //     {        
+   //     TRAP_IGNORE(FlushToDiskL());
+   //     }	
 
 	}
 
--- a/appinstaller/AppinstUi/Daemon/Src/uninstaller.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/Daemon/Src/uninstaller.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -281,6 +281,20 @@
                      // Display installing note for user.
                      iDialogs->ShowWaitingNoteForUninstallerL(); 
                      
+                     if ( iUidArrayIndex == 0 )
+                         {
+                         // Set uninstall mode for universal indicator and
+                         // set percent value to 0%.
+                         iDialogs->SetModeToIndicatorL( KSWIDaemonUninstallerMode );
+                         }
+                     else
+                         {
+                         // Calculate current percent value to iPercentValue. 
+                         CalcPercentValue();
+                         // Activate new value to universal indicator.
+                         iDialogs->ActivateIndicatorL( iPercentValue );
+                         }
+                     
                      FLOG_1( _L("[SISUninstaller] Run uninstall index = %d"), 
                              iUidArrayIndex ); 
                      
@@ -347,6 +361,8 @@
 void CSisPkgUninstaller::UninstallationCompleted( TInt /*aResult*/ )
     {
     FLOG( _L("[SISUninstaller] UninstallationCompleted") );
+    // Update indicator value last time and show 100% to user.
+    iDialogs->ActivateIndicatorL( 100 );
     
     if ( EStateUninstalling == iProgramStatus->GetProgramStatus() )
          {   
@@ -358,7 +374,9 @@
     iState = EUninstallerStateIdle; 
           
     // Cancel waiting note.
-    TRAP_IGNORE( iDialogs->CancelWaitingNoteL() );       
+    TRAP_IGNORE( iDialogs->CancelWaitingNoteForUninstaller());
+    // Close indicator.
+    iDialogs->CancelIndicatorL();
     }  
 
 
@@ -374,4 +392,38 @@
     iRevisor->Exit();
     }
 
+// -----------------------------------------------------------------------
+// CSisInstaller::CalcPrecentValue
+// -----------------------------------------------------------------------
+//
+void CSisPkgUninstaller::CalcPercentValue()
+    {     
+    FLOG( _L("[SISUninstaller] CalcPercentValue") );
+    FLOG_1( _L("[SISUninstaller] iUidArrayIndex = %d"), iUidArrayIndex ); 
+    // Let's calculate indicator value for UI now.
+    TInt packageUidCount = iPkgUidArray.Count();
+    FLOG_1( _L("[SISUninstaller] pkg UID count = %d"), packageUidCount ); 
+    
+    iPercentValue = 0;
+
+    if ( iUidArrayIndex && packageUidCount )
+        {
+        // Let's calculate new precent value.     
+        if ( iUidArrayIndex <= packageUidCount )
+            {
+            TReal32 realArrayIndex = iUidArrayIndex;
+            TReal32 realPkgCount = packageUidCount;
+            iPercentValue = (realArrayIndex/realPkgCount)*100;                                   
+            }
+        else
+            {
+            // Most probably all is uninstalled if index is bigger then
+            // filen count. Let's not show over 100% to user.           
+            iPercentValue = 100;
+            }
+        }
+            
+    FLOG_1( _L("[SISUninstaller] percent value = %d"), (TInt)iPercentValue );
+    }
+
 //EOF
--- a/appinstaller/AppinstUi/Plugin/CommonUI/Src/CUICertificateDetailsDialog.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/Plugin/CommonUI/Src/CUICertificateDetailsDialog.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -18,10 +18,10 @@
 
 
 // INCLUDE FILES
-#include <aknmessagequerydialog.h>
-#include <StringLoader.h>
+//#include <aknmessagequerydialog.h>
+//#include <StringLoader.h>
 #include <SWInstCommonUI.rsg>
-#include <AknUtils.h>
+//#include <AknUtils.h>
 #include <hash.h>                  
 
 #include "CUICertificateDetailsDialog.h"
@@ -88,6 +88,7 @@
                                                TInt aHeaderResourceId,
                                                const TDesC& aValue )
     {
+    /*
     HBufC* headerString = StringLoader::LoadLC( aHeaderResourceId );
     HBufC* newMessage;
     
@@ -119,7 +120,8 @@
     CleanupStack::PopAndDestroy( aMessage );  
   
     aMessage = newMessage;    
-    CleanupStack::PushL( aMessage );  
+    CleanupStack::PushL( aMessage );
+    */  
     }
 
 // -----------------------------------------------------------------------------
@@ -130,6 +132,7 @@
 //
 void CCUICertificateDetailsDialog::ExecuteLD( const CCUICertificateInfo& aCertInfo )
     {
+    /*
     CleanupStack::PushL( this );
     
     // Valid from
@@ -184,6 +187,7 @@
     dlg->RunLD();
 
     CleanupStack::PopAndDestroy( 7 );  // message, fingerprint_md, fingerprint, serial, validTo, validFrom
+    */
     }
 
 // -----------------------------------------------------------------------------
@@ -194,6 +198,7 @@
 //
 HBufC* CCUICertificateDetailsDialog::DateToStringLC( const TDateTime& aDate )
     {
+    /*
     // Create date descriptors.
     // We use Avkon date format string to format the date into correct format.
     HBufC* dateFormatString = StringLoader::LoadLC( R_QTN_DATE_USUAL_WITH_ZERO );
@@ -208,7 +213,9 @@
     TPtr ptr = tmp->Des();
     AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr ); 
 
-    return tmp;    
+    return tmp;   
+    */
+    return NULL;
     }
 
 // -----------------------------------------------------------------------------
--- a/appinstaller/AppinstUi/Plugin/CommonUI/Src/CUIDetailsDialog.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/Plugin/CommonUI/Src/CUIDetailsDialog.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -18,15 +18,15 @@
 
 
 // INCLUDE FILES
-#include <aknmessagequerydialog.h>
-#include <aknlistquerydialog.h> // remove
-#include <StringLoader.h>
+//#include <aknmessagequerydialog.h>
+//#include <aknlistquerydialog.h> // remove
+//#include <StringLoader.h>
 #include <bautils.h>
 #include <eikenv.h>
 #include <data_caging_path_literals.hrh>
 #include <SWInstCommonUI.rsg>
 #include <pathinfo.h>
-#include <avkon.rsg>
+//#include <avkon.rsg>
 #include <DRMHelper.h>
 
 #include "CUIDetailsDialog.h"
@@ -49,7 +49,7 @@
 // -----------------------------------------------------------------------------
 //
 CCUIDetailsDialog::CCUIDetailsDialog()
-    : iCbaResourceId( R_AVKON_SOFTKEYS_OK_EMPTY )
+//    : iCbaResourceId( R_AVKON_SOFTKEYS_OK_EMPTY )
     {
     }
 
@@ -233,7 +233,7 @@
 TInt CCUIDetailsDialog::ShowDialogL( MCUIInfoIterator& aIterator )
     {
     TInt result( 0 );
-
+/*
     CleanupStack::PushL( this );
 
     PopulateArrayL( aIterator );
@@ -279,7 +279,7 @@
     
     result = dlg->RunLD();
     CleanupStack::PopAndDestroy( 2 ); // message, this
-
+*/
     return result;    
     }
 
@@ -344,6 +344,7 @@
 //
 HBufC* CCUIDetailsDialog::GetMessageDescriptorLC()
     {
+    /*
     TInt size( 0 ); 
     TInt index( 0 );
 
@@ -380,8 +381,10 @@
     CleanupStack::Pop( message );
     CleanupStack::PopAndDestroy( 2, type );
     CleanupStack::PushL( message );    
-
-    return message;    
+   
+    return message;
+    */
+    return NULL;
     }
 
 // -----------------------------------------------------------------------------
@@ -392,6 +395,7 @@
 //
 void CCUIDetailsDialog::AddCertificatesLC( HBufC*& aMessage )
     {
+    /*
     HBufC* certHeading = StringLoader::LoadLC( R_SWCOMMON_DETAIL_CERTIFICATES );
     HBufC* certificateLink = LoadLinkLC( R_SWCOMMON_DETAIL_VALUE_VIEW_CERT );
     HBufC* newString = HBufC::NewL( certHeading->Length() + 
@@ -411,6 +415,7 @@
   
     aMessage = newString;
     CleanupStack::PushL( aMessage ); 
+    */
     }
 
 // -----------------------------------------------------------------------------
@@ -421,6 +426,7 @@
 //
 void CCUIDetailsDialog::AddDrmLC( HBufC*& aMessage )
     {
+    /*
     HBufC* drmHeading = StringLoader::LoadLC( R_SWCOMMON_DETAIL_DRM );
     HBufC* drmLink = LoadLinkLC( R_SWCOMMON_DETAIL_VALUE_VIEW_DRM );
     HBufC* newString = HBufC::NewL( drmHeading->Length() + 
@@ -440,6 +446,7 @@
   
     aMessage = newString;
     CleanupStack::PushL( aMessage ); 
+    */
     }
 
 // -----------------------------------------------------------------------------
@@ -478,6 +485,7 @@
 //
 void CCUIDetailsDialog::DoShowCertificatesL()
     {
+    /*
     if ( iCommonCertificates.Count() > 1 )
         {
         CDesCArrayFlat *itemArray = new( ELeave ) CDesCArrayFlat( 2 );
@@ -520,7 +528,8 @@
             CCUICertificateDetailsDialog::NewL();
                 
         certDlg->ExecuteLD( *( iCommonCertificates[0] ) );    
-        }    
+        }  
+    */      
     }
 
 // -----------------------------------------------------------------------------
@@ -544,6 +553,7 @@
 //
 HBufC* CCUIDetailsDialog::LoadLinkLC( TInt aResourceId )
     {
+    /*
     HBufC* link = StringLoader::LoadLC( aResourceId );
     HBufC* tmp = link->ReAllocL( link->Length() + KLinkTagOpen().Length() + KLinkTagClose().Length() );
     
@@ -554,7 +564,9 @@
     link->Des().Insert(0, KLinkTagOpen);
     link->Des().Append( KLinkTagClose );   
 
-    return link;    
+    return link;   
+    */ 
+    return NULL;
     }
 
 //  End of File  
--- a/appinstaller/AppinstUi/Plugin/CommonUI/Src/CUIDialogs.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/Plugin/CommonUI/Src/CUIDialogs.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -21,12 +21,12 @@
 #include <bautils.h>
 #include <eikenv.h>
 #include <StringLoader.h>
-#include <AknQueryDialog.h>
+//#include <AknQueryDialog.h> 
 #include <eikprogi.h>
-#include <aknnotewrappers.h>
+//#include <aknnotewrappers.h>
 #include <data_caging_path_literals.hrh>
 #include <SWInstCommonUI.rsg>
-#include <aknmessagequerydialog.h>
+//#include <aknmessagequerydialog.h>
 #include <hlplch.h>
 //#include <csxhelp/am.hlp.hrh>
 #include <coehelp.h>
@@ -35,7 +35,7 @@
 #ifdef RD_MULTIPLE_DRIVE
 #include <driveinfo.h>
 #endif //RD_MULTIPLE_DRIVE
-#include <akninputblock.h>
+//#include <akninputblock.h>
  
 #include "CUIDialogs.h"
 #include "CUIDriveUtils.h"
@@ -80,8 +80,8 @@
     fileName.Append( KCUIResourceFileName );
     iResourceFileOffset = CUIUtils::LoadResourceFileL( fileName, iCoeEnv );    
 
-    iAbsorber = CAknInputBlock::NewLC();
-    CleanupStack::Pop( iAbsorber );
+//    iAbsorber = CAknInputBlock::NewLC();
+//    CleanupStack::Pop( iAbsorber );
     
     FeatureManager::InitializeLibL(); 
     }
@@ -112,7 +112,7 @@
         iCoeEnv->DeleteResourceFile( iResourceFileOffset );
         }
 
-    delete iAbsorber;
+//    delete iAbsorber;
 
     FeatureManager::UnInitializeLib();
     }
@@ -285,7 +285,7 @@
                                                     TInt aSoftkeyResourceId ) const
     {
     TBool response( EFalse );
-
+/*
     CAknQueryDialog* note = 
         CAknQueryDialog::NewL( CAknQueryDialog::EConfirmationTone );
 
@@ -297,7 +297,7 @@
         {
         response = ETrue;
         }   
-
+*/
     return response;    
     }
 
@@ -312,9 +312,10 @@
     const RArray<TDriveUnit>& aDriveUnits,
     const RArray<TInt64>& aDriveSpaces,
     TInt& aSelectionResult )
-    {   
+    {  
+    
     TInt result( KErrNone );
-
+/*
     // Sanity check
     if ( aSize <= 0 )
         {
@@ -439,7 +440,7 @@
         }    
     
     CleanupStack::PopAndDestroy( driveUtils );
-
+*/
     return result;
     }
 
@@ -450,9 +451,10 @@
 // -----------------------------------------------------------------------------
 //
 EXPORT_C TBool CCUIDialogs::ShowSecurityWarningDialogL()
-    {   
+    { 
+    
     TBool result( EFalse );
-    
+    /*
     // Load resources
     HBufC* text = StringLoader::LoadLC( R_SWCOMMON_SECURITY_WARNING );
     HBufC* linkText = NULL;
@@ -490,7 +492,7 @@
         }    
     
     CleanupStack::PopAndDestroy( 3, text ); // message, linkText, text
-
+     */
     return result;    
     }
  
@@ -515,8 +517,10 @@
 //
 EXPORT_C void CCUIDialogs::ShowErrorNoteL( const TDesC& aErrorText ) const
     {
+    /*
     CAknErrorNote* note = new (ELeave) CAknErrorNote( ETrue );
     note->ExecuteLD( aErrorText );
+    */
     }
 
 // -----------------------------------------------------------------------------
@@ -597,6 +601,7 @@
                                         TInt& aIndexOfAppToBeStarted ) const
            
     {
+    /*
     aIndexOfAppToBeStarted = KErrNotFound;
     
     // Prepare for showing the installation complete query
@@ -675,7 +680,9 @@
     	aIndexOfAppToBeStarted = KErrNotFound;	
     	}    
 
-    return appIsStarted;	
+    return appIsStarted;
+    */
+    return EFalse;
     }   
     
 // -----------------------------------------------------------------------------
@@ -689,6 +696,7 @@
                                 const MDesCArray& aApplicationArray,
                                 TInt aSoftkeyResourceId ) const
 	{
+    /*
     HBufC* appList = HBufC::NewLC( 0 ); 
     TInt count = aApplicationArray.MdcaCount();   
     for ( TInt i = 0; i < count; i++ )
@@ -731,6 +739,8 @@
         }
     CleanupStack::PopAndDestroy( message );
     return response; 
+    */
+    return EFalse;
 	}                                
                                      
 
--- a/appinstaller/AppinstUi/Plugin/CommonUI/Src/CUIDriveUtils.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/Plugin/CommonUI/Src/CUIDriveUtils.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -22,13 +22,13 @@
 #include <pathinfo.h>
 #include <data_caging_path_literals.hrh>
 #include <SWInstCommonUI.rsg>
-#include <AknCommonDialogs.h>
-#include <CAknMemorySelectionDialog.h>
+//#include <AknCommonDialogs.h> // Removed since CR 548
+//#include <CAknMemorySelectionDialog.h> // Removed since CR 548
 #ifdef RD_MULTIPLE_DRIVE 
-#include <CAknMemorySelectionDialogMultiDrive.h>
-#include <AknCommonDialogsDynMem.h>
+//#include <CAknMemorySelectionDialogMultiDrive.h> // Removed since CR 548
+//#include <AknCommonDialogsDynMem.h> // Removed since CR 548
 #else
-#include <CAknMemorySelectionDialog.h>
+//#include <CAknMemorySelectionDialog.h> // Removed since CR 548
 #endif //RD_MULTIPLE_DRIVE
 
 #include "CUIDriveUtils.h"
@@ -119,9 +119,12 @@
 // -----------------------------------------------------------------------------
 //
 TBool CCUIDriveUtils::ShowSelectionDialogL( TInt& aSelectedDrive )
-    {       
+    {  
+
     TBool result( EFalse );
     
+    // Removed since CR 548   
+/*    
     aSelectedDrive = 0;    
 
 #ifdef RD_MULTIPLE_DRIVE           
@@ -230,7 +233,7 @@
 
 #endif  //RD_MULTIPLE_DRIVE  
     CleanupStack::PopAndDestroy( 2 ); // header, memoryDialog
- 
+*/ 
     return result;    
     }    
 
--- a/appinstaller/AppinstUi/Plugin/CommonUI/Src/CUIProgressDialog.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/Plugin/CommonUI/Src/CUIProgressDialog.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -40,11 +40,13 @@
 // Destructor
 CCUIProgressDialog::~CCUIProgressDialog()
     {
+    
     if (iSelfPtr) 
         {
         *iSelfPtr = NULL;
         iSelfPtr = NULL;
         }
+    
     }
 
 // ---------------------------------------------------------------------------
--- a/appinstaller/AppinstUi/appinstui.pro	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/appinstui.pro	Thu Jul 22 16:35:01 2010 +0100
@@ -17,5 +17,6 @@
 TEMPLATE = subdirs
 
 SUBDIRS += sifuidevicedialogplugin/sifuidevicedialogplugin.pro \
-    sifuiinstallindicatorplugin/sifuiinstallindicatorplugin.pro
+    sifuiinstallindicatorplugin/sifuiinstallindicatorplugin.pro \
+    sisxsilentinstallindicatorplugin/sisxsilentinstallindicatorplugin.pro
 
--- a/appinstaller/AppinstUi/group/SWInstCommonUI.mmp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/group/SWInstCommonUI.mmp	Thu Jul 22 16:35:01 2010 +0100
@@ -67,7 +67,7 @@
 LIBRARY         eikdlg.lib 
 LIBRARY         eikctl.lib
 LIBRARY         platformenv.lib
-LIBRARY         commondialogs.lib
+//LIBRARY         commondialogs.lib  // Removed since CR 548
 LIBRARY         efsrv.lib
 LIBRARY         X509CertNameParser.lib
 LIBRARY         x509.lib
--- a/appinstaller/AppinstUi/group/daemon.mmp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/group/daemon.mmp	Thu Jul 22 16:35:01 2010 +0100
@@ -81,6 +81,7 @@
 LIBRARY        sif.lib               // USIF SW Installer FW
 LIBRARY        scrclient.lib
 LIBRARY        hbwidgets.lib         // For Symbian Device Dialogs
+LIBRARY        hbcore.lib	    // For HbIndicatorSymbian
 
 DEBUGLIBRARY   flogger.lib
 
--- a/appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidialog.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidialog.h	Thu Jul 22 16:35:01 2010 +0100
@@ -23,7 +23,7 @@
 #include "sifuidialogdefinitions.h"     // enum SifUiDeviceDialogType
 #include <qmobilityglobal.h>            // QTM namespace macros
 
-class QTranslator;
+class HbTranslator;
 class SifUiDialogTitleWidget;
 class SifUiDialogContentWidget;
 class HbIndicator;
@@ -53,9 +53,6 @@
     void closeDeviceDialog(bool byClient);
     HbDialog *deviceDialogWidget() const;
 
-protected:  // from HbDialog
-    void closeEvent(QCloseEvent *event);
-
 signals:
     void deviceDialogClosed();
     void deviceDialogData(const QVariantMap &data);
@@ -65,28 +62,26 @@
     void showEvent(QShowEvent *event);
 
 private:    // new functions
-    void installTranslator();
-    void removeTranslator();
+    bool isInstallIndicatorActive();
     bool constructDialog(const QVariantMap &parameters);
     bool updateFromParameters(const QVariantMap &parameters);
-    void updateButtons();
-    void sendResult(bool accepted);
+    void updateButtons(const QVariantMap &parameters);
+    void sendResult(SifUiDeviceDialogReturnValue value);
     void monitorIndicatorActivity();
 
 private slots:
     void handleAccepted();
     void handleCancelled();
     void handleMemorySelectionChanged(const QChar &driveLetter);
-    void handleDisplayCertificateDetails();
     void handleHidePressed();
-    void handleIndicatorActivityChanged();
     void handleShowInstalled();
     void handleErrorDetails();
 
 private:
     Q_DISABLE_COPY(SifUiDialog)
 
-    QTranslator *mTranslator;
+    HbTranslator *mCommonTranslator;
+    HbTranslator *mSifUITranslator;
     int mLastDialogError;
     bool mShowEventReceived;
     SifUiDeviceDialogType mDialogType;
@@ -94,7 +89,8 @@
     SifUiDialogContentWidget *mContent;
     int mInstallError;
     QVariantMap mResultMap;
-    HbAction *mIgnoreCloseAction;
+    HbAction *mPrimaryAction;
+    HbAction *mSecondaryAction;
     HbIndicator *mIndicator;
 
     QTM_PREPEND_NAMESPACE(QValueSpaceSubscriber) *mSubscriber;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidialogcertificatedetails.h	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2010 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: Certificate details dialog in SifUi
+*
+*/
+
+#ifndef SIFUIDIALOGCERTIFICATEDETAILS_H
+#define SIFUIDIALOGCERTIFICATEDETAILS_H
+
+#include <hbdialog.h>                   // HbDialog
+
+class SifUiDialogCertificateInfo;
+
+
+/**
+ * SifUi certificate details dialog. Implements selection list and
+ * certificate details dialogs. Selection list is shown first if there
+ * are more than one certificate to be displayed.
+ */
+class SifUiDialogCertificateDetails : public HbDialog
+{
+    Q_OBJECT
+
+public:     // constructor and destructor
+    SifUiDialogCertificateDetails(const QList<SifUiDialogCertificateInfo*> &certificates);
+    virtual ~SifUiDialogCertificateDetails();
+
+public:     // new functions
+    void showDetails();
+
+private:    // new functions
+    QString certificateDetails(const SifUiDialogCertificateInfo& certificate);
+    void showList();
+
+private slots:
+    void certificateSelected();
+    void showCertificate(int index);
+
+private:    // data
+    const QList<SifUiDialogCertificateInfo*> &mCertificates;
+};
+
+#endif // SIFUICERTIFICSIFUIDIALOGCERTIFICATEDETAILS_HATES_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidialogcertificateinfo.h	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2010 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: Certificate info class for SIF UI device dialog plugin.
+*
+*/
+
+#ifndef SIFUIDIALOGCERTIFICATEINFO_H
+#define SIFUIDIALOGCERTIFICATEINFO_H
+
+#include <QDateTime>
+
+/**
+ * Certificate info class for SifUi device dialogs.
+ * This class corresponds to Symbian-side CSifUiCertificateInfo class.
+ */
+class SifUiDialogCertificateInfo
+{
+public:     // constructor and destructor
+    SifUiDialogCertificateInfo(const QString &subject, const QString &issuer,
+        const QByteArray &fingerprint, const QByteArray &serialNumber,
+        const QDateTime &validFrom, const QDateTime &validTo);
+    virtual ~SifUiDialogCertificateInfo();
+
+public:     // new functions
+    const QString subjectName() const;
+    const QString issuerName() const;
+    const QByteArray fingerprint() const;
+    const QString formattedFingerprint() const;
+    const QByteArray serialNumber() const;
+    const QString formattedSerialNumber() const;
+    const QDateTime validFrom() const;
+    const QDateTime validTo() const;
+
+private:
+    QString mSubjectName;
+    QString mIssuerName;
+    QByteArray mFingerprint;
+    QByteArray mSerialNumber;
+    QDateTime mValidFrom;
+    QDateTime mValidTo;
+};
+
+#endif // SIFUIDIALOGCERTIFICATEINFO_H
--- a/appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidialogcontentwidget.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidialogcontentwidget.h	Thu Jul 22 16:35:01 2010 +0100
@@ -41,11 +41,6 @@
     void updateFromParameters(const QVariantMap &parameters);
     void changeType(SifUiDeviceDialogType type);
 
-    QString applicationName() const;
-    bool isDefaultIconUsed() const;
-    void iconHandles(int &iconHandle, int &maskHandle) const;
-    void progressInfo(int &finalValue, int &currentValue) const;
-
 signals:
     void memorySelectionChanged(const QChar &driveLetter);
 
@@ -59,6 +54,7 @@
     void removeDetails();
     void addDetails(const QStringList &detailList);
     void addDetail(const QString &detailText);
+    void createAppName(const QString &appName);
     void updateAppIcon(const QVariantMap &parameters);
     void updateAppSize(const QVariantMap &parameters);
     bool updateMemorySelection(const QVariantMap &parameters);
--- a/appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidialogdefinitions.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidialogdefinitions.h	Thu Jul 22 16:35:01 2010 +0100
@@ -27,12 +27,19 @@
     SifUiErrorNote = 4
     };
 
+enum SifUiDeviceDialogReturnValue
+    {
+    SifUiContinue = 0,
+    SifUiCancel = 1,
+    SifUiIndicator = 3
+    };
+
 // Variant map keys for dialog type and title (common to all dialog types)
 const QString KSifUiDialogType = "type";                // enum SifUiDeviceDialogType
 const QString KSifUiDialogTitle = "title";              // string
 
 // Variant map keys for device dialog return values
-const QString KSifUiQueryAccepted = "accept";           // boolean
+const QString KSifUiQueryReturnValue = "ret";           // enum SifUiDeviceDialogReturnValue
 const QString KSifUiSelectedMemory = "drv";             // drive letter
 
 // Variant map keys for "confirmation query" dialog parameters
@@ -43,13 +50,19 @@
 const QString KSifUiApplicationSize = "size";           // integer
 const QString KSifUiApplicationDetails = "details";     // string list
 const QString KSifUiMemorySelection = "mem";            // string (comma separated drive letters)
-const QString KSifUiCertificates = "cert";              // string list ??
+const QString KSifUiCertificates = "cert";              // binary
 
 // Variant map keys for "progress note" dialog parameters
 const QString KSifUiProgressNoteText = "txt";           // string
 const QString KSifUiProgressNoteFinalValue = "fin";     // integer
 const QString KSifUiProgressNoteValue = "val";          // integer
 
+// Variant map keys for "progress note" and "installation complete note" buttons
+const QString KSifUiProgressNoteIsHideButtonHidden = "hidebtn";     // boolean
+const QString KSifUiProgressNoteIsCancelButtonHidden = "cancelbtn"; // boolean
+const QString KSifUiCompleteNoteIsShowButtonHidden = "showbtn";     // boolean
+const QString KSifUiErrorNoteIsDetailsButtonHidden = "errdtlbtn";   // boolean
+
 // Variant map keys for "error" dialog parameters
 const QString KSifUiErrorCode = "err";                  // integer
 const QString KSifUiErrorMessage = "msg";               // string
--- a/appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidialogtitlewidget.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/inc/sifuidialogtitlewidget.h	Thu Jul 22 16:35:01 2010 +0100
@@ -20,10 +20,12 @@
 
 #include <hbwidget.h>
 #include "sifuidialogdefinitions.h"         // SifUiDeviceDialogType, SifUiDeviceDialogMode
+#include "sifuidialogcertificateinfo.h"     // SifUiDialogCertificateInfo
 
 class QGraphicsLinearLayout;
 class HbLabel;
 class HbPushButton;
+class SifUiDialogCertificateDetails;
 
 
 class SifUiDialogTitleWidget : public HbWidget
@@ -37,19 +39,22 @@
     void constructFromParameters(const QVariantMap &parameters);
     void updateFromParameters(const QVariantMap &parameters);
 
-signals:
-    void certificatesClicked();
-
 private:
     Q_DISABLE_COPY(SifUiDialogTitleWidget)
     QString defaultTitle(SifUiDeviceDialogType type);
-    void createCertButton();
-    void removeCertButton();
+    void updateTitle(const QVariantMap &parameters);
+    void updateCertificates(const QVariantMap &parameters);
+    QList<SifUiDialogCertificateInfo*> *getCertificates(QByteArray array);
+
+private slots:
+    void certificatesClicked();
 
 private:    // data
     QGraphicsLinearLayout *mLayout;
     HbLabel *mTitle;
     HbPushButton *mCertButton;
+    QList<SifUiDialogCertificateInfo*> *mCertificates;
+    SifUiDialogCertificateDetails *mDetailsDialog;
 };
 
 #endif // SIFUIDIALOGTITLEWIDGET_H
--- a/appinstaller/AppinstUi/sifuidevicedialogplugin/rom/sifuidevicedialogplugin_resources.iby	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/rom/sifuidevicedialogplugin_resources.iby	Thu Jul 22 16:35:01 2010 +0100
@@ -20,7 +20,6 @@
 
 #include <data_caging_paths_for_iby.hrh>
 
-// TODO: enable when translations ready
-//data=DATAZ_/QT_TRANSLATIONS_DIR/sifuidevicedialogplugin.qm QT_TRANSLATIONS_DIR/sifuidevicedialogplugin.qm
+data=DATAZ_/QT_TRANSLATIONS_DIR/sifuidevicedialogplugin.qm QT_TRANSLATIONS_DIR/sifuidevicedialogplugin.qm
 
 #endif  // SIFUIDEVICEDIALOGPLUGIN_RESOURCES_IBY
--- a/appinstaller/AppinstUi/sifuidevicedialogplugin/sifuidevicedialogplugin.pro	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/sifuidevicedialogplugin.pro	Thu Jul 22 16:35:01 2010 +0100
@@ -16,9 +16,8 @@
 
 TEMPLATE = lib
 TARGET = sifuidevicedialogplugin
-CONFIG += plugin
-CONFIG += hb
-#TRANSLATIONS = sifuidevicedialogplugin.ts
+CONFIG += hb plugin
+TRANSLATIONS = sifuidevicedialogplugin.ts
 
 INCLUDEPATH += .
 INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE
@@ -31,31 +30,37 @@
     inc/sifuidialogdefinitions.h \
     inc/sifuidialog.h \
     inc/sifuidialogtitlewidget.h \
-    inc/sifuidialogcontentwidget.h
+    inc/sifuidialogcontentwidget.h \
+    inc/sifuidialogcertificateinfo.h \
+    inc/sifuidialogcertificatedetails.h
 
 SOURCES += src/sifuidevicedialogplugin.cpp \
     src/sifuidialog.cpp \
     src/sifuidialogtitlewidget.cpp \
-    src/sifuidialogcontentwidget.cpp
+    src/sifuidialogcontentwidget.cpp \
+    src/sifuidialogcertificateinfo.cpp \
+    src/sifuidialogcertificatedetails.cpp
 
 symbian: {
     TARGET.EPOCALLOWDLLDATA = 1
     TARGET.CAPABILITY = CAP_GENERAL_DLL
     TARGET.UID3 = 0x2002C3AC
 
+    SOURCES += src/sifuidialogtitlewidget_symbian.cpp
+
     pluginstub.sources = sifuidevicedialogplugin.dll
     pluginstub.path = /resource/plugins/devicedialogs
     DEPLOYMENT += pluginstub
 
-	LIBS += -lfbscli -lPlatformEnv
+    LIBS += -lfbscli -lPlatformEnv -lestor
 }
 
 BLD_INF_RULES.prj_exports += \
-  "$${LITERAL_HASH}include <platform_paths.hrh>" \
-  "qmakepluginstubs/sifuidevicedialogplugin.qtplugin /epoc32/data/z/pluginstub/sifuidevicedialogplugin.qtplugin" \
-  "inc/sifuidialogdefinitions.h MW_LAYER_PLATFORM_EXPORT_PATH(sifuidialogdefinitions.h)" \
-  "rom/sifuidevicedialogplugin.iby CORE_MW_LAYER_IBY_EXPORT_PATH(sifuidevicedialogplugin.iby)" \
-  "rom/sifuidevicedialogplugin_resources.iby LANGUAGE_MW_LAYER_IBY_EXPORT_PATH(sifuidevicedialogplugin_resources.iby)"
+    "$${LITERAL_HASH}include <platform_paths.hrh>" \
+    "qmakepluginstubs/sifuidevicedialogplugin.qtplugin /epoc32/data/z/pluginstub/sifuidevicedialogplugin.qtplugin" \
+    "inc/sifuidialogdefinitions.h MW_LAYER_PLATFORM_EXPORT_PATH(sifuidialogdefinitions.h)" \
+    "rom/sifuidevicedialogplugin.iby CORE_MW_LAYER_IBY_EXPORT_PATH(sifuidevicedialogplugin.iby)" \
+    "rom/sifuidevicedialogplugin_resources.iby LANGUAGE_MW_LAYER_IBY_EXPORT_PATH(sifuidevicedialogplugin_resources.iby)"
 
 LIBS += -lxqservice
 
--- a/appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidevicedialogplugin.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidevicedialogplugin.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -91,7 +91,7 @@
     Q_UNUSED(deviceDialogType);
     Q_UNUSED(parameters);
 
-    info->group = DeviceNotificationDialogGroup;
+    info->group = GenericDeviceDialogGroup;
     info->flags = NoDeviceDialogFlags;
     info->priority = DefaultPriority;
 
--- a/appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialog.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialog.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -19,19 +19,20 @@
 #include "sifuidialogtitlewidget.h"
 #include "sifuidialogcontentwidget.h"
 #include "sifuiinstallindicatorparams.h"
+#include <QFile>
 #include <hblabel.h>
 #include <hbaction.h>
 #include <hbindicator.h>
-#include <QTranslator>
-#include <QApplication>                     // qApp()
-#include <QFile>
+#include <hbtranslator.h>
 #include <hbmessagebox.h>
 #include <qvaluespacesubscriber.h>
+#include <xqappmgr.h>                       // XQApplicationManager
 
 QTM_USE_NAMESPACE
 
-const QString KTranslationsPath = "resource/qt/translations/";
-const QString KTranslationsFile = "sifuidevicedialogplugin";
+const QString KTranslationsPath = "/resource/qt/translations/";
+const QString KSifUiTranslationsFile = "sifuidevicedialogplugin";
+const QString KCommonTranslationsFile = "common";
 const QString KSwiErrorsFile = "c:\\temp\\swierrors.txt";
 const QString KSwiErrorFormat = " (%1)";
 
@@ -41,13 +42,13 @@
 // ----------------------------------------------------------------------------
 //
 SifUiDialog::SifUiDialog(const QVariantMap &parameters) : HbDialog(),
-    mLastDialogError(KErrNone), mShowEventReceived(false),
-    mDialogType(SifUiUnspecifiedDialog),
-    mTitle(0), mContent(0), mResultMap(),
-    mIgnoreCloseAction(0), mIndicator(0), mSubscriber(0)
+    mCommonTranslator(0), mSifUITranslator(0), mLastDialogError(KErrNone),
+    mShowEventReceived(false), mDialogType(SifUiUnspecifiedDialog),
+    mTitle(0), mContent(0), mResultMap(), mPrimaryAction(0),
+    mSecondaryAction(0), mIndicator(0), mSubscriber(0)
 {
-    // TODO: enable when translations ready
-    //installTranslator();
+    mCommonTranslator = new HbTranslator(KTranslationsPath, KCommonTranslationsFile);
+    mSifUITranslator = new HbTranslator(KTranslationsPath, KSifUiTranslationsFile);
     constructDialog(parameters);
 }
 
@@ -58,9 +59,10 @@
 SifUiDialog::~SifUiDialog()
 {
     delete mSubscriber;
-
-    // TODO: enable when translations ready
-    //removeTranslator();
+    delete mPrimaryAction;
+    delete mSecondaryAction;
+    delete mSifUITranslator;
+    delete mCommonTranslator;
 }
 
 // ----------------------------------------------------------------------------
@@ -84,7 +86,8 @@
 //
 bool SifUiDialog::setDeviceDialogParameters(const QVariantMap &parameters)
 {
-   return updateFromParameters(parameters);
+    setVisible(!isInstallIndicatorActive());
+    return updateFromParameters(parameters);
 }
 
 // ----------------------------------------------------------------------------
@@ -122,23 +125,6 @@
 }
 
 // ----------------------------------------------------------------------------
-// SifUiDialog::closeEvent()
-// ----------------------------------------------------------------------------
-//
-void SifUiDialog::closeEvent(QCloseEvent *event)
-{
-    if (mIgnoreCloseAction) {
-        HbAction *closingAction = qobject_cast<HbAction *>(sender());
-        if (closingAction == mIgnoreCloseAction) {
-            // Prevents the dialog from begin closed when "Ok" pressed
-            event->ignore();
-            return;
-        }
-    }
-    HbDialog::closeEvent(event);
-}
-
-// ----------------------------------------------------------------------------
 // SifUiDialog::hideEvent()
 // ----------------------------------------------------------------------------
 //
@@ -159,28 +145,23 @@
 }
 
 // ----------------------------------------------------------------------------
-// SifUiDialog::installTranslator()
+// SifUiDialog::isInstallIndicatorActive()
 // ----------------------------------------------------------------------------
 //
-void SifUiDialog::installTranslator()
+bool SifUiDialog::isInstallIndicatorActive()
 {
-    mTranslator = new QTranslator(this);
-    QString lang = QLocale::system().name();
-    mTranslator->load(KTranslationsFile + lang, KTranslationsPath);
-    qApp->installTranslator(mTranslator);
-}
-
-// ----------------------------------------------------------------------------
-// SifUiDialog::removeTranslator()
-// ----------------------------------------------------------------------------
-//
-void SifUiDialog::removeTranslator()
-{
-    QApplication *app = qApp;
-    if (mTranslator && app) {
-        app->removeTranslator(mTranslator);
-        mTranslator = 0;
+    bool isActive = false;
+    if (!mSubscriber) {
+        mSubscriber = new QTM_PREPEND_NAMESPACE(QValueSpaceSubscriber(
+            KSifUiInstallIndicatorStatusPath));
     }
+    QVariant variant = mSubscriber->value();
+    bool valueOk = false;
+    int intValue = variant.toInt(&valueOk);
+    if (valueOk && intValue) {
+        isActive = true;
+    }
+    return isActive;
 }
 
 // ----------------------------------------------------------------------------
@@ -195,15 +176,11 @@
 
     mDialogType = dialogType(parameters);
 
-    // Title
     Q_ASSERT(mTitle == 0);
     mTitle = new SifUiDialogTitleWidget(this);
     mTitle->constructFromParameters(parameters);
-    connect(mTitle, SIGNAL(certificatesClicked()),
-            this, SLOT(handleDisplayCertificateDetails()));
     setHeadingWidget(mTitle);
 
-    // Content
     Q_ASSERT(mContent == 0);
     mContent = new SifUiDialogContentWidget(this);
     mContent->constructFromParameters(parameters);
@@ -211,8 +188,7 @@
             this, SLOT(handleMemorySelectionChanged(const QChar &)));
     setContentWidget(mContent);
 
-    // Buttons
-    updateButtons();
+    updateButtons(parameters);
 
     return true;
 }
@@ -234,10 +210,14 @@
         mContent->updateFromParameters(parameters);
         }
     if (prevDialogType != mDialogType) {
-        updateButtons();
+        updateButtons(parameters);
     }
     if (parameters.contains(KSifUiErrorCode)) {
-        mInstallError = parameters.value(KSifUiErrorCode).toInt();
+        bool ok = false;
+        int errorCode = parameters.value(KSifUiErrorCode).toInt(&ok);
+        if (ok) {
+            mInstallError = errorCode;
+        }
     }
     return true;
 }
@@ -246,105 +226,98 @@
 // SifUiDialog::updateButtons()
 // ----------------------------------------------------------------------------
 //
-void SifUiDialog::updateButtons()
+void SifUiDialog::updateButtons(const QVariantMap &parameters)
 {
-    mIgnoreCloseAction = 0;
-
-    HbAction *primaryAction = 0;
+    if (mPrimaryAction) {
+        removeAction(mPrimaryAction);
+        delete mPrimaryAction;
+        mPrimaryAction = 0;
+    }
     switch (mDialogType) {
         case SifUiConfirmationQuery:
             //: Accepts the SW install confirmation query and starts installation.
-            // TODO: enable when translations ready
-            //primaryAction = new HbAction(hbTrId("txt_sisxui_install_ok"), this);
-            primaryAction = new HbAction(tr("Ok"), this);
-            connect(primaryAction, SIGNAL(triggered()), this, SLOT(handleAccepted()));
-            mIgnoreCloseAction = primaryAction;
+            mPrimaryAction = new HbAction(hbTrId("txt_common_button_ok"));
+            addAction(mPrimaryAction);
+            disconnect(mPrimaryAction, SIGNAL(triggered()), this, SLOT(close()));
+            connect(mPrimaryAction, SIGNAL(triggered()), this, SLOT(handleAccepted()));
             break;
         case SifUiProgressNote:
-            //: Hides the progress dialog. Progress note moves into universal indicator.
-            // TODO: enable when translations ready
-            //primaryAction = new HbAction(hbTrId("txt_sisxui_install_hide"), this);
-            primaryAction = new HbAction(tr("Hide"), this);
-            connect(primaryAction, SIGNAL(triggered()), this, SLOT(handleHide()));
-            mIgnoreCloseAction = primaryAction;
+            if (!parameters.contains(KSifUiProgressNoteIsHideButtonHidden)) {
+                //: Hides the progress dialog. Progress note moves into universal indicator.
+                mPrimaryAction = new HbAction(hbTrId("txt_common_button_hide"));
+                addAction(mPrimaryAction);
+                disconnect(mPrimaryAction, SIGNAL(triggered()), this, SLOT(close()));
+                connect(mPrimaryAction, SIGNAL(triggered()), this, SLOT(handleHidePressed()));
+            }
             break;
         case SifUiCompleteNote:
-            //: Opens Application Library to view the installed application.
-            // TODO: enable when translations ready
-            //primaryAction = new HbAction(hbTrId("txt_sisxui_install_show"), this);
-            primaryAction = new HbAction(tr("Show"), this);
-            connect(primaryAction, SIGNAL(triggered()), this, SLOT(handleShowInstalled()));
-            mIgnoreCloseAction = primaryAction;
+            if (!parameters.contains(KSifUiCompleteNoteIsShowButtonHidden)) {
+                //: Opens Application Library to view the installed application.
+                mPrimaryAction = new HbAction(hbTrId("txt_installer_button_show"));
+                addAction(mPrimaryAction);
+                disconnect(mPrimaryAction, SIGNAL(triggered()), this, SLOT(close()));
+                connect(mPrimaryAction, SIGNAL(triggered()), this, SLOT(handleShowInstalled()));
+            }
             break;
         case SifUiErrorNote:
-            //: Shows a dialog with further info about the failure (i.e. why installation failed).
-            // TODO: enable when translations ready
-            //primaryAction = new HbAction(hbTrId("txt_sisxui_install_error_details"), this);
-            primaryAction = new HbAction(tr("Details"), this);
-            connect(primaryAction, SIGNAL(triggered()), this, SLOT(handleErrorDetails()));
-            mIgnoreCloseAction = primaryAction;
+            if (!parameters.contains(KSifUiErrorNoteIsDetailsButtonHidden)) {
+                //: Shows a dialog with further info about the failure (i.e. why installation failed).
+                mPrimaryAction = new HbAction(hbTrId("txt_installer_button_details"));
+                addAction(mPrimaryAction);
+                disconnect(mPrimaryAction, SIGNAL(triggered()), this, SLOT(close()));
+                connect(mPrimaryAction, SIGNAL(triggered()), this, SLOT(handleErrorDetails()));
+            }
             break;
         default:
             break;
     }
-    setPrimaryAction(primaryAction);
 
-    HbAction *secondaryAction = 0;
+    if (mSecondaryAction) {
+        removeAction(mSecondaryAction);
+        delete mSecondaryAction;
+        mSecondaryAction = 0;
+    }
     switch (mDialogType) {
         case SifUiConfirmationQuery:
         case SifUiProgressNote:
-            //: Cancels the SW install confirmation query and closes the dialog.
-            // TODO: enable when translations ready
-            //secondaryAction = new HbAction(hbTrId("txt_sisxui_install_cancel"), this);
-            secondaryAction = new HbAction(tr("Cancel"), this);
-            connect(secondaryAction, SIGNAL(triggered()), this, SLOT(handleCancelled()));
+            if (!parameters.contains(KSifUiProgressNoteIsCancelButtonHidden)) {
+                //: Cancels the SW install confirmation query and closes the dialog.
+                mSecondaryAction = new HbAction(hbTrId("txt_common_button_cancel"));
+                addAction(mSecondaryAction);
+                disconnect(mSecondaryAction, SIGNAL(triggered()), this, SLOT(close()));
+                connect(mSecondaryAction, SIGNAL(triggered()), this, SLOT(handleCancelled()));
+            }
             break;
         case SifUiCompleteNote:
         case SifUiErrorNote:
             //: Closes the dialog. Control returns back to where the installation was started.
-            // TODO: enable when translations ready
-            //secondaryAction = new HbAction(hbTrId("txt_sisxui_install_close"), this);
-            secondaryAction = new HbAction(tr("Close"), this);
-            connect(secondaryAction, SIGNAL(triggered()), this, SLOT(close()));
+            mSecondaryAction = new HbAction(hbTrId("txt_common_button_close"));
+            addAction(mSecondaryAction);
             break;
         default:
             break;
     }
-    setSecondaryAction(secondaryAction);
 }
 
 // ----------------------------------------------------------------------------
 // SifUiDialog::sendResult()
 // ----------------------------------------------------------------------------
 //
-void SifUiDialog::sendResult(bool accepted)
+void SifUiDialog::sendResult(SifUiDeviceDialogReturnValue value)
 {
-    QVariant acceptedValue(accepted);
-    mResultMap.insert(KSifUiQueryAccepted, acceptedValue);
+    QVariant returnValue(value);
+    mResultMap.insert(KSifUiQueryReturnValue, returnValue);
     emit deviceDialogData(mResultMap);
 }
 
 // ----------------------------------------------------------------------------
-// SifUiDialog::monitorIndicatorActivity()
-// ----------------------------------------------------------------------------
-//
-void SifUiDialog::monitorIndicatorActivity()
-{
-    if (!mSubscriber) {
-        mSubscriber = new QValueSpaceSubscriber(KSifUiInstallIndicatorStatusPath);
-        connect(mSubscriber, SIGNAL(contentsChanged()),
-            this, SLOT(handleIndicatorActivityChanged()));
-    }
-}
-
-// ----------------------------------------------------------------------------
 // SifUiDialog::handleAccepted()
 // ----------------------------------------------------------------------------
 //
 void SifUiDialog::handleAccepted()
 {
     mContent->changeType(SifUiProgressNote);
-    sendResult(true);
+    sendResult(SifUiContinue);
 }
 
 // ----------------------------------------------------------------------------
@@ -353,7 +326,8 @@
 //
 void SifUiDialog::handleCancelled()
 {
-    sendResult(false);
+    sendResult(SifUiCancel);
+    close();
 }
 
 // ----------------------------------------------------------------------------
@@ -367,48 +341,13 @@
 }
 
 // ----------------------------------------------------------------------------
-// SifUiDialog::handleDisplayCertificateDetails()
-// ----------------------------------------------------------------------------
-//
-void SifUiDialog::handleDisplayCertificateDetails()
-{
-    // TODO: display certificate details, or the following note:
-    HbMessageBox::warning(tr("Application is not certified. It's origin and authenticity cannot be proved."));
-}
-
-// ----------------------------------------------------------------------------
 // SifUiDialog::handleHidePressed()
 // ----------------------------------------------------------------------------
 //
 void SifUiDialog::handleHidePressed()
 {
-    if (!mIndicator) {
-        mIndicator = new HbIndicator(this);
-        QVariant applicationName(mContent->applicationName());
-        if (!mContent->isDefaultIconUsed()) {
-            // TODO: send icon to indicator
-        }
-        if (mIndicator->activate(KSifUiInstallIndicatorType, applicationName)) {
-            hide();
-            monitorIndicatorActivity();
-        }
-    }
-}
-
-// ----------------------------------------------------------------------------
-// SifUiDialog::handleIndicatorActivityChanged()
-// ----------------------------------------------------------------------------
-//
-void SifUiDialog::handleIndicatorActivityChanged()
-{
-    QVariant variant = mSubscriber->value();
-    if (variant.isValid() && (variant.type() == QVariant::Int)) {
-        bool valueOk = false;
-        int intValue = variant.toInt(&valueOk);
-        if (valueOk && intValue) {
-            show();
-        }
-    }
+    sendResult(SifUiIndicator);
+    hide();
 }
 
 // ----------------------------------------------------------------------------
@@ -417,8 +356,24 @@
 //
 void SifUiDialog::handleShowInstalled()
 {
-    // TODO: launch applib
-    HbMessageBox::warning(tr("Not implemented yet"));
+    QUrl openRecentView("appto://20022F35?activityname=AppLibRecentView");
+
+    XQApplicationManager applicationManager;
+    XQAiwRequest *request = applicationManager.create(openRecentView);
+    if (request) {
+        bool result = request->send();
+        if (result) {
+            closeDeviceDialog(false);
+        } else {
+            // TODO: proper error handling
+            int error = request->lastError();
+            QString messageText = tr("Unable to open AppLib. Error %1").arg(error);
+            HbMessageBox::warning(messageText);
+        }
+        delete request;
+    }
+
+    close();
 }
 
 // ----------------------------------------------------------------------------
@@ -429,7 +384,7 @@
 {
     // TODO: show proper error details dialog
     QString messageText;
-    messageText = tr("Not implemented yet.\n\nError code %1").arg(mInstallError);
+    messageText = tr("Error code %1").arg(mInstallError);
 
     if (QFile::exists(KSwiErrorsFile)) {
         messageText.append(KSwiErrorFormat.arg(mInstallError));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialogcertificatedetails.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,166 @@
+/*
+* Copyright (c) 2010 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: Certificate details dialog in SifUi
+*
+*/
+
+#include "sifuidialogcertificatedetails.h"      // SifUiCertificateDetails
+#include "sifuidialogcertificateinfo.h"         // SifUiDialogCertificateInfo
+#include <hblabel.h>                            // HbLabel
+#include <hbtextedit.h>                         // HbTextEdit
+#include <hbscrollbar.h>                        // HbScrollBar
+#include <hblistwidget.h>                       // HbListWidget
+#include <hblistwidgetitem.h>                   // HbListWidgetItem
+#include <hbaction.h>                           // HbAction
+#include <QTextStream>
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateDetails::SifUiDialogCertificateDetails()
+// ----------------------------------------------------------------------------
+//
+SifUiDialogCertificateDetails::SifUiDialogCertificateDetails(
+    const QList<SifUiDialogCertificateInfo*> &certificates) : HbDialog(),
+    mCertificates(certificates)
+{
+    setDismissPolicy(HbPopup::NoDismiss);
+    setTimeout(HbPopup::NoTimeout);
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateDetails::showDetails()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogCertificateDetails::showDetails()
+{
+    int count = mCertificates.count();
+    Q_ASSERT(count != 0);
+    if (count == 1) {
+        showCertificate(0);
+    } else {
+        showList();
+    }
+    open();
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateDetails::~SifUiDialogCertificateDetails()
+// ----------------------------------------------------------------------------
+//
+SifUiDialogCertificateDetails::~SifUiDialogCertificateDetails()
+{
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateDetails::certificateDetails()
+// ----------------------------------------------------------------------------
+//
+QString SifUiDialogCertificateDetails::certificateDetails(
+    const SifUiDialogCertificateInfo& certificate)
+{
+    // TODO: change to properly localizable string
+    QString details;
+    QTextStream stream(&details);
+    stream << tr("Issuer:\n")
+        << certificate.issuerName()
+        << endl << endl;
+    stream << tr("Subject:\n")
+        << certificate.subjectName()
+        << endl << endl;
+    stream << tr("Valid from:\n")
+        << certificate.validFrom().toString()
+        << endl << endl;
+    stream << tr("Valid until:\n")
+        << certificate.validTo().toString()
+        << endl << endl;
+    stream << tr("Serial number:\n")
+        << certificate.formattedSerialNumber()
+        << endl << endl;
+    stream << tr("Fingerprint (SHA1):\n")
+        << certificate.formattedFingerprint()
+        << endl;
+    return details;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateDetails::showList()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogCertificateDetails::showList()
+{
+    int count = mCertificates.count();
+    Q_ASSERT(count > 1);
+
+    // TODO: localisation
+    HbLabel *title = new HbLabel(tr("Select certificate"));
+    setHeadingWidget(title);
+
+    HbListWidget *listWidget = new HbListWidget;
+    for (int index = 0; index < count; ++index ) {
+        HbListWidgetItem *item = new HbListWidgetItem();
+        item->setData(QVariant(mCertificates.at(index)->subjectName()));
+        listWidget->addItem(item);
+    }
+    listWidget->setScrollDirections(Qt::Vertical);
+    listWidget->setFrictionEnabled(true);
+    listWidget->setScrollingStyle(HbScrollArea::PanWithFollowOn);
+    listWidget->verticalScrollBar()->setInteractive(true);
+    connect(listWidget, SIGNAL(activated(HbListWidgetItem*)),
+        this, SLOT(certificateSelected()));
+    setContentWidget(listWidget);
+
+    addAction(new HbAction(hbTrId("txt_common_button_close"), this));
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateDetails::certificateSelected()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogCertificateDetails::certificateSelected()
+{
+    QGraphicsWidget *content = contentWidget();
+    if (content->type() == Hb::ItemType_ListView) {
+        HbListWidget *listWidget = reinterpret_cast<HbListWidget*>(content);
+        int index = listWidget->currentRow();
+        if (index >= 0 && index < mCertificates.count()) {
+            showCertificate(index);
+        }
+    }
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateDetails::showCertificate()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogCertificateDetails::showCertificate(int index)
+{
+    // TODO: localisation
+    HbLabel *title = new HbLabel(tr("Certificate details"));
+    setHeadingWidget(title);
+
+    HbTextEdit *textEdit = new HbTextEdit;
+    Q_ASSERT(index >= 0 && index < mCertificates.count());
+    QString details = certificateDetails(*mCertificates[index]);
+    textEdit->setPlainText(details);
+    textEdit->setReadOnly(true);
+    textEdit->setCursorVisibility(Hb::TextCursorHidden);
+    // TODO: how to display scroll bar and not to show blue border(focus)?
+    setContentWidget(textEdit);
+
+    //: Closes the dialog. Control returns back to where the installation was started.
+    addAction(new HbAction(hbTrId("txt_common_button_close"), this));
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialogcertificateinfo.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,145 @@
+/*
+* Copyright (c) 2010 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: Certificate info class for SIF UI device dialog plugin.
+*
+*/
+
+#include "sifuidialogcertificateinfo.h"
+
+const char *KHexNumberFormatSimple = "%X";
+const char *KHexNumberFormatTwoDigitsWithLeadingZeroes = "%02X";
+const int KCharsPerBlock = 2;
+const char KBlockSeparator = ' ';
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateInfo::SifUiDialogCertificateInfo()
+// ----------------------------------------------------------------------------
+//
+SifUiDialogCertificateInfo::SifUiDialogCertificateInfo(const QString &subject,
+    const QString &issuer, const QByteArray &fingerprint, const QByteArray &serialNumber,
+    const QDateTime &validFrom, const QDateTime &validTo) :
+    mSubjectName(subject), mIssuerName(issuer), mFingerprint(fingerprint),
+    mSerialNumber(serialNumber), mValidFrom(validFrom), mValidTo(validTo)
+{
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateInfo::~SifUiDialogCertificateInfo()
+// ----------------------------------------------------------------------------
+//
+SifUiDialogCertificateInfo::~SifUiDialogCertificateInfo()
+{
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateInfo::subjectName()
+// ----------------------------------------------------------------------------
+//
+const QString SifUiDialogCertificateInfo::subjectName() const
+{
+    return mSubjectName;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateInfo::issuerName()
+// ----------------------------------------------------------------------------
+//
+const QString SifUiDialogCertificateInfo::issuerName() const
+{
+    return mIssuerName;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateInfo::fingerprint()
+// ----------------------------------------------------------------------------
+//
+const QByteArray SifUiDialogCertificateInfo::fingerprint() const
+{
+    return mFingerprint;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateInfo::formattedFingerprint()
+// ----------------------------------------------------------------------------
+//
+const QString SifUiDialogCertificateInfo::formattedFingerprint() const
+{
+    QString formatted;
+
+    QString number;
+    int blockIndex = 0;
+    int count = mFingerprint.count();
+    for (int index = 0; index < count; ++index) {
+        if (blockIndex == KCharsPerBlock) {
+            formatted.append(KBlockSeparator);
+            blockIndex = 0;
+        }
+        number.sprintf(KHexNumberFormatTwoDigitsWithLeadingZeroes,
+            static_cast<unsigned char>(mFingerprint.at(index)));
+        formatted.append(number);
+        ++blockIndex;
+    }
+
+    return formatted;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateInfo::serialNumber()
+// ----------------------------------------------------------------------------
+//
+const QByteArray SifUiDialogCertificateInfo::serialNumber() const
+{
+    return mSerialNumber;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateInfo::formattedSerialNumber()
+// ----------------------------------------------------------------------------
+//
+const QString SifUiDialogCertificateInfo::formattedSerialNumber() const
+{
+    QString formatted;
+
+    QString number;
+    int count = mSerialNumber.count();
+    for (int index = 0; index < count; ++index) {
+        number.sprintf(KHexNumberFormatSimple,
+            static_cast<unsigned char>(mSerialNumber.at(index)));
+        formatted.append(number);
+    }
+
+    return formatted;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateInfo::validFrom()
+// ----------------------------------------------------------------------------
+//
+const QDateTime SifUiDialogCertificateInfo::validFrom() const
+{
+    return mValidFrom;
+}
+
+// ----------------------------------------------------------------------------
+// SifUiDialogCertificateInfo::validTo()
+// ----------------------------------------------------------------------------
+//
+const QDateTime SifUiDialogCertificateInfo::validTo() const
+{
+    return mValidTo;
+}
+
--- a/appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialogcontentwidget.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialogcontentwidget.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -30,7 +30,8 @@
 #include <fbs.h>                            // CFbsBitmap
 #endif  // Q_OS_SYMBIAN
 
-const char KSifUiDefaultApplicationIcon[] = "qtg_large_application.svg";
+const char KSifUiDefaultApplicationIcon[] = "qtg_large_application";
+const char KSifUiErrorIcon[] = "qtg_large_warning";
 
 const int KSifUiKilo = 1024;
 const int KSifUiMega = 1024*1024;
@@ -137,8 +138,7 @@
     // Application name and version
     Q_ASSERT(mAppDetailsLayout == 0);
     mAppDetailsLayout = new QGraphicsLinearLayout(Qt::Vertical);
-    Q_ASSERT(mAppName == 0);
-    mAppName = new HbLabel(applicationName(parameters));
+    createAppName(applicationName(parameters));
     mAppDetailsLayout->addItem(mAppName);
 
     // Application size
@@ -159,7 +159,7 @@
     Q_ASSERT(mMemorySelection == 0);
     mMemorySelection = new HbComboBox;
     connect(mMemorySelection, SIGNAL(currentIndexChanged(int)),
-            this, SIGNAL(handleMemorySelectionChange(int)));
+            this, SLOT(handleMemorySelectionChange(int)));
     mStackedWidget->addWidget(mMemorySelection);
 
     Q_ASSERT(mProgressBar == 0);
@@ -198,9 +198,8 @@
                 mAppName->setPlainText(appNameStr);
             }
         } else {
-            HbLabel *appName = new HbLabel(appNameStr);
-            mAppDetailsLayout->insertItem(KAppNameIndex, appName);
-            mAppName = appName;
+            createAppName(appNameStr);
+            mAppDetailsLayout->insertItem(KAppNameIndex, mAppName);
         }
     }
 
@@ -252,57 +251,13 @@
 }
 
 // ----------------------------------------------------------------------------
-// SifUiDialogContentWidget::applicationName()
-// ----------------------------------------------------------------------------
-//
-QString SifUiDialogContentWidget::applicationName() const
-{
-    if (mAppName) {
-        return mAppName->plainText();
-    }
-    return QString();
-}
-
-// ----------------------------------------------------------------------------
-// SifUiDialogContentWidget::isDefaultIconUsed()
-// ----------------------------------------------------------------------------
-//
-bool SifUiDialogContentWidget::isDefaultIconUsed() const
-{
-    return (mBitmap != 0 && mMask != 0);
-}
-
-// ----------------------------------------------------------------------------
-// SifUiDialogContentWidget::iconHandles()
-// ----------------------------------------------------------------------------
-//
-void SifUiDialogContentWidget::iconHandles(int &iconHandle, int &maskHandle) const
-{
-    if (mBitmap && mMask) {
-        iconHandle = mBitmap->Handle();
-        maskHandle = mMask->Handle();
-    }
-}
-
-// ----------------------------------------------------------------------------
-// SifUiDialogContentWidget::progressInfo()
-// ----------------------------------------------------------------------------
-//
-void SifUiDialogContentWidget::progressInfo(int &finalValue, int &currentValue) const
-{
-    if (mProgressBar) {
-        finalValue = mProgressBar->maximum();
-        currentValue = mProgressBar->progressValue();
-    }
-}
-
-// ----------------------------------------------------------------------------
 // SifUiDialogContentWidget::handleMemorySelectionChange()
 // ----------------------------------------------------------------------------
 //
 void SifUiDialogContentWidget::handleMemorySelectionChange(int selectedIndex)
 {
     QChar selectedDrive = mDriveLetterList[selectedIndex][0];
+
     // TODO: save selected drive to cenrep
 
     emit memorySelectionChanged( selectedDrive );
@@ -319,13 +274,11 @@
         QString nameParam = parameters.value(KSifUiApplicationName).toString();
         if (parameters.contains(KSifUiApplicationVersion)) {
             QString versionParam = parameters.value(KSifUiApplicationVersion).toString();
-            //: Template for application name and version in SW install confirmation query.
-            //: %1 is the application name and %2 is the version number.
+            //: Custom layout ID parent. Template for application name and version in SW install
+            //: confirmation query. %1 is the application name and %2 is the version number.
             //: Version number consist of major, minor, and build numbers.
             //: For example: "Chess (v 1.01(123))".
-            // TODO: enable when translations ready
-            //appName = hbTrId("txt_sisxui_install_appname_version").arg(nameParam, versionParam);
-            appName = tr("%1 (v %2)").arg(nameParam, versionParam);
+            appName = hbTrId("txt_installer_list_appname_version").arg(nameParam, versionParam);
         } else {
             appName = nameParam;
         }
@@ -345,19 +298,13 @@
         if (size > 0) {
             if (size > KSifUiMega) {
                 //: Application size in SW install confirmation query, %1 is in megabytes
-                // TODO: enable when translations ready
-                //appSize = hbTrId("txt_sisxui_install_appsize_mb").arg(size/KSifUiMega);
-                appSize = tr("%1 MB").arg(size/KSifUiMega);
+                appSize = hbTrId("txt_installer_list_appsize_mb").arg(size/KSifUiMega);
             } else if(size > KSifUiKilo) {
                 //: Application size in SW install confirmation query, %1 is in kilobytes
-                // TODO: enable when translations ready
-                //appSize = hbTrId("txt_sisxui_install_appsize_kb").arg(size/KSifUiKilo);
-                appSize = tr("%1 kB").arg(size/KSifUiKilo);
+                appSize = hbTrId("txt_installer_list_appsize_kb").arg(size/KSifUiKilo);
             } else {
                 //: Application size in SW install confirmation query, %1 is in bytes
-                // TODO: enable when translations ready
-                //appSize = hbTrId("txt_sisxui_install_appsize_b").arg(size);
-                appSize = tr("%1 B").arg(size);
+                appSize = hbTrId("txt_installer_list_appsize_b").arg(size);
             }
         }
     }
@@ -403,17 +350,35 @@
 {
     Q_ASSERT(mAppDetailsLayout != 0);
     HbLabel *detailItem = new HbLabel(detailText);
+    detailItem->setTextWrapping(Hb::TextWordWrap);
+    detailItem->setFontSpec(HbFontSpec(HbFontSpec::Secondary));
     mAppDetailsLayout->addItem(detailItem);
 }
 
 // ----------------------------------------------------------------------------
+// SifUiDialogContentWidget::createAppName()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogContentWidget::createAppName(const QString &appName)
+{
+    Q_ASSERT(mAppName == 0);
+    mAppName = new HbLabel(appName);
+    mAppName->setTextWrapping(Hb::TextWordWrap);
+    mAppName->setFontSpec(HbFontSpec(HbFontSpec::Secondary));
+}
+
+// ----------------------------------------------------------------------------
 // SifUiDialogContentWidget::updateAppIcon()
 // ----------------------------------------------------------------------------
 //
 void SifUiDialogContentWidget::updateAppIcon(const QVariantMap &parameters)
 {
     Q_ASSERT(mAppIcon != 0);
-    if (parameters.contains(KSifUiApplicationIconHandle) &&
+
+    if (parameters.contains(KSifUiDialogType) &&
+        (parameters.value(KSifUiDialogType).toInt() == SifUiErrorNote)) {
+        mAppIcon->setIcon(HbIcon(KSifUiErrorIcon));
+    } else if (parameters.contains(KSifUiApplicationIconHandle) &&
         parameters.contains(KSifUiApplicationIconMaskHandle)) {
         int iconHandle = parameters.value(KSifUiApplicationIconHandle).toInt();
         int maskHandle = parameters.value(KSifUiApplicationIconMaskHandle).toInt();
@@ -449,6 +414,8 @@
                 }
             } else {
                 HbLabel *appSize = new HbLabel(appSizeStr);
+                appSize->setTextWrapping(Hb::TextWordWrap);
+                appSize->setFontSpec(HbFontSpec(HbFontSpec::Secondary));
                 mAppDetailsLayout->insertItem(KAppSizeIndex, appSize);
                 mAppSize = appSize;
             }
@@ -478,14 +445,18 @@
                         //: Drive name for internal phone memory with megabytes of free space.
                         //: %1 is replaced with drive letter (usually 'C')
                         //: %2 is replaced with available free space (in megabytes, MB)
-                        //TODO: use hbTrId("txt_sisxui_device_memory_mb") when available
+                        //TODO: enable when available
+                        //driveList.append(hbTrId("txt_installer_device_memory_mb")
+                        //    .arg(volume).arg(size/KSifUiMega));
                         driveList.append(tr("%1: Device (%L2 MB free)"
                             ).arg(volume).arg(size/KSifUiMega));
                     } else {
                         //: Drive name for internal phone memory with kilobytes of free space.
                         //: %1 is replaced with drive letter (usually 'C')
                         //: %2 is replaced with available free space (in kilobytes, kB)
-                        //TODO: use hbTrId("txt_sisxui_device_memory_kb") when available
+                        //TODO: enable when available
+                        //driveList.append(hbTrId("txt_installer_device_memory_kb")
+                        //    .arg(volume).arg(size/KSifUiKilo));
                         driveList.append(tr("%1: Device (%L2 kB free)"
                             ).arg(volume).arg(size/KSifUiKilo));
                     }
@@ -495,14 +466,18 @@
                         //: Drive name for mass storage with megabytes of free space.
                         //: %1 is replaced with drive letter (usually 'E')
                         //: %2 is replaced with available free space (in megabytes, MB)
-                        // TODO: use hbTrId("txt_sisxui_mass_storage_mb") when available
+                        // TODO: enable when available
+                        //driveList.append(hbTrId("txt_installer_mass_storage_mb")
+                        //    .arg(volume).arg(size/KSifUiMega));
                         driveList.append(tr("%1: Mass.mem (%L2 MB free)"
                             ).arg(volume).arg(size/KSifUiMega));
                     } else {
                         //: Drive name for mass storage with kilobytes of free space.
                         //: %1 is replaced with drive letter (usually 'E')
                         //: %2 is replaced with available free space (in kilobytes, kB)
-                        // TODO: use hbTrId("txt_sisxui_mass_storage_kb") when available
+                        // TODO: enable when available
+                        //driveList.append(hbTrId("txt_installer_mass_storage_kb")
+                        //    .arg(volume).arg(size/KSifUiKilo));
                         driveList.append(tr("%1: Mass.mem (%L2 kB free)"
                             ).arg(volume).arg(size/KSifUiKilo));
                     }
@@ -512,14 +487,18 @@
                         //: Drive name for memory card with megabytes of free space.
                         //: %1 is replaced with drive letter (usually 'F')
                         //: %2 is replaced with available free space (in megabytes, MB)
-                        // TODO: use hbTrId("txt_sisxui_memory_card_mb") when available
+                        // TODO: enable when available
+                        //driveList.append(hbTrId("txt_installer_memory_card_mb")
+                        //    .arg(volume).arg(size/KSifUiMega));
                         driveList.append(tr("%1: Mem.card (%L2 MB free)"
                             ).arg(volume).arg(size/KSifUiMega));
                     } else {
                         //: Drive name for memory card with kilobytes of free space.
                         //: %1 is replaced with drive letter (usually 'F')
                         //: %2 is replaced with available free space (in kilobytes, kB)
-                        // TODO: use hbTrId("txt_sisxui_memory_card_kb") when available
+                        // TODO: enable when available
+                        //driveList.append(hbTrId("txt_installer_memory_card_kb")
+                        //    .arg(volume).arg(size/KSifUiKilo));
                         driveList.append(tr("%1: Mem.card (%L2 kB free)"
                             ).arg(volume).arg(size/KSifUiKilo));
                     }
@@ -571,7 +550,14 @@
 {
     if (parameters.contains(KSifUiErrorCode)) {
         // TODO: proper error texts
-        QString errorText = tr("Error %1").arg(parameters.value(KSifUiErrorCode).toInt());
+        bool ok = false;
+        int errorCode = parameters.value(KSifUiErrorCode).toInt(&ok);
+        QString errorText;
+        if (ok) {
+            errorText = tr("Error %1").arg(errorCode);
+        } else {
+            errorText = tr("No error code.");
+        }
         mErrorText->setPlainText(errorText);
         mStackedWidget->setCurrentWidget(mErrorText);
         return true;
--- a/appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialogtitlewidget.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialogtitlewidget.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -17,22 +17,25 @@
 
 #include "sifuidialogtitlewidget.h"
 #include "sifuidialog.h"                    // dialogType, dialogMode
+#include "sifuidialogcertificatedetails.h"  // SifUiDialogCertificateDetails
 #include <QGraphicsLinearLayout>
 #include <hblabel.h>
 #include <hbpushbutton.h>
+#include <hbmessagebox.h>
 
-const char KSifUiCertTrusted[]    = "qtg_small_secure.svg";
-// TODO: enable when available, take also in use
-//const char KSifUiCertNotTrusted[] = "qtg_small_untrusted.svg";
+const char KSifUiCertTrusted[]    = "qtg_small_secure";
+const char KSifUiCertNotTrusted[] = "qtg_small_untrusted";
 
 
+// ======== MEMBER FUNCTIONS ========
+
 // ----------------------------------------------------------------------------
 // SifUiDialogTitleWidget::SifUiDialogTitleWidget()
 // ----------------------------------------------------------------------------
 //
 SifUiDialogTitleWidget::SifUiDialogTitleWidget(QGraphicsItem *parent,
         Qt::WindowFlags flags): HbWidget(parent, flags),
-        mLayout(0), mTitle(0), mCertButton(0)
+        mLayout(0), mTitle(0), mCertButton(0), mCertificates(0), mDetailsDialog(0)
 {
 }
 
@@ -42,6 +45,8 @@
 //
 SifUiDialogTitleWidget::~SifUiDialogTitleWidget()
 {
+    delete mDetailsDialog;
+    delete mCertificates;
 }
 
 // ----------------------------------------------------------------------------
@@ -51,22 +56,8 @@
 void SifUiDialogTitleWidget::constructFromParameters(const QVariantMap &parameters)
 {
     mLayout = new QGraphicsLinearLayout(Qt::Horizontal);
-
-    Q_ASSERT(mTitle == 0);
-    HbLabel *titleLabel = 0;
-    if (parameters.contains(KSifUiDialogTitle)) {
-        QString titleText = parameters.value(KSifUiDialogTitle).toString();
-        titleLabel = new HbLabel(titleText);
-    } else {
-        SifUiDeviceDialogType type = SifUiDialog::dialogType(parameters);
-        titleLabel = new HbLabel(defaultTitle(type));
-    }
-    titleLabel->setFontSpec(HbFontSpec(HbFontSpec::Title));
-    mLayout->addItem(titleLabel);
-    mTitle = titleLabel;
-
-    createCertButton();
-
+    updateTitle(parameters);
+    updateCertificates(parameters);
     setLayout(mLayout);
 }
 
@@ -76,18 +67,8 @@
 //
 void SifUiDialogTitleWidget::updateFromParameters(const QVariantMap &parameters)
 {
-    Q_ASSERT(mTitle != 0);
-
-    QString titleText;
-    if (parameters.contains(KSifUiDialogTitle)) {
-        titleText = parameters.value(KSifUiDialogTitle).toString();
-    } else {
-        SifUiDeviceDialogType type = SifUiDialog::dialogType(parameters);
-        titleText = defaultTitle(type);
-    }
-    if (titleText != mTitle->plainText()) {
-        mTitle->setPlainText(titleText);
-    }
+    updateTitle(parameters);
+    updateCertificates(parameters);
 }
 
 // ----------------------------------------------------------------------------
@@ -99,31 +80,23 @@
     QString title;
     switch (type) {
         case SifUiConfirmationQuery:
-            //: Install confirmation query title. Installation starts if
-            //: the user accepts the query.
-            // TODO: enable when translations ready
-            //title = hbTrId("txt_sisxui_install_conf_head");
-            title = tr("Install?");
+            //: Custom layout ID parent. Install confirmation query title.
+            //: Installation of an application starts if the user accepts the query.
+            title = hbTrId("txt_installer_title_install");
             break;
         case SifUiProgressNote:
-            //: Progress note title. Installation is going on and progress
-            //: bar shows how it proceeds.
-            // TODO: enable when translations ready
-            //title = hbTrId("txt_sisxui_installing_progress_head");
-            title = tr("Installing");
+            //: Progress note title. Installation is going on and progress bar
+            //: shows how it proceeds.
+            title = hbTrId("txt_installer_title_installing");
             break;
         case SifUiCompleteNote:
             //: Installation complete note title. Indicates that installation
-            //: was succesfully completed. User has option to launch AppLib
-            // TODO: enable when translations ready
-            //title = hbTrId("txt_sisxui_install_complete_head");
-            title = tr("Installed");
+            //: was succesfully completed. User has option to launch AppLib.
+            title = hbTrId("txt_installer_title_installed");
             break;
         case SifUiErrorNote:
             //: Installation failed note title. Indicates that installation failed.
-            // TODO: enable when translations ready
-            //title = hbTrId("txt_sisxui_install_failed_head");
-            title = tr("Install failed");
+            title = hbTrId("txt_installer_info_installation_failed");
             break;
         case SifUiUnspecifiedDialog:
         default:
@@ -133,33 +106,73 @@
 }
 
 // ----------------------------------------------------------------------------
-// SifUiDialogTitleWidget::createCertButton()
+// SifUiDialogTitleWidget::updateTitle()
 // ----------------------------------------------------------------------------
 //
-void SifUiDialogTitleWidget::createCertButton()
+void SifUiDialogTitleWidget::updateTitle(const QVariantMap &parameters)
 {
-    if (!mCertButton) {
-        HbPushButton *certButton = new HbPushButton;
-        // TODO: show KSifUiCertNotTrusted when needed (and when available)
-        certButton->setIcon(HbIcon(KSifUiCertTrusted));
-        connect(certButton,SIGNAL(clicked()),this,SIGNAL(certificatesClicked()));
-        mLayout->addStretch();
-        mLayout->addItem(certButton);
-        mLayout->setAlignment(certButton, Qt::AlignRight|Qt::AlignVCenter);
-        mCertButton = certButton;
+    QString titleText;
+    if (parameters.contains(KSifUiDialogTitle)) {
+        titleText = parameters.value(KSifUiDialogTitle).toString();
+    } else {
+        SifUiDeviceDialogType type = SifUiDialog::dialogType(parameters);
+        titleText = defaultTitle(type);
+    }
+    if (mTitle) {
+        if (titleText != mTitle->plainText()) {
+            mTitle->setPlainText(titleText);
+        }
+    } else {
+        mTitle = new HbLabel(titleText);
+        mTitle->setFontSpec(HbFontSpec(HbFontSpec::Title));
+        mLayout->addItem(mTitle);
     }
 }
 
 // ----------------------------------------------------------------------------
-// SifUiDialogTitleWidget::removeCertButton()
+// SifUiDialogTitleWidget::updateCertificates()
 // ----------------------------------------------------------------------------
 //
-void SifUiDialogTitleWidget::removeCertButton()
+void SifUiDialogTitleWidget::updateCertificates(const QVariantMap &parameters)
 {
-    if (mCertButton && mLayout) {
-        mLayout->removeItem(mCertButton);
-        delete mCertButton;
-        mCertButton = 0;
+    if (!mCertButton) {
+        mCertButton = new HbPushButton;
+        connect(mCertButton, SIGNAL(clicked()), this, SLOT(certificatesClicked()));
+
+        if (parameters.contains(KSifUiCertificates)) {
+            Q_ASSERT(mCertificates == 0);
+            mCertificates = getCertificates(parameters.value(KSifUiCertificates).toByteArray());
+            mCertButton->setIcon(HbIcon(KSifUiCertTrusted));
+        } else {
+            mCertButton->setIcon(HbIcon(KSifUiCertNotTrusted));
+        }
+
+        mLayout->addStretch();
+        mLayout->addItem(mCertButton);
+        mLayout->setAlignment(mCertButton, Qt::AlignRight|Qt::AlignVCenter);
+    } else {
+        if (mCertificates == 0 && parameters.contains(KSifUiCertificates)) {
+            mCertificates = getCertificates(parameters.value(KSifUiCertificates).toByteArray());
+            mCertButton->setIcon(HbIcon(KSifUiCertTrusted));
+        }
     }
 }
 
+// ----------------------------------------------------------------------------
+// SifUiDialogTitleWidget::certificatesClicked()
+// ----------------------------------------------------------------------------
+//
+void SifUiDialogTitleWidget::certificatesClicked()
+{
+    if (mCertificates) {
+        if (mDetailsDialog) {
+            delete mDetailsDialog;
+            mDetailsDialog = 0;
+        }
+        mDetailsDialog = new SifUiDialogCertificateDetails(*mCertificates);
+        mDetailsDialog->showDetails();
+    } else {
+        // TODO: localize
+        HbMessageBox::warning(tr("Application is not certified. It's origin and authenticity cannot be proved."));
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialogtitlewidget_symbian.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,118 @@
+/*
+* Copyright (c) 2010 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: SIF UI dialog title widget (SymbianOS specific part).
+*
+*/
+
+#include "sifuidialogtitlewidget.h"
+#include "sifuidialogcertificateinfo.h"     // SifUiDialogCertificateInfo
+#include <s32mem.h>                         // RDesReadStream
+
+
+// ======== LOCAL FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// readStringFromStreamL()
+// ----------------------------------------------------------------------------
+//
+QString readStringFromStreamL( RDesReadStream& aReadStream )
+{
+    TInt length = aReadStream.ReadInt32L();
+    HBufC* buf = HBufC::NewLC( length );
+    TPtr ptr( buf->Des() );
+    aReadStream.ReadL( ptr, length );
+    QString string = QString::fromUtf16( ptr.Ptr(), length );
+    CleanupStack::PopAndDestroy( buf );
+    return string;
+}
+
+// ----------------------------------------------------------------------------
+// readByteArrayFromStreamL()
+// ----------------------------------------------------------------------------
+//
+QByteArray readByteArrayFromStreamL( RDesReadStream& aReadStream )
+{
+    TInt length = aReadStream.ReadInt32L();
+    HBufC8* buf = HBufC8::NewLC( length );
+    TPtr8 ptr( buf->Des() );
+    aReadStream.ReadL( ptr, length );
+    QByteArray byteArray( reinterpret_cast< const char * >( ptr.Ptr() ), length );
+    CleanupStack::PopAndDestroy( buf );
+    return byteArray;
+}
+
+// ----------------------------------------------------------------------------
+// readDateFromStreamL()
+// ----------------------------------------------------------------------------
+//
+void readDateFromStreamL( RDesReadStream& aReadStream, QDateTime& aDateTime )
+{
+    TDateTime dateTimeSymbian;
+    TPckg<TDateTime> dateTimePckg( dateTimeSymbian );
+    aReadStream.ReadL( dateTimePckg );
+    QDate date( dateTimeSymbian.Year(), dateTimeSymbian.Month()+1, dateTimeSymbian.Day()+1 );
+    aDateTime.setDate( date );
+    QTime time( dateTimeSymbian.Hour(), dateTimeSymbian.Minute(), dateTimeSymbian.Second() );
+    aDateTime.setTime( time );
+}
+
+// ----------------------------------------------------------------------------
+// doGetCertificatesL()
+// ----------------------------------------------------------------------------
+//
+QList<SifUiDialogCertificateInfo*> *doGetCertificatesL( QByteArray aArray )
+{
+    QList<SifUiDialogCertificateInfo*> *list = new QList<SifUiDialogCertificateInfo*>;
+
+    const TPtrC8 ptr8( reinterpret_cast< const TText8* >( aArray.constData() ), aArray.size() );
+    RDesReadStream readStream;
+    CleanupClosePushL( readStream );
+    readStream.Open( ptr8 );
+
+    TInt certCount = readStream.ReadInt32L();
+    for( TInt index = 0; index < certCount; ++index )
+        {
+        QString subjectName = readStringFromStreamL( readStream );
+        QString issuerName = readStringFromStreamL( readStream );
+        QByteArray fingerprint = readByteArrayFromStreamL( readStream );
+        QByteArray serialNumber = readByteArrayFromStreamL( readStream );
+        QDateTime validFrom;
+        readDateFromStreamL( readStream, validFrom );
+        QDateTime validTo;
+        readDateFromStreamL( readStream, validTo );
+
+        SifUiDialogCertificateInfo *certInfo = new SifUiDialogCertificateInfo(
+            subjectName, issuerName, fingerprint, serialNumber, validFrom, validTo );
+        list->append( certInfo );
+        }
+
+    CleanupStack::PopAndDestroy( &readStream );
+    return list;
+}
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// SifUiDialogTitleWidget::SifUiDialogTitleWidget()
+// ----------------------------------------------------------------------------
+//
+QList<SifUiDialogCertificateInfo*> *SifUiDialogTitleWidget::getCertificates(
+    QByteArray array)
+{
+    QList<SifUiDialogCertificateInfo*> *list = 0;
+    QT_TRAP_THROWING(list = doGetCertificatesL(array));
+    return list;
+}
+
--- a/appinstaller/AppinstUi/sifuiinstallindicatorplugin/inc/sifuiinstallindicator.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/inc/sifuiinstallindicator.h	Thu Jul 22 16:35:01 2010 +0100
@@ -25,6 +25,13 @@
 class QValueSpacePublisher;
 QTM_END_NAMESPACE
 
+// Variant map keys for parameters
+const QString KSifUiInstallIndicatorAppNameKey = "name";    // QString
+const QString KSifUiInstallIndicatorPhaseKey = "phase";     // int (enum Phase)
+const QString KSifUiInstallIndicatorProgressKey = "prog";   // int (0..100)
+const QString KSifUiInstallIndicatorCompleteKey = "done";   // int (KErrNone or error code)
+const QString KSifUiInstallIndicatorIconKey = "icon";       // TBD
+
 
 /**
  * Software install progress indicator for the status indicator area
@@ -45,6 +52,11 @@
 protected:  // from HbIndicatorInterface
     bool handleClientRequest(RequestType type, const QVariant &parameter);
 
+private:    // new Symbian functions, TODO: move to symbian-specific code
+    void CreateNotifierL();
+    void StartListeningOperationsL();
+    void StopListeningOperationsL();
+
 private:    // new functions
     void processParameters(const QVariant &parameter);
     void publishActivityStatus(bool status);
@@ -54,6 +66,13 @@
     int mProgress;
     QTM_PREPEND_NAMESPACE(QValueSpacePublisher) *mPublisher;
     bool mIsActive;
+    enum Phase {
+        Installing,
+        Downloading,
+        CheckingCerts
+    } mPhase;
+    bool mIsComplete;
+    int mErrorCode;
 };
 
 #endif  // SIFUIINSTALLINDICATOR_H
--- a/appinstaller/AppinstUi/sifuiinstallindicatorplugin/sifuiinstallindicatorplugin.pro	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/sifuiinstallindicatorplugin.pro	Thu Jul 22 16:35:01 2010 +0100
@@ -48,5 +48,5 @@
 
 BLD_INF_RULES.prj_exports += \
     "$${LITERAL_HASH}include <platform_paths.hrh>" \
-    "rom/sifuiinstallindicatorplugin.iby CORE_APP_LAYER_IBY_EXPORT_PATH(sifuiinstallindicatorplugin.iby)"
+    "rom/sifuiinstallindicatorplugin.iby CORE_MW_LAYER_IBY_EXPORT_PATH(sifuiinstallindicatorplugin.iby)"
 
--- a/appinstaller/AppinstUi/sifuiinstallindicatorplugin/src/sifuiinstallindicator.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/src/sifuiinstallindicator.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -20,17 +20,37 @@
 #include <QVariant>
 #include <qvaluespacepublisher.h>
 
-const char KSifUiDefaultApplicationIcon[] = "qtg_large_application.svg";
+const char KSifUiDefaultApplicationIcon[] = "qtg_large_application";
+const char KSifUiErrorIcon[] = "qtg_large_warning";
 const QString KSifUiPathSeparator = "/";
 
 
+// ======== LOCAL FUNCTIONS =========
+
+// ---------------------------------------------------------------------------
+// getIntValue()
+// ---------------------------------------------------------------------------
+//
+void getIntValue(const QVariant &variant, int &value)
+{
+    bool ok = false;
+    int temp = variant.toInt(&ok);
+    if (ok) {
+        value = temp;
+    }
+}
+
+
+// ======== MEMBER FUNCTIONS ========
+
 // ---------------------------------------------------------------------------
 // SifUiInstallIndicator::SifUiInstallIndicator()
 // ---------------------------------------------------------------------------
 //
 SifUiInstallIndicator::SifUiInstallIndicator(const QString &indicatorType) :
     HbIndicatorInterface(indicatorType, HbIndicatorInterface::ProgressCategory,
-            InteractionActivated), mAppName(), mPublisher(0), mIsActive(false)
+            InteractionActivated), mAppName(), mProgress(0), mPublisher(0),
+            mIsActive(false), mPhase(Installing), mIsComplete(false), mErrorCode(0)
 {
     mPublisher = new QTM_PREPEND_NAMESPACE(QValueSpacePublisher(KSifUiInstallIndicatorPath));
 }
@@ -74,20 +94,60 @@
 
     switch(role) {
         case DecorationNameRole:
-            data = QString(KSifUiDefaultApplicationIcon);
+            if (mIsComplete && mErrorCode) {
+                data = QString(KSifUiErrorIcon);
+            } else {
+                // TODO: how to set application specific icon if defined?
+                data = QString(KSifUiDefaultApplicationIcon);
+            }
             break;
+
         case PrimaryTextRole:
-            //: Primary text for application installation progress displayed in
-            //: universal indicator menu. Secondary text is the application name.
-            // TODO: use localised UI string when available
-            data = tr("Installing");
-            // TODO: text must indicate installation phase, need to support also
-            // tr("Downloading") and tr("Doing OCSP checks")
+            if (mIsComplete) {
+                if (mErrorCode) {
+                    //: Indicates that application installation failed.
+                    // TODO: localized UI string needed
+                    data = tr("Installation failed");
+                } else {
+                    //: Indicates that application installation is completed.
+                    // TODO: localized UI string needed
+                    data = tr("Installed");
+                }
+            } else {
+                switch(mPhase) {
+                    case Installing:
+                        //: Indicates that application installation is ongoing.
+                        // TODO: localized UI string needed
+                        data = tr("Installing");
+                        break;
+                    case Downloading:
+                        //: Indicates that download is ongoing.
+                        // TODO: localized UI string needed
+                        data = tr("Downloading");
+                        break;
+                    case CheckingCerts:
+                        //: Indicates that OCSP check is ongoing.
+                        // TODO: localized UI string needed
+                        data = tr("Checking certificates");
+                        break;
+                    default:
+                        break;
+                }
+            }
             break;
+
         case SecondaryTextRole:
-            if (!mAppName.isEmpty()) {
-                data = tr("%1 (%L2 %)").arg(mAppName).arg(mProgress);
+            if (mIsComplete) {
+                data = mAppName;
+            } else {
+                if (!mAppName.isEmpty()) {
+                    //: Application name %1 followed by installation progress %L2
+                    // TODO: localized UI string needed
+                    data = tr("%1 (%L2 %)").arg(mAppName).arg(mProgress);
+                }
             }
+            break;
+
         default:
             break;
     }
@@ -125,12 +185,37 @@
 //
 void SifUiInstallIndicator::processParameters(const QVariant &parameter)
 {
-    if (parameter.isValid() && (parameter.type() == QVariant::String)) {
-        mAppName = parameter.toString();
-        mProgress = 0;
-
-        // TODO: get icon if standard icon needs to be replaced
-        // TODO: start listening USIF installation progress
+    if (parameter.isValid()) {
+        if (parameter.type() == QVariant::String) {
+            mAppName = parameter.toString();
+        } else if (parameter.type() == QVariant::Int) {
+            getIntValue(parameter, mProgress);
+        } else if (parameter.type() == QVariant::Map) {
+            QVariantMap map = parameter.toMap();
+            QMapIterator<QString,QVariant> iter(map);
+            while (iter.hasNext()) {
+                iter.next();
+                if (iter.key() == KSifUiInstallIndicatorAppNameKey) {
+                    mAppName = iter.value().toString();
+                } else if (iter.key() == KSifUiInstallIndicatorPhaseKey) {
+                    int value = Installing;
+                    getIntValue(iter.value(), value);
+                    mPhase = static_cast<Phase>(value);
+                } else if (iter.key() == KSifUiInstallIndicatorProgressKey) {
+                    getIntValue(iter.value(), mProgress);
+                } else if (iter.key() == KSifUiInstallIndicatorCompleteKey) {
+                    mIsComplete = true;
+                    mErrorCode = KErrNone;
+                    getIntValue(iter.value(), mErrorCode);
+                } else if (iter.key() == KSifUiInstallIndicatorIconKey) {
+                    // TODO: icon?
+                } else {
+                    // ignore other types
+                }
+            }
+        } else {
+            // ignore other types
+        }
     }
 }
 
--- a/appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/mt_sifuiinstallindicator/ctc_compile_tests.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/mt_sifuiinstallindicator/ctc_compile_tests.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -23,4 +23,5 @@
 echo.
 call qmake
 call make debug-winscw
+call make release-armv5
 
--- a/appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/mt_sifuiinstallindicator/ctc_instrument_code.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/mt_sifuiinstallindicator/ctc_instrument_code.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -17,16 +17,18 @@
 
 echo ----------------------------------------------------------------------
 echo.
-echo Instrumenting code (winscw udeb, function coverage)
+echo Instrumenting code (armv5 urel and winscw udeb, decision coverage)
 echo.
 echo ----------------------------------------------------------------------
 echo.
 pushd ..\..
 if exist MON.sym del MON.sym
 if exist MON.dat del MON.dat
+if exist profile.txt del profile.txt
 call qmake
 call make distclean
 call qmake
-call ctcwrap -i f -2comp -C "EXCLUDE+moc_*.cpp" -C "EXCLUDE+*.UID.CPP" -C "SKIP_FUNCTION_NAME+SifUiInstallIndicatorPlugin::error()" -C "SKIP_FUNCTION_NAME+qt_plugin_query_verification_data" -C "SKIP_FUNCTION_NAME+qt_plugin_instance" make debug-winscw
+call ctcwrap -i d -2comp -C "EXCLUDE+moc_*.cpp" -C "EXCLUDE+*.UID.CPP" -C "SKIP_FUNCTION_NAME+SifUiInstallIndicatorPlugin::error()" -C "SKIP_FUNCTION_NAME+qt_plugin_query_verification_data" -C "SKIP_FUNCTION_NAME+qt_plugin_instance" make debug-winscw
+call ctcwrap -i d -2comp -C "EXCLUDE+moc_*.cpp" -C "EXCLUDE+*.UID.CPP" -C "SKIP_FUNCTION_NAME+SifUiInstallIndicatorPlugin::error()" -C "SKIP_FUNCTION_NAME+qt_plugin_query_verification_data" -C "SKIP_FUNCTION_NAME+qt_plugin_instance" make release-armv5
 popd
 
--- a/appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/testindiapp/testindiapp.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/testindiapp/testindiapp.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description:  Test applicaiton for SW install indicator plugin
+* Description:  Test application for SW install indicator plugin
 *
 */
 
--- a/appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/testindiapp/testindiapp.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/testindiapp/testindiapp.h	Thu Jul 22 16:35:01 2010 +0100
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description:  Test applicaiton for SW install indicator plugin
+* Description:  Test application for SW install indicator plugin
 *
 */
 
--- a/appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/testindiapp/testindiapp.pro	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/testindiapp/testindiapp.pro	Thu Jul 22 16:35:01 2010 +0100
@@ -11,7 +11,7 @@
 #
 # Contributors:
 # 
-# Description:  Test applicaiton for SW install indicator plugin
+# Description:  Test application for SW install indicator plugin
 #
 
 TEMPLATE = app
--- a/appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/testindiapp/testindimain.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sifuiinstallindicatorplugin/tsrc/testindiapp/testindimain.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description:  Test applicaiton for SW install indicator plugin
+* Description:  Test application for SW install indicator plugin
 *
 */
 
--- a/appinstaller/AppinstUi/sisxsifplugin/group/sisxsifplugin.mmp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sisxsifplugin/group/sisxsifplugin.mmp	Thu Jul 22 16:35:01 2010 +0100
@@ -33,9 +33,12 @@
 SOURCE          sisxsifpluginmain.cpp
 SOURCE          sisxsifplugin.cpp
 SOURCE          sisxsifpluginactiveimpl.cpp
+SOURCE          sisxsifpluginuihandlerbase.cpp
 SOURCE          sisxsifpluginuihandler.cpp
+SOURCE          sisxsifpluginuihandlersilent.cpp
+SOURCE          sisxsifplugininstallparams.cpp
+SOURCE          sisxsifpluginerrorhandler.cpp
 SOURCE          sisxsifuiselectioncache.cpp
-SOURCE          sisxsifpluginuihandlersilent.cpp
 
 USERINCLUDE     ../inc
 USERINCLUDE     ../../../../installationservices/swi/inc
@@ -45,6 +48,7 @@
 LIBRARY         euser.lib               // User
 LIBRARY         ecom.lib                // ECom
 LIBRARY         sif.lib                 // USIF
+LIBRARY         sifnotification.lib     // Usif::CPublishSifOperationInfo
 LIBRARY         scrclient.lib           // SCR
 LIBRARY         sifui.lib               // CSifUi
 LIBRARY         sisregistryclient.lib   // Swi::RSisRegistrySession
@@ -56,3 +60,4 @@
 LIBRARY         pkixcertbase.lib        // CPKIXValidationResultBase
 LIBRARY         x509.lib                // TValidationStatus
 
+SMPSAFE
--- a/appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifplugin.pan	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifplugin.pan	Thu Jul 22 16:35:01 2010 +0100
@@ -28,7 +28,8 @@
     {
     ESisxSifInternalError = 1,
     ESisxSifNotInitialized,
-    ESisxSifNullPointer
+    ESisxSifNullPointer,
+    ESisxSifUnknownErrorCode
     };
 
 inline void Panic( TSisxSifPanicCode aReason )
--- a/appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifpluginactiveimpl.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifpluginactiveimpl.h	Thu Jul 22 16:35:01 2010 +0100
@@ -23,6 +23,7 @@
 #include <e32base.h>                    // CActive
 #include <swi/msisuihandlers.h>         // MUiHandler
 #include <usif/sif/sifcommon.h>         // TSecurityContext, COpaqueNamedParams
+#include <usif/usiferror.h>             // TErrorCategory
 #include <f32file.h>                    // RFs, RFile
 #include <barsc.h>                      // RResourceFile
 
@@ -34,8 +35,9 @@
 
 namespace Usif
 {
-    class CSisxSifPluginUiHandler;
-    class CSisxSifPluginUiHandlerSilent;
+    class CSisxSifPluginUiHandlerBase;
+    class CSisxSifPluginInstallParams;
+    class CSisxSifPluginErrorHandler;
 
     /**
      *  SISX SIF plugin active implementation
@@ -76,17 +78,24 @@
     private:    // new functions
         CSisxSifPluginActiveImpl();
         void ConstructL();
-        Swi::MUiHandler& UiHandlerL( TBool aUseSilentMode = EFalse );
-        void CommonRequestPreamble( const COpaqueNamedParams& aInputParams,
+        void CommonRequestPreambleL( TRequestStatus& aStatus );
+        void CommonRequestPreambleL( const COpaqueNamedParams& aInputParams,
                 COpaqueNamedParams& aOutputParams, TRequestStatus& aStatus );
+        void CompleteSelf( TInt aResult );
+        void CreateUiHandlerL();
+        TBool IsSilentMode();
         void CompleteClientRequest( TInt aResult );
-        void DoUninstallL( TComponentId aComponentId );
-        void DoActivateL( TComponentId aComponentId );
-        void DoDeactivateL( TComponentId aComponentId );
+        void DoGetComponentInfoL( CComponentInfo& aComponentInfo, TRequestStatus& aStatus );
+        void DoInstallL( const TSecurityContext& aSecurityContext,
+        		const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+        		TRequestStatus& aStatus );
+        void DoUninstallL( TComponentId aComponentId, const COpaqueNamedParams& aInputParams,
+            COpaqueNamedParams& aOutputParams, TRequestStatus& aStatus );
+        void DoActivateL( TComponentId aComponentId, TRequestStatus& aStatus );
+        void DoDeactivateL( TComponentId aComponentId, TRequestStatus& aStatus );
         void DoHandleErrorL( TInt aError );
-        TInt ConvertToSifErrorCode( TInt aSwiErrorCode );
-        void SetInstallFileL( const TDesC& aFileName );
-        void SetInstallFile( RFile& aFileHandle );
+        void SetFileL( const TDesC& aFileName );
+        void SetFile( RFile& aFileHandle );
         TComponentId GetLastInstalledComponentIdL();
         TBool RequiresUserCapabilityL( const CComponentInfo::CNode& aRootNode );
         void StartInstallingL();
@@ -98,19 +107,20 @@
     private:    // data
         RFs iFs;
         Swi::CAsyncLauncher* iAsyncLauncher;
-        CSisxSifPluginUiHandler* iUiHandler;
-        CSisxSifPluginUiHandlerSilent* iUiHandlerSilent;
+        CSisxSifPluginUiHandlerBase* iUiHandler;
         Swi::CInstallPrefs* iInstallPrefs;
         TRequestStatus* iClientStatus;
-        const COpaqueNamedParams* iInputParams;
-        COpaqueNamedParams* iOutputParams;
+        const COpaqueNamedParams* iInputParams;     // not owned
+        COpaqueNamedParams* iOutputParams;      // not owned
+        CSisxSifPluginInstallParams* iInstallParams;
+        CSisxSifPluginErrorHandler* iErrorHandler;
         CComponentInfo* iComponentInfo;
+        TBool iHasAllFilesCapability;
         HBufC* iFileName;
         RFile* iFileHandle;             // not owned
-        TBool iUseSilentMode;
         enum TOperationType
             {
-            ENone,
+            ENoOperation,
             EGetComponentInfo,
             EInstall,
             EUninstall,
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifpluginerrorhandler.h	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,66 @@
+/*
+* Copyright (c) 2008-2010 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:  CSisxSifPluginErrorHandler collects information
+*               about errors. Error details are then passed to
+*               framework (USIF).
+*
+*/
+
+#ifndef C_SISXSIFPLUGINERRORHANDLER_H
+#define C_SISXSIFPLUGINERRORHANDLER_H
+
+#include <e32base.h>                    // CBase
+#include <usif/usiferror.h>             // TErrorCategory
+
+namespace Usif
+{
+    class COpaqueNamedParams;
+
+
+    /**
+     *  Native SISX installation error class.
+     */
+    class CSisxSifPluginErrorHandler : public CBase
+        {
+        public:     // constructor and destructor
+            static CSisxSifPluginErrorHandler* NewL();
+            ~CSisxSifPluginErrorHandler();
+
+        public:     // new functions
+            TErrorCategory  ErrorCategory() const;
+            void FillOutputParamsL( COpaqueNamedParams& aOutputParams ) const;
+
+            TInt ErrorCode() const;
+            void SetErrorCode( TInt aErrorCode );
+            TInt ExtendedErrorCode() const;
+            void SetExtendedErrorCode( TInt aExtendedErrorCode );
+            const TDesC& ErrorMessage() const;
+            void SetErrorMessage( const TDesC& aErrorMessage );
+            const TDesC& ErrorMessageDetails() const;
+            void SetErrorMessageDetails( const TDesC& aErrorMessageDetails );
+
+        private:    // new functions
+            CSisxSifPluginErrorHandler();
+            void ConstructL();
+
+        private:    // data
+            TInt iErrorCode;
+            TInt iExtendedErrorCode;
+            HBufC* iErrorMessage;
+            HBufC* iErrorMessageDetails;
+        };
+
+}   // namespace Usif
+
+#endif // C_SISXSIFPLUGINERRORHANDLER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifpluginerrors.h	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2008-2010 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:  Detailed error codes for KErrPermissionDenined errors.
+*
+*/
+
+#ifndef SISXSIFPLUGINERRORS_H
+#define SISXSIFPLUGINERRORS_H
+
+enum TSisxSifPluginErrors
+    {
+    ETrustedUICapabilityRequired = 1,       // TrustedUI capability required
+    ENeedsAllowUntrustedParameter = 2,      // AllowUntrusted parameter needed
+    ENeedsGrantCapabilitiesParameter = 3,   // GrantCapabilities parameter needed
+    EAllFilesCapabilityRequired = 4         // AllFiles capability required
+    };
+
+#endif // SISXSIFPLUGINERRORS_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifplugininstallparams.h	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2010 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:  Installation parameters class.
+*
+*/
+
+#ifndef C_SISXSIFPLUGININSTALLPARAMS_H
+#define C_SISXSIFPLUGININSTALLPARAMS_H
+
+#include <e32base.h>                    // CBase
+#include <usif/sif/sifcommon.h>         // COpaqueNamedParams, TSifPolicy
+
+namespace Usif
+{
+    /**
+     *  Installation parameters class.
+     */
+    class CSisxSifPluginInstallParams : public CBase
+        {
+    public:     // constructors and destructor
+        static CSisxSifPluginInstallParams* NewL( const COpaqueNamedParams& aParams );
+        static CSisxSifPluginInstallParams* NewL( const CSisxSifPluginInstallParams& aParams );
+        ~CSisxSifPluginInstallParams();
+
+    public:     // new functions
+        TBool IsSilentMode() const;
+        TBool IsInstallInactive() const;
+        TUint Drive() const;
+        TLanguage Language() const;
+        const TDesC& OCSPUrl() const;
+        TSifPolicy PerformOCSP() const;
+        TSifPolicy IgnoreOCSPWarnings() const;
+        TSifPolicy AllowUpgrade() const;
+        TSifPolicy InstallOptionalItems() const;
+        TSifPolicy AllowUntrusted() const;
+        TSifPolicy GrantCapabilities() const;
+        TSifPolicy AllowAppShutdown() const;
+        TSifPolicy AllowAppBreakDependency() const;
+        TSifPolicy AllowOverwrite() const;
+        TSifPolicy PackageInfo() const;
+        TSifPolicy AllowIncompatible() const;
+
+    private:    // new functions
+        CSisxSifPluginInstallParams();
+        void ConstructL( const COpaqueNamedParams& aParams );
+        void ConstructL( const CSisxSifPluginInstallParams& aParams );
+        TInt GetIntParam( const COpaqueNamedParams& aParams, const TDesC& aParamName,
+        		TInt aDefaultValue );
+        void GetPolicyParam( const COpaqueNamedParams& aParams, const TDesC& aParamName,
+                TSifPolicy& aPolicy, const TSifPolicy& aDefault );
+        void GetStringParamL( const COpaqueNamedParams& aParams, const TDesC& aParamName,
+        		HBufC*& aBuf );
+
+    private:    // data
+        TBool iUseSilentMode;
+        TBool iIsInstallInactive;
+        TUint iDrive;
+        TLanguage iLanguage;
+        HBufC* iOCSPUrl;
+        TSifPolicy iPerformOCSP;
+        TSifPolicy iIgnoreOCSPWarnings;
+        TSifPolicy iAllowUpgrade;
+        TSifPolicy iInstallOptionalItems;
+        TSifPolicy iAllowUntrusted;
+        TSifPolicy iGrantCapabilities;
+        TSifPolicy iAllowAppShutdown;
+        TSifPolicy iAllowAppBreakDependency;
+        TSifPolicy iAllowOverwrite;
+        TSifPolicy iPackageInfo;
+        TSifPolicy iAllowIncompatible;
+        };
+
+}   // namespace Usif
+
+#endif  // C_SISXSIFPLUGININSTALLPARAMS_H
+
--- a/appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifpluginuihandler.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifpluginuihandler.h	Thu Jul 22 16:35:01 2010 +0100
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description:  MUiHandler for SISX SIF plugin.
+* Description:  UI Handler for normal (non-silent) install/uninstall operations.
 *
 */
 
@@ -19,28 +19,26 @@
 #define C_SISXSIFPLUGUIHANDLER_H
 
 #include <e32base.h>                    // CBase
-#include <swi/msisuihandlers.h>         // MUiHandler
-#include <f32file.h>                    // RFs
-#include <sifui.h>                      // CSifUi
+#include "sisxsifpluginuihandlerbase.h" // CSisxSifPluginUiHandlerBase
 
+class CSifUi;
+class CSifUiAppInfo;
 class CSisxSifUiSelectionCache;
 
 
 namespace Usif
 {
     /**
-     *  SISX SIF plugin UI handler
-     *  Universal Software Install Framework (USIF) plugin for native SISX
-     *  installation. CSisxSifPluginActiveImpl is active object that takes
-     *  care of SISX installation operations.
+     * UI Handler for normal (non-silent) install/uninstall operations.
      */
-    class CSisxSifPluginUiHandler : public CBase, public Swi::MUiHandler
+    class CSisxSifPluginUiHandler : public CSisxSifPluginUiHandlerBase
         {
     public:     // constructors and destructor
-        static CSisxSifPluginUiHandler* NewL( RFs& aFs );
+        static CSisxSifPluginUiHandler* NewL( RFs& aFs,
+                CSisxSifPluginErrorHandler& aErrorHandler );
         ~CSisxSifPluginUiHandler();
 
-    public:     // from MUiHandler
+    public:     // from MUiHandler (via CSisxSifPluginUiHandlerBase)
         // from MCommonDialogs
         TBool DisplayTextL( const Swi::CAppInfo& aAppInfo, Swi::TFileTextOption aOption,
                 const TDesC& aText );
@@ -88,29 +86,35 @@
         // from MUninstallerUiHandler
         TBool DisplayUninstallL( const Swi::CAppInfo& aAppInfo );
 
-    public:     // new functions
+    public:     // from CSisxSifPluginUiHandlerBase
         void DisplayPreparingInstallL( const TDesC& aFileName );
         void DisplayCompleteL();
-        void DisplayFailedL( TInt aErrorCode );
+        void DisplayFailedL( const CSisxSifPluginErrorHandler& aError );
+
+    public:     // new functions
         void SetDriveSelectionRequired( TBool aIsRequired );
-        void SetMaxInstalledSize( TInt aSize );
 
     private:    // new functions
-        CSisxSifPluginUiHandler( RFs& aFs );
+        CSisxSifPluginUiHandler( RFs& aFs, CSisxSifPluginErrorHandler& aErrorHandler );
         void ConstructL();
         void AddMemorySelectionL();
         void AddCertificatesL( RPointerArray<Swi::CCertificateInfo>& aCertificates,
                 RPointerArray<CPKIXValidationResultBase>& aPkixResults );
+        CSifUiAppInfo* GetAppInfoLC( const Swi::CAppInfo& aAppInfo );
 
     private:    // data
-        RFs& iFs;
+        enum TMode
+            {
+            EModeUndefined,
+            EModeInstall,
+            EModeUninstall
+            } iMode;
+        CSifUi* iSifUi;
         CSisxSifUiSelectionCache* iSelectionCache;
-        CSifUi* iSifUi;
         CApaMaskedBitmap* iLogo;
         TBool iQuestionIncompatibleDisplayed;
-        TInt iMaxInstalledSize;
-        TBool iDriveSelectionRequired;
         RArray<TInt> iSelectableDrives;
+        TInt iProgressBarFinalValue;
         };
 
 }   // namespace Usif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifpluginuihandlerbase.h	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2010 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:  Base class for SISX SIF plugin UI handlers.
+*
+*/
+
+#ifndef C_SISXSIFPLUGUIHANDLERBASE_H
+#define C_SISXSIFPLUGUIHANDLERBASE_H
+
+#include <e32base.h>                    // CBase
+#include <swi/msisuihandlers.h>         // MUiHandler
+#include <f32file.h>                    // RFs
+#include <sifui.h>                      // CSifUi
+#include <usif/sif/sifcommon.h>         // CComponentInfo::CNode
+#include <usif/sif/sifnotification.h>   // TSifOperationSubPhase, TErrorCategory
+
+
+namespace Usif
+{
+    class CSisxSifPluginInstallParams;
+    class CSisxSifPluginErrorHandler;
+
+
+    /**
+     * Base class for SISX SIF plugin UI handlers.
+     */
+    class CSisxSifPluginUiHandlerBase : public CBase, public Swi::MUiHandler
+        {
+    public:     // constructors and destructor
+        CSisxSifPluginUiHandlerBase( RFs& aFs, CSisxSifPluginErrorHandler& aErrorHandler );
+        ~CSisxSifPluginUiHandlerBase();
+
+    public:     // new functions
+        virtual void DisplayPreparingInstallL( const TDesC& aFileName ) = 0;
+        virtual void DisplayCompleteL() = 0;
+        virtual void DisplayFailedL( const CSisxSifPluginErrorHandler& aError ) = 0;
+
+    public:     // new functions
+        void SetInstallParamsL( const CSisxSifPluginInstallParams& aInstallParams );
+        void SetMaxInstalledSize( TInt aSize );
+        void SetDriveSelectionRequired( TBool aIsRequired );
+        void PublishStartL( const CComponentInfo::CNode& aRootNode );
+        void PublishProgressL( TSifOperationPhase aPhase, TSifOperationSubPhase aSubPhase,
+                TInt aCurrentProgress, TInt aTotal );
+        void PublishCompletionL( const CSisxSifPluginErrorHandler& aError );
+
+    protected:  // new functions
+        void SetDisplayErrorL( Swi::TErrorDialog aType, const TDesC& aParam );
+
+    protected:	// data
+        RFs& iFs;
+        CSisxSifPluginErrorHandler& iErrorHandler;
+        TInt iMaxInstalledSize;
+        TBool iIsDriveSelectionRequired;
+        CSisxSifPluginInstallParams* iInstallParams;
+        HBufC* iGlobalComponentId;
+        CPublishSifOperationInfo* iPublishSifOperationInfo;
+        };
+
+}   // namespace Usif
+
+#endif      // C_SISXSIFPLUGUIHANDLERBASE_H
+
--- a/appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifpluginuihandlersilent.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sisxsifplugin/inc/sisxsifpluginuihandlersilent.h	Thu Jul 22 16:35:01 2010 +0100
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description:  MUiHandler for silent install/uninstall operations.
+* Description:  UI Handler for silent install/uninstall operations.
 *
 */
 
@@ -19,25 +19,22 @@
 #define C_SISXSIFPLUGUIHANDLERSILENT_H
 
 #include <e32base.h>                    // CBase
-#include <swi/msisuihandlers.h>         // MUiHandler
-#include <f32file.h>                    // RFs
+#include "sisxsifpluginuihandlerbase.h" // CSisxSifPluginUiHandlerBase
 
 
 namespace Usif
 {
     /**
-     *  Silent SISX SIF plugin UI handler
-     *  Universal Software Install Framework (USIF) plugin for native SISX
-     *  installation. CSisxSifPluginActiveImpl is active object that takes
-     *  care of SISX installation operations.
+     * UI handler for silent install/uninstall operations.
      */
-    class CSisxSifPluginUiHandlerSilent : public CBase, public Swi::MUiHandler
+    class CSisxSifPluginUiHandlerSilent : public CSisxSifPluginUiHandlerBase
         {
     public:     // constructors and destructor
-        static CSisxSifPluginUiHandlerSilent* NewL( RFs& aFs );
+        static CSisxSifPluginUiHandlerSilent* NewL( RFs& aFs,
+                CSisxSifPluginErrorHandler& aErrorHandler );
         ~CSisxSifPluginUiHandlerSilent();
 
-    public:     // from MUiHandler
+    public:     // from MUiHandler (via CSisxSifPluginUiHandlerBase)
         // from MCommonDialogs
         TBool DisplayTextL( const Swi::CAppInfo& aAppInfo, Swi::TFileTextOption aOption,
                 const TDesC& aText );
@@ -85,14 +82,18 @@
         // from MUninstallerUiHandler
         TBool DisplayUninstallL( const Swi::CAppInfo& aAppInfo );
 
+    public:     // from CSisxSifPluginUiHandlerBase
+        void DisplayPreparingInstallL( const TDesC& aFileName );
+        void DisplayCompleteL();
+        void DisplayFailedL( const CSisxSifPluginErrorHandler& aError );
+
     protected:  // new functions
-        CSisxSifPluginUiHandlerSilent( RFs& aFs );
+        CSisxSifPluginUiHandlerSilent( RFs& aFs, CSisxSifPluginErrorHandler& aErrorHandler );
 
     private:    // new functions
         void ConstructL();
 
     protected:  // data
-        RFs& iFs;
         };
 
 }   // namespace Usif
--- a/appinstaller/AppinstUi/sisxsifplugin/src/sisxsifpluginactiveimpl.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sisxsifplugin/src/sisxsifpluginactiveimpl.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -15,21 +15,23 @@
 *
 */
 
-#include "sisxsifpluginactiveimpl.h"    // CSisxSifPluginActiveImpl
-#include "sisxsifpluginuihandler.h"     // CSisxSifPluginUiHandler
-#include "sisxsifpluginuihandlersilent.h" // CSisxSifPluginUiHandlerSilent
-#include "sisxsifcleanuputils.h"        // CleanupResetAndDestroyPushL
-#include "sisxsifplugin.pan"            // Panic codes
-#include <usif/sif/sifcommon.h>         // Usif::CComponentInfo
-#include <usif/scr/scr.h>               // RSoftwareComponentRegistry
-#include <usif/usiferror.h>             // SIF error codes
-#include <swi/sisinstallerrors.h>       // SWI error codes
-#include <swi/asynclauncher.h>          // Swi::CAsyncLauncher
-#include <swi/sisregistrysession.h>     // RSisRegistrySession
-#include "sisregistrywritablesession.h" // RSisRegistryWritableSession
-#include <e32property.h>                // RProperty
-#include <sacls.h>                      // KUidSwiLatestInstallation
-#include <featmgr.h>                    // FeatureManager
+#include "sisxsifpluginactiveimpl.h"        // CSisxSifPluginActiveImpl
+#include "sisxsifpluginuihandlerbase.h"     // CSisxSifPluginUiHandlerBase
+#include "sisxsifpluginuihandler.h"         // CSisxSifPluginUiHandler
+#include "sisxsifpluginuihandlersilent.h"   // CSisxSifPluginUiHandlerSilent
+#include "sisxsifplugininstallparams.h"     // CSisxSifPluginInstallParams
+#include "sisxsifpluginerrorhandler.h"      // CSisxSifPluginErrorHandler
+#include "sisxsifcleanuputils.h"            // CleanupResetAndDestroyPushL
+#include "sisxsifpluginerrors.h"            // Error codes
+#include "sisxsifplugin.pan"                // Panic codes
+#include <usif/sif/sifcommon.h>             // Usif::CComponentInfo
+#include <usif/scr/scr.h>                   // RSoftwareComponentRegistry
+#include <swi/asynclauncher.h>              // Swi::CAsyncLauncher
+#include <swi/sisregistrysession.h>         // RSisRegistrySession
+#include "sisregistrywritablesession.h"     // RSisRegistryWritableSession
+#include <e32property.h>                    // RProperty
+#include <sacls.h>                          // KUidSwiLatestInstallation
+#include <featmgr.h>                        // FeatureManager
 
 // TODO: replace with proper logging
 #ifdef _DEBUG
@@ -50,8 +52,6 @@
 _LIT( KStartupListUpdaterExecutable, "z:\\sys\\bin\\startuplistupdater.exe" );
 _LIT( KStartupListUpdaterName, "StartupListUpdater" );
 
-const TInt KSystemWideErrorsBoundary = -100;
-
 
 // ======== MEMBER FUNCTIONS ========
 
@@ -60,32 +60,35 @@
 // ---------------------------------------------------------------------------
 //
 CSisxSifPluginActiveImpl* CSisxSifPluginActiveImpl::NewL()
-	{
-	FLOG( _L("Constructing CSisxSifPluginActiveImpl") );
-	CSisxSifPluginActiveImpl *self = new( ELeave ) CSisxSifPluginActiveImpl;
-	CleanupStack::PushL( self );
-	self->ConstructL();
-	CleanupStack::Pop( self );
-	return self;
-	}
+    {
+    FLOG( _L("Constructing CSisxSifPluginActiveImpl") );
+    CSisxSifPluginActiveImpl *self = new( ELeave ) CSisxSifPluginActiveImpl;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
 
 // ---------------------------------------------------------------------------
 // CSisxSifPluginActiveImpl::~CSisxSifPluginActiveImpl()
 // ---------------------------------------------------------------------------
 //
 CSisxSifPluginActiveImpl::~CSisxSifPluginActiveImpl()
-	{
-	FLOG( _L("Destructing CSisxSifPluginActiveImpl") );
-	Cancel();
+    {
+    FLOG( _L("Destructing CSisxSifPluginActiveImpl") );
+    Cancel();
     delete iAsyncLauncher;
     delete iUiHandler;
-    delete iUiHandlerSilent;
     delete iInstallPrefs;
+    iInputParams = NULL;    // not owned
+    iOutputParams = NULL;   // not owned
+    delete iInstallParams;
     delete iComponentInfo;
     delete iFileName;
+    delete iErrorHandler;
     FeatureManager::UnInitializeLib();
     iFs.Close();
-	}
+    }
 
 // ---------------------------------------------------------------------------
 // CSisxSifPluginActiveImpl::DoCancel()
@@ -114,18 +117,22 @@
 //
 void CSisxSifPluginActiveImpl::RunL()
     {
-    TInt result = iStatus.Int();
     FLOG_3( _L("CSisxSifPluginActiveImpl::RunL(), operation %d, phase %d, result %d"),
-            iOperation, iPhase, result );
-    User::LeaveIfError( result );
+            iOperation, iPhase, iStatus.Int() );
 
+    User::LeaveIfError( iStatus.Int() );
     switch( iOperation )
         {
+        case EGetComponentInfo:
+            __ASSERT_DEBUG( iPhase == ERunningOperation, Panic( ESisxSifInternalError ) );
+            CompleteClientRequest( KErrNone );
+            break;
+
         case EInstall:
             switch( iPhase )
                 {
                 case EPreprocessing:
-                    if( iUseSilentMode )
+                    if( IsSilentMode() )
                         {
                         StartSilentInstallingL();
                         }
@@ -133,16 +140,15 @@
                         {
                         StartInstallingL();
                         }
-                    iPhase = ERunningOperation;
-                    SetActive();
                     break;
 
                 case ERunningOperation:
                     FinalizeInstallationL();
                     CompleteClientRequest( KErrNone );
-                    iPhase = ENotActive;
                     break;
 
+				// TODO: KSifInParam_InstallInactive
+
                 default:
                     Panic( ESisxSifInternalError );
                     break;
@@ -153,14 +159,12 @@
             __ASSERT_DEBUG( iPhase == ERunningOperation, Panic( ESisxSifInternalError ) );
             UpdateStartupListL();
             CompleteClientRequest( KErrNone );
-            iPhase = ENotActive;
             break;
 
         case EActivate:
         case EDeactivate:
             __ASSERT_DEBUG( iPhase == ERunningOperation, Panic( ESisxSifInternalError ) );
             CompleteClientRequest( KErrNone );
-            iPhase = ENotActive;
             break;
 
         default:
@@ -176,9 +180,9 @@
 TInt CSisxSifPluginActiveImpl::RunError( TInt aError )
     {
     FLOG_1( _L("CSisxSifPluginActiveImpl::RunError(), aError %d"), aError );
+
     TRAP_IGNORE( DoHandleErrorL( aError ) );
     CompleteClientRequest( aError );
-    iPhase = ENotActive;
     return KErrNone;
     }
 
@@ -191,32 +195,31 @@
         const TSecurityContext& /*aSecurityContext*/,
         CComponentInfo& aComponentInfo,
         TRequestStatus& aStatus )
-	{
+    {
     FLOG_1( _L("CSisxSifPluginActiveImpl::GetComponentInfo: %S"), &aFileName );
-    if( !IsActive() )
+
+    if( IsActive() )
         {
-        iOperation = EGetComponentInfo;
-        aStatus = KRequestPending;
-        iClientStatus = &aStatus;
-        iPhase = ERunningOperation;
+        FLOG( _L("CSisxSifPluginActiveImpl::GetComponentInfo, KErrInUse") );
+        CompleteClientRequest( KErrInUse );
+        return;
+        }
 
-        TRAPD( err, iAsyncLauncher->GetComponentInfoL( UiHandlerL(), aFileName,
-                *iInstallPrefs, aComponentInfo, iStatus ) );
-        if( err )
-            {
-            FLOG_1( _L("CSisxSifPluginActiveImpl::GetComponentInfo ERROR %d"), err );
-            CompleteClientRequest( err );
-            return;
-            }
+    TRAPD( error, SetFileL( aFileName ) );
+    if( error )
+        {
+        FLOG_1( _L("CSisxSifPluginActiveImpl::GetComponentInfo, set file error %d"), error );
+        CompleteClientRequest( error );
+        return;
+        }
 
-        SetActive();
-        }
-    else
-        {
-        FLOG( _L("CSisxSifPluginActiveImpl::GetComponentInfo KErrInUse") );
-        CompleteClientRequest( KErrInUse );
-        }
-	}
+    TRAP( error, DoGetComponentInfoL( aComponentInfo, aStatus ) );
+	if( error )
+		{
+		FLOG_1( _L("CSisxSifPluginActiveImpl::GetComponentInfo ERROR %d"), error );
+		CompleteClientRequest( error );
+		}
+    }
 
 // ---------------------------------------------------------------------------
 // CSisxSifPluginActiveImpl::GetComponentInfo()
@@ -227,32 +230,25 @@
         const TSecurityContext& /*aSecurityContext*/,
         CComponentInfo& aComponentInfo,
         TRequestStatus& aStatus )
-	{
+    {
     FLOG( _L("CSisxSifPluginActiveImpl::GetComponentInfo(RFile)") );
-    if( !IsActive() )
+
+    if( IsActive() )
         {
-        iOperation = EGetComponentInfo;
-        aStatus = KRequestPending;
-        iClientStatus = &aStatus;
-        iPhase = ERunningOperation;
+        FLOG( _L("CSisxSifPluginActiveImpl::GetComponentInfo, KErrInUse") );
+        CompleteClientRequest( KErrInUse );
+        return;
+        }
 
-        TRAPD( err, iAsyncLauncher->GetComponentInfoL( UiHandlerL(), aFileHandle,
-                *iInstallPrefs, aComponentInfo, iStatus ) );
-        if( err )
-            {
-            FLOG_1( _L("CSisxSifPluginActiveImpl::GetComponentInfo ERROR %d"), err );
-            CompleteClientRequest( err );
-            return;
-            }
+    SetFile( aFileHandle );
 
-        SetActive();
-        }
-    else
-        {
-        FLOG( _L("CSisxSifPluginActiveImpl::GetComponentInfo KErrInUse") );
-        CompleteClientRequest( KErrInUse );
-        }
-	}
+	TRAPD( error, DoGetComponentInfoL( aComponentInfo, aStatus ) );
+	if( error )
+		{
+		FLOG_1( _L("CSisxSifPluginActiveImpl::GetComponentInfo ERROR %d"), error );
+		CompleteClientRequest( error );
+		}
+    }
 
 // ---------------------------------------------------------------------------
 // CSisxSifPluginActiveImpl::Install()
@@ -264,47 +260,33 @@
         const COpaqueNamedParams& aInputParams,
         COpaqueNamedParams& aOutputParams,
         TRequestStatus& aStatus )
-	{
+    {
     FLOG_1( _L("CSisxSifPluginActiveImpl::Install: %S"), &aFileName );
-    if( !IsActive() )
+
+    if( IsActive() )
         {
-        CommonRequestPreamble( aInputParams, aOutputParams, aStatus );
-        FLOG_1( _L("CSisxSifPluginActiveImpl::Install, iUseSilentMode=%d"), iUseSilentMode );
+		FLOG( _L("CSisxSifPluginActiveImpl::Install, KErrInUse") );
+		CompleteClientRequest( KErrInUse );
+		return;
+		}
+
+    iHasAllFilesCapability = aSecurityContext.HasCapability( ECapabilityAllFiles );
 
-        if( iUseSilentMode )
-            {
-            if( !aSecurityContext.HasCapability( ECapabilityTrustedUI ) )
-                {
-                FLOG( _L("CSisxSifPluginActiveImpl::Install, missing ECapabilityTrustedUI") );
-                CompleteClientRequest( KErrPermissionDenied );
-                return;
-                }
-            }
-        else
-            {
-            iUiHandler->DisplayPreparingInstallL( aFileName );
-            }
-        SetInstallFileL( aFileName );
+	TRAPD( error, SetFileL( aFileName ) );
+	if( error )
+		{
+		FLOG_1( _L("CSisxSifPluginActiveImpl::Install, set file error %d"), error );
+		CompleteClientRequest( error );
+		return;
+		}
 
-        TRAPD( err, iAsyncLauncher->GetComponentInfoL( UiHandlerL( iUseSilentMode ),
-                aFileName, *iInstallPrefs, *iComponentInfo, iStatus ) );
-        if( err )
-            {
-            FLOG_1( _L("CSisxSifPluginActiveImpl::Install, GetComponentInfoL ERROR %d"), err );
-            CompleteClientRequest( err );
-            return;
-            }
-
-        iOperation = EInstall;
-        iPhase = EPreprocessing;
-        SetActive();
-        }
-    else
-        {
-        FLOG( _L("CSisxSifPluginActiveImpl::GetComponentInfo, KErrInUse") );
-        CompleteClientRequest( KErrInUse );
-        }
-	}
+	TRAP( error, DoInstallL( aSecurityContext, aInputParams, aOutputParams, aStatus ) );
+	if( error )
+		{
+		FLOG_1( _L("CSisxSifPluginActiveImpl::Install, DoInstallL error %d"), error );
+		CompleteClientRequest( error );
+		}
+    }
 
 // ---------------------------------------------------------------------------
 // CSisxSifPluginActiveImpl::Install()
@@ -316,49 +298,27 @@
         const COpaqueNamedParams& aInputParams,
         COpaqueNamedParams& aOutputParams,
         TRequestStatus& aStatus )
-	{
-    TFileName fileName;
-    aFileHandle.Name( fileName );
-    FLOG_1( _L("CSisxSifPluginActiveImpl::Install(RFile): %S"), &fileName );
-    if( !IsActive() )
+    {
+    FLOG( _L("CSisxSifPluginActiveImpl::Install(RFile)") );
+
+    if( IsActive() )
         {
-        CommonRequestPreamble( aInputParams, aOutputParams, aStatus );
-        FLOG_1( _L("CSisxSifPluginActiveImpl::Install, iUseSilentMode=%d"), iUseSilentMode );
+		FLOG( _L("CSisxSifPluginActiveImpl::Install KErrInUse") );
+		CompleteClientRequest( KErrInUse );
+		return;
+		}
 
-        if( iUseSilentMode )
-            {
-            if( !aSecurityContext.HasCapability( ECapabilityTrustedUI ) )
-                {
-                FLOG( _L("CSisxSifPluginActiveImpl::Install, missing ECapabilityTrustedUI") );
-                CompleteClientRequest( KErrPermissionDenied );
-                return;
-                }
-            }
-        else
-            {
-            iUiHandler->DisplayPreparingInstallL( fileName );
-            }
-        SetInstallFile( aFileHandle );
+    iHasAllFilesCapability = aSecurityContext.HasCapability( ECapabilityAllFiles );
+
+    SetFile( aFileHandle );
 
-        TRAPD( err, iAsyncLauncher->GetComponentInfoL( UiHandlerL( iUseSilentMode ),
-                aFileHandle, *iInstallPrefs, *iComponentInfo, iStatus ) );
-        if( err )
-            {
-            FLOG_1( _L("CSisxSifPluginActiveImpl::Install, GetComponentInfoL ERROR %d"), err );
-            CompleteClientRequest( err );
-            return;
-            }
-
-        iOperation = EInstall;
-        iPhase = EPreprocessing;
-        SetActive();
+    TRAPD( error, DoInstallL( aSecurityContext, aInputParams, aOutputParams, aStatus ) );
+    if( error )
+        {
+        FLOG_1( _L("CSisxSifPluginActiveImpl::Install, DoInstallL error %d"), error );
+        CompleteClientRequest( error );
         }
-    else
-        {
-        FLOG( _L("CSisxSifPluginActiveImpl::Install KErrInUse") );
-        CompleteClientRequest( KErrInUse );
-        }
-	}
+    }
 
 // ---------------------------------------------------------------------------
 // CSisxSifPluginActiveImpl::Uninstall()
@@ -370,39 +330,34 @@
         const COpaqueNamedParams& aInputParams,
         COpaqueNamedParams& aOutputParams,
         TRequestStatus& aStatus )
-	{
+    {
     FLOG_1( _L("CSisxSifPluginActiveImpl::Uninstall, aComponentId %d"), aComponentId );
-    if( !IsActive() )
-        {
-        CommonRequestPreamble( aInputParams, aOutputParams, aStatus );
 
-        // Uninstall is always silent. TrustedUI capability is required.
-        if( !aSecurityContext.HasCapability( ECapabilityTrustedUI ) )
-            {
-            FLOG( _L( "CSisxSifPluginActiveImpl::Uninstall, missing ECapabilityTrustedUI") );
-            CompleteClientRequest( KErrPermissionDenied );
-            return;
-            }
-        iUseSilentMode = ETrue;     // no complete/error notes launched in RunL
-
-        TRAPD( err, DoUninstallL( aComponentId ) );
-        if( err )
-            {
-            FLOG_1( _L("CSisxSifPluginActiveImpl::Uninstall, DoUninstallL ERROR %d"), err );
-            CompleteClientRequest( err );
-            return;
-            }
-
-        iOperation = EUninstall;
-        iPhase = ERunningOperation;
-        SetActive();
-        }
-    else
+    if( IsActive() )
         {
         FLOG( _L("CSisxSifPluginActiveImpl::Uninstall KErrInUse") );
         CompleteClientRequest( KErrInUse );
+        return;
         }
-	}
+
+    iHasAllFilesCapability = aSecurityContext.HasCapability( ECapabilityAllFiles );
+
+    // Uninstall is always silent. TrustedUI capability is required.
+	if( !aSecurityContext.HasCapability( ECapabilityTrustedUI ) )
+		{
+		FLOG( _L( "CSisxSifPluginActiveImpl::Uninstall, missing ECapabilityTrustedUI") );
+		iErrorHandler->SetExtendedErrorCode( ETrustedUICapabilityRequired );
+		CompleteClientRequest( KErrPermissionDenied );
+		return;
+		}
+
+	TRAPD( error, DoUninstallL( aComponentId, aInputParams, aOutputParams, aStatus ) );
+	if( error )
+		{
+		FLOG_1( _L("CSisxSifPluginActiveImpl::Uninstall, DoUninstallL ERROR %d"), error );
+		CompleteClientRequest( error );
+		}
+    }
 
 // ---------------------------------------------------------------------------
 // CSisxSifPluginActiveImpl::Activate()
@@ -410,37 +365,27 @@
 //
 void CSisxSifPluginActiveImpl::Activate(
         TComponentId aComponentId,
-        const TSecurityContext& /*aSecurityContext*/,
+        const TSecurityContext& aSecurityContext,
         TRequestStatus& aStatus )
-	{
+    {
     FLOG_1( _L("CSisxSifPluginActiveImpl::Activate, aComponentId %d"), aComponentId );
-    if( !IsActive() )
-        {
-        aStatus = KRequestPending;
-        iClientStatus = &aStatus;
 
-        TRAPD( err, DoActivateL( aComponentId ) );
-        if( err )
-            {
-            FLOG_1( _L("CSisxSifPluginActiveImpl::Activate, DoActivateL ERROR %d"), err );
-            CompleteClientRequest( err );
-            return;
-            }
-
-        iStatus = KRequestPending;
-        TRequestStatus* status = &iStatus;
-        User::RequestComplete( status, KErrNone );
-
-        iOperation = EActivate;
-        iPhase = ERunningOperation;
-        SetActive();
-        }
-    else
+    if( IsActive() )
         {
         FLOG( _L("CSisxSifPluginActiveImpl::Activate KErrInUse") );
         CompleteClientRequest( KErrInUse );
+        return;
         }
-	}
+
+    iHasAllFilesCapability = aSecurityContext.HasCapability( ECapabilityAllFiles );
+
+    TRAPD( error, DoActivateL( aComponentId, aStatus ) );
+    if( error )
+        {
+        FLOG_1( _L("CSisxSifPluginActiveImpl::Activate, DoActivateL ERROR %d"), error );
+        CompleteClientRequest( error );
+        }
+    }
 
 // ---------------------------------------------------------------------------
 // CSisxSifPluginActiveImpl::Deactivate()
@@ -448,37 +393,27 @@
 //
 void CSisxSifPluginActiveImpl::Deactivate(
         TComponentId aComponentId,
-        const TSecurityContext& /*aSecurityContext*/,
+        const TSecurityContext& aSecurityContext,
         TRequestStatus& aStatus )
-	{
+    {
     FLOG_1( _L("CSisxSifPluginActiveImpl::Deactivate, aComponentId %d"), aComponentId );
-    if( !IsActive() )
-        {
-        aStatus = KRequestPending;
-        iClientStatus = &aStatus;
 
-        TRAPD( err, DoDeactivateL( aComponentId ) );
-        if( err )
-            {
-            FLOG_1( _L("CSisxSifPluginActiveImpl::Deactivate, DoDeactivateL ERROR %d"), err );
-            CompleteClientRequest( err );
-            return;
-            }
-
-        iStatus = KRequestPending;
-        TRequestStatus* status = &iStatus;
-        User::RequestComplete( status, KErrNone );
-
-        iOperation = EDeactivate;
-        iPhase = ERunningOperation;
-        SetActive();
-        }
-    else
+    if( IsActive() )
         {
         FLOG( _L("CSisxSifPluginActiveImpl::Deactivate KErrInUse") );
         CompleteClientRequest( KErrInUse );
+        return;
         }
-	}
+
+    iHasAllFilesCapability = aSecurityContext.HasCapability( ECapabilityAllFiles );
+
+    TRAPD( error, DoDeactivateL( aComponentId, aStatus ) );
+    if( error )
+        {
+        FLOG_1( _L("CSisxSifPluginActiveImpl::Deactivate, DoDeactivateL ERROR %d"), error );
+        CompleteClientRequest( error );
+        }
+    }
 
 // ---------------------------------------------------------------------------
 // CSisxSifPluginActiveImpl::CSisxSifPluginActiveImpl()
@@ -501,51 +436,34 @@
     iAsyncLauncher = Swi::CAsyncLauncher::NewL();
     iInstallPrefs = Swi::CInstallPrefs::NewL();
     iComponentInfo = CComponentInfo::NewL();
+    iErrorHandler = CSisxSifPluginErrorHandler::NewL();
     }
 
 // ---------------------------------------------------------------------------
-// CSisxSifPluginActiveImpl::UiHandlerL()
+// CSisxSifPluginActiveImpl::CommonRequestPreambleL()
 // ---------------------------------------------------------------------------
 //
-Swi::MUiHandler& CSisxSifPluginActiveImpl::UiHandlerL( TBool aUseSilentMode )
+void CSisxSifPluginActiveImpl::CommonRequestPreambleL( TRequestStatus& aStatus )
     {
-    Swi::MUiHandler* handler = NULL;
+    aStatus = KRequestPending;
+    iClientStatus = &aStatus;
 
-    if( aUseSilentMode )
+    if( iInstallParams )
         {
-        if( iUiHandler )
-            {
-            delete iUiHandler;
-            iUiHandler = NULL;
-            }
-        if( !iUiHandlerSilent )
-            {
-            iUiHandlerSilent = CSisxSifPluginUiHandlerSilent::NewL( iFs );
-            }
-        handler = iUiHandlerSilent;
+        delete iInstallParams;
+        iInstallParams = NULL;
         }
-    else
-        {
-        if( iUiHandlerSilent )
-            {
-            delete iUiHandlerSilent;
-            iUiHandlerSilent = NULL;
-            }
-        if( !iUiHandler )
-            {
-            iUiHandler = CSisxSifPluginUiHandler::NewL( iFs );
-            }
-        handler = iUiHandler;
-        }
+    CreateUiHandlerL();
 
-    return *handler;
+    iInputParams = NULL;
+    iOutputParams = NULL;
     }
 
 // ---------------------------------------------------------------------------
-// CSisxSifPluginActiveImpl::CommonRequestPreamble()
+// CSisxSifPluginActiveImpl::CommonRequestPreambleL()
 // ---------------------------------------------------------------------------
 //
-void CSisxSifPluginActiveImpl::CommonRequestPreamble(
+void CSisxSifPluginActiveImpl::CommonRequestPreambleL(
         const COpaqueNamedParams& aInputParams,
         COpaqueNamedParams& aOutputParams,
         TRequestStatus& aStatus )
@@ -553,17 +471,64 @@
     aStatus = KRequestPending;
     iClientStatus = &aStatus;
 
-    TInt silentInstall = 0;
-    TRAPD( err, aInputParams.GetIntByNameL( KSifInParam_InstallSilently, silentInstall ) );
-    iUseSilentMode = ( err == KErrNone && silentInstall != 0 );
+    if( iInstallParams )
+        {
+        delete iInstallParams;
+        iInstallParams = NULL;
+        }
+    iInstallParams = CSisxSifPluginInstallParams::NewL( aInputParams );
+    CreateUiHandlerL();
 
     iInputParams = &aInputParams;
     iOutputParams = &aOutputParams;
+    }
 
-    // TODO: KSifInParam_InstallInactive
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::CompleteSelf()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::CompleteSelf( TInt aResult )
+    {
+    iStatus = KRequestPending;
+    TRequestStatus* status = &iStatus;
+    User::RequestComplete( status, aResult );
     }
 
 // ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::CreateUiHandlerL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::CreateUiHandlerL()
+    {
+    if( iUiHandler )
+    	{
+		delete iUiHandler;
+		iUiHandler = NULL;
+    	}
+	if( IsSilentMode() )
+		{
+		iUiHandler = CSisxSifPluginUiHandlerSilent::NewL( iFs, *iErrorHandler );
+		}
+	else
+		{
+		iUiHandler = CSisxSifPluginUiHandler::NewL( iFs, *iErrorHandler );
+		}
+	if( iInstallParams )
+		{
+		iUiHandler->SetInstallParamsL( *iInstallParams );
+		}
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::IsSilentMode()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginActiveImpl::IsSilentMode()
+	{
+	return( iInstallParams && iInstallParams->IsSilentMode() );
+	}
+
+// ---------------------------------------------------------------------------
 // CSisxSifPluginActiveImpl::CompleteClientRequest()
 // ---------------------------------------------------------------------------
 //
@@ -574,14 +539,96 @@
         User::RequestComplete( iClientStatus, aResult );
         iClientStatus = NULL;
         }
+    __ASSERT_DEBUG( !IsActive(), Panic( ESisxSifInternalError ) );
+    iOperation = ENoOperation;
+    iPhase = ENotActive;
     }
 
 // ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::DoGetComponentInfoL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::DoGetComponentInfoL( CComponentInfo& aComponentInfo,
+		TRequestStatus& aStatus )
+	{
+	CommonRequestPreambleL( aStatus );
+
+	if( iFileName )
+		{
+		iAsyncLauncher->GetComponentInfoL( *iUiHandler, *iFileName, *iInstallPrefs,
+				aComponentInfo, iStatus );
+		}
+	else if( iFileHandle )
+		{
+		iAsyncLauncher->GetComponentInfoL( *iUiHandler, *iFileHandle, *iInstallPrefs,
+				aComponentInfo, iStatus );
+		}
+	else
+		{
+		User::Leave( KErrGeneral );
+		}
+
+    iOperation = EGetComponentInfo;
+    iPhase = ERunningOperation;
+    SetActive();
+	}
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginActiveImpl::DoInstallL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginActiveImpl::DoInstallL( const TSecurityContext& aSecurityContext,
+		const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+		TRequestStatus& aStatus )
+	{
+    CommonRequestPreambleL( aInputParams, aOutputParams, aStatus );
+    FLOG_1( _L("CSisxSifPluginActiveImpl::DoInstall, IsSilentMode=%d"), IsSilentMode() );
+
+    if( IsSilentMode() )
+        {
+        if( !aSecurityContext.HasCapability( ECapabilityTrustedUI ) )
+            {
+            FLOG( _L("CSisxSifPluginActiveImpl::Install, missing ECapabilityTrustedUI") );
+            iErrorHandler->SetExtendedErrorCode( ETrustedUICapabilityRequired );
+            CompleteClientRequest( KErrPermissionDenied );
+            return;
+            }
+        }
+
+    if( iFileName )
+        {
+        iUiHandler->DisplayPreparingInstallL( *iFileName );
+        iAsyncLauncher->GetComponentInfoL( *iUiHandler, *iFileName, *iInstallPrefs,
+                *iComponentInfo, iStatus );
+        }
+    else if( iFileHandle )
+        {
+        TFileName fileName;
+        iFileHandle->Name( fileName );
+        iUiHandler->DisplayPreparingInstallL( fileName );
+        iAsyncLauncher->GetComponentInfoL( *iUiHandler, *iFileHandle, *iInstallPrefs,
+                *iComponentInfo, iStatus );
+        }
+    else
+        {
+        User::Leave( KErrGeneral );
+        }
+
+    iOperation = EInstall;
+    iPhase = EPreprocessing;
+    SetActive();
+	}
+
+// ---------------------------------------------------------------------------
 // CSisxSifPluginActiveImpl::DoUninstallL()
 // ---------------------------------------------------------------------------
 //
-void CSisxSifPluginActiveImpl::DoUninstallL( TComponentId aComponentId )
+void CSisxSifPluginActiveImpl::DoUninstallL( TComponentId aComponentId,
+		const COpaqueNamedParams& aInputParams, COpaqueNamedParams& aOutputParams,
+		TRequestStatus& aStatus )
     {
+    CommonRequestPreambleL( aInputParams, aOutputParams, aStatus );
+
     RSoftwareComponentRegistry scrSession;
     User::LeaveIfError( scrSession.Connect() );
     CleanupClosePushL( scrSession );
@@ -600,33 +647,55 @@
     TUid objectId = TUid::Uid( intPropertyEntry->IntValue() );
     CleanupStack::PopAndDestroy( 2, &scrSession );      // propertyEntry, scrSession
 
-    iAsyncLauncher->UninstallL( UiHandlerL( iUseSilentMode ), objectId, iStatus );
+    iAsyncLauncher->UninstallL( *iUiHandler, objectId, iStatus );
+
+    iOperation = EUninstall;
+    iPhase = ERunningOperation;
+    SetActive();
     }
 
 // ---------------------------------------------------------------------------
 // CSisxSifPluginActiveImpl::DoActivateL()
 // ---------------------------------------------------------------------------
 //
-void CSisxSifPluginActiveImpl::DoActivateL( TComponentId aComponentId )
+void CSisxSifPluginActiveImpl::DoActivateL( TComponentId aComponentId,
+        TRequestStatus& aStatus )
     {
+    CommonRequestPreambleL( aStatus );
+
     Swi::RSisRegistryWritableSession sisRegSession;
     User::LeaveIfError( sisRegSession.Connect() );
     CleanupClosePushL( sisRegSession );
     sisRegSession.ActivateComponentL( aComponentId );
     CleanupStack::PopAndDestroy( &sisRegSession );
+
+    CompleteSelf( KErrNone );
+
+    iOperation = EActivate;
+    iPhase = ERunningOperation;
+    SetActive();
     }
 
 // ---------------------------------------------------------------------------
 // CSisxSifPluginActiveImpl::DoDeactivateL()
 // ---------------------------------------------------------------------------
 //
-void CSisxSifPluginActiveImpl::DoDeactivateL( TComponentId aComponentId )
+void CSisxSifPluginActiveImpl::DoDeactivateL( TComponentId aComponentId,
+        TRequestStatus& aStatus )
     {
+    CommonRequestPreambleL( aStatus );
+
     Swi::RSisRegistryWritableSession sisRegSession;
     User::LeaveIfError( sisRegSession.Connect() );
     CleanupClosePushL( sisRegSession );
     sisRegSession.DeactivateComponentL( aComponentId );
     CleanupStack::PopAndDestroy( &sisRegSession );
+
+    CompleteSelf( KErrNone );
+
+    iOperation = EDeactivate;
+    iPhase = ERunningOperation;
+    SetActive();
     }
 
 // ---------------------------------------------------------------------------
@@ -635,126 +704,27 @@
 //
 void CSisxSifPluginActiveImpl::DoHandleErrorL( TInt aError )
     {
+    FLOG_1( _L("CSisxSifPluginActiveImpl::DoHandleErrorL(), aError=%d"), aError );
+
+    iErrorHandler->SetErrorCode( aError );
     if( iOutputParams )
         {
-        iOutputParams->AddIntL( KSifOutParam_ExtendedErrCode, aError );
+        iErrorHandler->FillOutputParamsL( *iOutputParams );
         }
-    TInt errorCode = ConvertToSifErrorCode( aError );
-    if( !iUseSilentMode && ( errorCode != KErrCancel ) )
+
+    if( aError != KErrNone && aError != KErrCancel )
         {
-        iUiHandler->DisplayFailedL( errorCode );
+        iUiHandler->DisplayFailedL( *iErrorHandler );
         }
+
+    iUiHandler->PublishCompletionL( *iErrorHandler );
     }
 
 // ---------------------------------------------------------------------------
-// CSisxSifPluginActiveImpl::ConvertToSifErrorCode()
+// CSisxSifPluginActiveImpl::SetFileL()
 // ---------------------------------------------------------------------------
 //
-TInt CSisxSifPluginActiveImpl::ConvertToSifErrorCode( TInt aSwiErrorCode )
-    {
-    FLOG_1( _L("CSisxSifPluginActiveImpl::ConvertToSifErrorCode(), aSwiErrorCode=%d"),
-            aSwiErrorCode );
-
-    // TODO: need to show also SWI error code in UI somehow when necessary
-
-    if( aSwiErrorCode > KSystemWideErrorsBoundary )
-        {
-        return aSwiErrorCode;
-        }
-
-    switch( aSwiErrorCode )
-        {
-        case KErrSISFieldIdMissing:
-        case KErrSISFieldLengthMissing:
-        case KErrSISFieldLengthInvalid:
-        case KErrSISStringInvalidLength:
-        case KErrSISSignedControllerSISControllerMissing:
-        case KErrSISControllerSISInfoMissing:
-        case KErrSISInfoSISUidMissing:
-        case KErrSISInfoSISNamesMissing:
-        case KErrSISFieldBufferTooShort:
-        case KErrSISStringArrayInvalidElement:
-        case KErrSISInfoSISVendorNamesMissing:
-        case KErrSISInfoSISVersionMissing:
-        case KErrSISControllerSISSupportedLanguagesMissing:
-        case KErrSISSupportedLanguagesInvalidElement:
-        case KErrSISLanguageInvalidLength:
-        case KErrSISContentsSISSignedControllerMissing:
-        case KErrSISContentsSISDataMissing:
-        case KErrSISDataSISFileDataUnitMissing:
-        case KErrSISFileDataUnitTargetMissing:
-        case KErrSISFileOptionsMissing:
-        case KErrSISFileDataUnitDescriptorMissing:
-        case KErrSISFileDataDescriptionMissing:
-        case KErrSISContentsMissing:
-        case KErrSISEmbeddedControllersMissing:
-        case KErrSISEmbeddedDataUnitsMissing:
-        case KErrSISControllerOptionsMissing:
-        case KErrSISExpressionMissing:
-        case KErrSISExpressionStringValueMissing:
-        case KErrSISOptionsStringMissing:
-        case KErrSISFileOptionsExpressionMissing:
-        case KErrSISExpressionHeadValueMissing:
-        case KErrSISEmbeddedSISOptionsMissing:
-        case KErrSISInfoSISUpgradeRangeMissing:
-        case KErrSISDependencyMissingUid:
-        case KErrSISDependencyMissingVersion:
-        case KErrSISDependencyMissingNames:
-        case KErrSISControllerMissingPrerequisites:
-        case KErrSISUpgradeRangeMissingVersion:
-        case KErrSISUnexpectedFieldType:
-        case KErrSISExpressionUnknownOperator:
-        case KErrSISArrayReadError:
-        case KErrSISArrayTypeMismatch:
-        case KErrSISInvalidStringLength:
-        case KErrSISCompressionNotSupported:
-        case KErrSISTooDeeplyEmbedded:
-        case KErrWrongHeaderFormat:
-        case KErrExpressionToComplex:
-        case KErrInvalidExpression:
-        case KErrInvalidType:
-            return KErrSifCorruptedPackage;
-
-        case KErrBadUsage:
-        case KErrInstallerLeave:
-            return KErrSifUnknown;
-
-        case KErrSISPrerequisitesMissingDependency:
-            return KErrSifMissingDependencies;
-
-        case KErrMissingBasePackage:
-            return KErrSifMissingBasePackage;
-
-        case KErrCapabilitiesMismatch:
-        case KErrInvalidEclipsing:
-        case KErrSecurityError:
-        case KErrBadHash:
-        case KErrDigestNotSupported:
-        case KErrSignatureSchemeNotSupported:
-        case KErrSISWouldOverWrite:
-        case KErrSISInvalidTargetFile:
-            return KErrPermissionDenied;
-
-        case KErrPolicyFileCorrupt:
-            return KErrSifBadInstallerConfiguration;
-
-        case KErrInvalidUpgrade:
-        case KErrLegacySisFile:
-            return KErrSifPackageCannotBeInstalledOnThisDevice;
-
-        case KErrSISNotEnoughSpaceToInstall:
-            return KErrSifNotEnoughSpace;
-
-        default:
-            return KErrSifUnknown;
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CSisxSifPluginActiveImpl::SetInstallFileL()
-// ---------------------------------------------------------------------------
-//
-void CSisxSifPluginActiveImpl::SetInstallFileL( const TDesC& aFileName )
+void CSisxSifPluginActiveImpl::SetFileL( const TDesC& aFileName )
     {
     if( iFileName )
         {
@@ -766,10 +736,10 @@
     }
 
 // ---------------------------------------------------------------------------
-// CSisxSifPluginActiveImpl::SetInstallFile()
+// CSisxSifPluginActiveImpl::SetFile()
 // ---------------------------------------------------------------------------
 //
-void CSisxSifPluginActiveImpl::SetInstallFile( RFile& aFileHandle )
+void CSisxSifPluginActiveImpl::SetFile( RFile& aFileHandle )
     {
     if( iFileName )
         {
@@ -785,7 +755,7 @@
 //
 TComponentId CSisxSifPluginActiveImpl::GetLastInstalledComponentIdL()
     {
-    ASSERT( iOperation == EInstall );
+    __ASSERT_DEBUG( iOperation == EInstall, Panic( ESisxSifInternalError ) );
 
     // Find the id of the last installed component and return it
     TInt uid;
@@ -830,29 +800,29 @@
 //
 void CSisxSifPluginActiveImpl::StartInstallingL()
     {
-    Swi::MUiHandler& uiHandler = UiHandlerL( iUseSilentMode );
+	const CComponentInfo::CNode& rootNode( iComponentInfo->RootNodeL() );
+	TBool driveSelection = rootNode.DriveSeletionRequired();
+	iUiHandler->SetDriveSelectionRequired( driveSelection );
+	TInt maxInstalledSize = rootNode.MaxInstalledSize();
+	iUiHandler->SetMaxInstalledSize( maxInstalledSize );
 
-    if( !iUseSilentMode && iUiHandler )
-        {
-        const CComponentInfo::CNode& rootNode( iComponentInfo->RootNodeL() );
-        TBool driveSelection = rootNode.DriveSeletionRequired();
-        iUiHandler->SetDriveSelectionRequired( driveSelection );
-        TInt maxInstalledSize = rootNode.MaxInstalledSize();
-        iUiHandler->SetMaxInstalledSize( maxInstalledSize );
-        }
+	iUiHandler->PublishStartL( rootNode );
 
     if( iFileHandle )
         {
-        iAsyncLauncher->InstallL( uiHandler, *iFileHandle, *iInstallPrefs, iStatus );
+        iAsyncLauncher->InstallL( *iUiHandler, *iFileHandle, *iInstallPrefs, iStatus );
         }
     else if( iFileName )
         {
-        iAsyncLauncher->InstallL( uiHandler, *iFileName, *iInstallPrefs, iStatus );
+        iAsyncLauncher->InstallL( *iUiHandler, *iFileName, *iInstallPrefs, iStatus );
         }
     else
         {
         Panic( ESisxSifInternalError );
         }
+
+    iPhase = ERunningOperation;
+    SetActive();
     }
 
 // ---------------------------------------------------------------------------
@@ -861,21 +831,35 @@
 //
 void CSisxSifPluginActiveImpl::StartSilentInstallingL()
     {
+    // TODO: fix this, removed temporarily to allow installations
+#ifdef _NOT_DEFINED_
     const CComponentInfo::CNode& rootNode( iComponentInfo->RootNodeL() );
-    TBool hasExecutable = rootNode.HasExecutable();
     TBool isAuthenticated = ( rootNode.Authenticity() == EAuthenticated );
-    TBool requiresUserCapability = RequiresUserCapabilityL( rootNode );
-    if( hasExecutable && !isAuthenticated )
+
+    // AllowUntrusted option is needed to install untrusted packages.
+    if( !isAuthenticated && ( iInstallParams->AllowUntrusted() != EAllowed ) )
         {
-        FLOG( _L("Silent install is not allowed on unsigned packages containing executables") );
+        FLOG( _L("Attempt to install unsigned package silently without AllowUntrusted option") );
+        iErrorHandler->SetExtendedErrorCode( ENeedsAllowUntrustedParameter );
         CompleteClientRequest( KErrPermissionDenied );
         }
-    else if( requiresUserCapability )
+    // GrantCapabilities option is needed to install packages that require user capabilities
+    else if( RequiresUserCapabilityL( rootNode ) &&
+            ( iInstallParams->GrantCapabilities() != EAllowed  ) )
         {
-        FLOG( _L("Silent install is not allowed when user capabilities are required") );
+        FLOG( _L("Attempt to grant user capabilities silently without GrantCapabilities option") );
+        iErrorHandler->SetExtendedErrorCode( ENeedsGrantCapabilitiesParameter );
+        CompleteClientRequest( KErrPermissionDenied );
+        }
+    // AllFiles capability is needed to install untrusted packages that contains exe/dll binaries
+    else if( !isAuthenticated && rootNode.HasExecutable() && !iHasAllFilesCapability )
+        {
+        FLOG( _L("Attempt to install untrusted binaries silently without AllFiles capability") );
+        iErrorHandler->SetExtendedErrorCode( EAllFilesCapabilityRequired );
         CompleteClientRequest( KErrPermissionDenied );
         }
     else
+#endif
         {
         StartInstallingL();
         }
@@ -894,10 +878,9 @@
         TComponentId componentId = GetLastInstalledComponentIdL();
         iOutputParams->AddIntL( KSifOutParam_ComponentId, componentId );
         }
-    if( !iUseSilentMode )
-        {
-        iUiHandler->DisplayCompleteL();
-        }
+
+	iUiHandler->DisplayCompleteL();
+    iUiHandler->PublishCompletionL( *iErrorHandler );
     }
 
 // ---------------------------------------------------------------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/src/sisxsifpluginerrorhandler.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,349 @@
+/*
+* Copyright (c) 2008-2010 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:  CSisxSifPluginError collects information about errors.
+*               Error details are then passed to framework (USIF).
+*
+*/
+
+#include "sisxsifpluginerrorhandler.h"      // CSisxSifPluginErrorHandler
+#include <swi/sisinstallerrors.h>           // SWI error codes
+#include <usif/sif/sifcommon.h>             // COpaqueNamedParams
+#include "sisxsifplugin.pan"                // Panic codes
+
+using namespace Usif;
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginErrorHandler::NewL()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPluginErrorHandler* CSisxSifPluginErrorHandler::NewL()
+    {
+    CSisxSifPluginErrorHandler* self = new ( ELeave ) CSisxSifPluginErrorHandler;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginErrorHandler::~CSisxSifPluginErrorHandler()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPluginErrorHandler::~CSisxSifPluginErrorHandler()
+    {
+    delete iErrorMessage;
+    delete iErrorMessageDetails;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginErrorHandler::ErrorCategory()
+// ---------------------------------------------------------------------------
+//
+TErrorCategory CSisxSifPluginErrorHandler::ErrorCategory() const
+    {
+    switch( iErrorCode )
+        {
+        // System-wide error codes
+        case KErrNone:
+            return ENone;
+        case KErrNotFound:
+        case KErrGeneral:
+            return EUnexpectedError;
+        case KErrCancel:
+            return EUserCancelled;
+        case KErrNoMemory:
+            return ELowMemory;
+        case KErrNotSupported:
+        case KErrArgument:
+        case KErrTotalLossOfPrecision:
+        case KErrBadHandle:
+        case KErrOverflow:
+        case KErrUnderflow:
+        case KErrAlreadyExists:
+        case KErrPathNotFound:
+        case KErrDied:
+            return EUnexpectedError;
+        case KErrInUse:
+            return EInstallerBusy;
+        case KErrServerTerminated:
+        case KErrServerBusy:
+        case KErrCompletion:
+        case KErrNotReady:
+        case KErrUnknown:
+            return EUnexpectedError;
+        case KErrCorrupt:
+            return ECorruptedPackage;
+        case KErrAccessDenied:
+            return ESecurityError;
+        case KErrLocked:
+        case KErrWrite:
+        case KErrDisMounted:
+        case KErrEof:
+            return EUnexpectedError;
+        case KErrDiskFull:
+            return ELowDiskSpace;
+        case KErrBadDriver:
+        case KErrBadName:
+        case KErrCommsLineFail:
+        case KErrCommsFrame:
+        case KErrCommsOverrun:
+        case KErrCommsParity:
+        case KErrTimedOut:
+        case KErrCouldNotConnect:
+        case KErrCouldNotDisconnect:
+        case KErrDisconnected:
+        case KErrBadLibraryEntryPoint:
+        case KErrBadDescriptor:
+        case KErrAbort:
+        case KErrTooBig:
+        case KErrDivideByZero:
+        case KErrBadPower:
+        case KErrDirFull:
+        case KErrHardwareNotAvailable:
+        case KErrSessionClosed:
+            return EUnexpectedError;
+        case KErrPermissionDenied:
+            return ESecurityError;
+        case KErrExtensionNotSupported:
+        case KErrCommsBreak:
+        case KErrNoSecureTime:
+            return EUnexpectedError;
+
+        // Native SW Installer error codes
+        case KErrSISFieldIdMissing:
+        case KErrSISFieldLengthMissing:
+        case KErrSISFieldLengthInvalid:
+        case KErrSISStringInvalidLength:
+        case KErrSISSignedControllerSISControllerMissing:
+        case KErrSISControllerSISInfoMissing:
+        case KErrSISInfoSISUidMissing:
+        case KErrSISInfoSISNamesMissing:
+            return ECorruptedPackage;
+        case KErrSISFieldBufferTooShort:
+            return EUnexpectedError;
+        case KErrSISStringArrayInvalidElement:
+        case KErrSISInfoSISVendorNamesMissing:
+        case KErrSISInfoSISVersionMissing:
+        case KErrSISControllerSISSupportedLanguagesMissing:
+        case KErrSISSupportedLanguagesInvalidElement:
+        case KErrSISLanguageInvalidLength:
+        case KErrSISContentsSISSignedControllerMissing:
+        case KErrSISContentsSISDataMissing:
+        case KErrSISDataSISFileDataUnitMissing:
+        case KErrSISFileDataUnitTargetMissing:
+        case KErrSISFileOptionsMissing:
+        case KErrSISFileDataUnitDescriptorMissing:
+        case KErrSISFileDataDescriptionMissing:
+        case KErrSISContentsMissing:
+        case KErrSISEmbeddedControllersMissing:
+        case KErrSISEmbeddedDataUnitsMissing:
+        case KErrSISControllerOptionsMissing:
+        case KErrSISExpressionMissing:
+        case KErrSISExpressionStringValueMissing:
+        case KErrSISOptionsStringMissing:
+        case KErrSISFileOptionsExpressionMissing:
+        case KErrSISExpressionHeadValueMissing:
+        case KErrSISEmbeddedSISOptionsMissing:
+        case KErrSISInfoSISUpgradeRangeMissing:
+        case KErrSISDependencyMissingUid:
+        case KErrSISDependencyMissingVersion:
+        case KErrSISDependencyMissingNames:
+        case KErrSISPrerequisitesMissingDependency:
+        case KErrSISControllerMissingPrerequisites:
+        case KErrSISUpgradeRangeMissingVersion:
+        case KErrSISUnexpectedFieldType:
+        case KErrSISExpressionUnknownOperator:
+        case KErrSISArrayReadError:
+        case KErrSISArrayTypeMismatch:
+        case KErrSISInvalidStringLength:
+        case KErrSISCompressionNotSupported:
+        case KErrSISTooDeeplyEmbedded:
+            return ECorruptedPackage;
+        case KErrSISInvalidTargetFile:
+        case KErrSISWouldOverWrite:
+            return ESecurityError;
+        case KErrSISInfoMissingRemoveDirectories:
+            return ECorruptedPackage;
+        case KErrSISNotEnoughSpaceToInstall:
+            return ELowDiskSpace;
+        case KErrInstallerLeave:
+        case KErrPolicyFileCorrupt:
+            return EUnexpectedError;
+        case KErrSignatureSchemeNotSupported:
+        case KErrDigestNotSupported:
+            return EApplicationNotCompatible;
+        case KErrBadHash:
+            return ECorruptedPackage;
+        case KErrSecurityError:
+            return ESecurityError;
+        case KErrBadUsage:
+        case KErrInvalidType:
+        case KErrInvalidExpression:
+        case KErrExpressionToComplex:
+            return EUnexpectedError;
+        case KErrMissingBasePackage:
+        case KErrInvalidUpgrade:
+            return EApplicationNotCompatible;
+        case KErrInvalidEclipsing:
+            return ESecurityError;
+        case KErrWrongHeaderFormat:
+            return EUnexpectedError;
+        case KErrCapabilitiesMismatch:
+            return ESecurityError;
+        case KErrLegacySisFile:
+        case KErrInvalidSoftwareTypeRegistrationFile:
+            return EApplicationNotCompatible;
+
+        // Other error codes
+        default:
+            __ASSERT_DEBUG( EFalse, Panic( ESisxSifUnknownErrorCode ) );
+            return EUnexpectedError;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginErrorHandler::ErrorCode()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginErrorHandler::FillOutputParamsL( COpaqueNamedParams& aOutputParams ) const
+    {
+    if( iErrorCode )
+        {
+        aOutputParams.AddIntL( KSifOutParam_ErrCategory, ErrorCategory() );
+        aOutputParams.AddIntL( KSifOutParam_ErrCode, iErrorCode );
+        }
+    if( iExtendedErrorCode )
+        {
+        aOutputParams.AddIntL( KSifOutParam_ExtendedErrCode, iExtendedErrorCode );
+        }
+    if( iErrorMessage )
+        {
+        aOutputParams.AddStringL( KSifOutParam_ErrMessage, *iErrorMessage );
+        }
+    if( iErrorMessageDetails )
+        {
+        aOutputParams.AddStringL( KSifOutParam_ErrMessageDetails, *iErrorMessageDetails );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginErrorHandler::ErrorCode()
+// ---------------------------------------------------------------------------
+//
+TInt CSisxSifPluginErrorHandler::ErrorCode() const
+    {
+    return iErrorCode;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginErrorHandler::SetErrorCode()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginErrorHandler::SetErrorCode( TInt aErrorCode )
+    {
+    iErrorCode = aErrorCode;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginErrorHandler::ExtendedErrorCode()
+// ---------------------------------------------------------------------------
+//
+TInt CSisxSifPluginErrorHandler::ExtendedErrorCode() const
+    {
+    return iExtendedErrorCode;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginErrorHandler::SetExtendedErrorCode()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginErrorHandler::SetExtendedErrorCode( TInt aExtendedErrorCode )
+    {
+    iExtendedErrorCode = aExtendedErrorCode;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginErrorHandler::ErrorMessage()
+// ---------------------------------------------------------------------------
+//
+const TDesC& CSisxSifPluginErrorHandler::ErrorMessage() const
+    {
+    if( iErrorMessage )
+        {
+        return *iErrorMessage;
+        }
+    return KNullDesC;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginErrorHandler::SetErrorMessage()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginErrorHandler::SetErrorMessage( const TDesC& aErrorMessage )
+    {
+    if( iErrorMessage )
+        {
+        delete iErrorMessage;
+        iErrorMessage = NULL;
+        }
+    iErrorMessage = aErrorMessage.AllocL();
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginErrorHandler::ErrorMessageDetails()
+// ---------------------------------------------------------------------------
+//
+const TDesC& CSisxSifPluginErrorHandler::ErrorMessageDetails() const
+    {
+    if( iErrorMessageDetails )
+        {
+        return *iErrorMessageDetails;
+        }
+    return KNullDesC;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginErrorHandler::SetErrorMessageDetails()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginErrorHandler::SetErrorMessageDetails(
+        const TDesC& aErrorMessageDetails )
+    {
+    if( iErrorMessageDetails )
+        {
+        delete iErrorMessageDetails;
+        iErrorMessageDetails = NULL;
+        }
+    iErrorMessageDetails = aErrorMessageDetails.AllocL();
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginErrorHandler::CSisxSifPluginErrorHandler()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPluginErrorHandler::CSisxSifPluginErrorHandler()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginError::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginErrorHandler::ConstructL()
+    {
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/src/sisxsifplugininstallparams.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,323 @@
+/*
+* Copyright (c) 2010 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:  Installation parameters class.
+*
+*/
+
+#include "sisxsifplugininstallparams.h" // CSisxSifPluginInstallParams
+#include <f32file.h>                    // EDriveC
+
+using namespace Usif;
+
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::NewL()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPluginInstallParams* CSisxSifPluginInstallParams::NewL(
+        const COpaqueNamedParams& aParams )
+    {
+    CSisxSifPluginInstallParams* self = new ( ELeave ) CSisxSifPluginInstallParams;
+    CleanupStack::PushL( self );
+    self->ConstructL( aParams );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::NewL()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPluginInstallParams* CSisxSifPluginInstallParams::NewL(
+        const CSisxSifPluginInstallParams& aParams )
+    {
+    CSisxSifPluginInstallParams* self = new ( ELeave ) CSisxSifPluginInstallParams;
+    CleanupStack::PushL( self );
+    self->ConstructL( aParams );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::~CSisxSifPluginInstallParams()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPluginInstallParams::~CSisxSifPluginInstallParams()
+    {
+    delete iOCSPUrl;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::IsSilentMode()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginInstallParams::IsSilentMode() const
+    {
+    return iUseSilentMode;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::IsInstallInactive()
+// ---------------------------------------------------------------------------
+//
+TBool CSisxSifPluginInstallParams::IsInstallInactive() const
+    {
+    return iIsInstallInactive;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::Drive()
+// ---------------------------------------------------------------------------
+//
+TUint CSisxSifPluginInstallParams::Drive() const
+    {
+    return iDrive;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::Language()
+// ---------------------------------------------------------------------------
+//
+TLanguage CSisxSifPluginInstallParams::Language() const
+    {
+    return iLanguage;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::OCSPUrl()
+// ---------------------------------------------------------------------------
+//
+const TDesC& CSisxSifPluginInstallParams::OCSPUrl() const
+    {
+    if( iOCSPUrl )
+        {
+        return *iOCSPUrl;
+        }
+    return KNullDesC;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::PerformOCSP()
+// ---------------------------------------------------------------------------
+//
+TSifPolicy CSisxSifPluginInstallParams::PerformOCSP() const
+    {
+    return iPerformOCSP;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::IgnoreOCSPWarnings()
+// ---------------------------------------------------------------------------
+//
+TSifPolicy CSisxSifPluginInstallParams::IgnoreOCSPWarnings() const
+    {
+    return iIgnoreOCSPWarnings;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::AllowUpgrade()
+// ---------------------------------------------------------------------------
+//
+TSifPolicy CSisxSifPluginInstallParams::AllowUpgrade() const
+    {
+    return iAllowUpgrade;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::InstallOptionalItems()
+// ---------------------------------------------------------------------------
+//
+TSifPolicy CSisxSifPluginInstallParams::InstallOptionalItems() const
+    {
+    return iInstallOptionalItems;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::AllowUntrusted()
+// ---------------------------------------------------------------------------
+//
+TSifPolicy CSisxSifPluginInstallParams::AllowUntrusted() const
+    {
+    return iAllowUntrusted;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::GrantCapabilities()
+// ---------------------------------------------------------------------------
+//
+TSifPolicy CSisxSifPluginInstallParams::GrantCapabilities() const
+    {
+    return iGrantCapabilities;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::AllowAppShutdown()
+// ---------------------------------------------------------------------------
+//
+TSifPolicy CSisxSifPluginInstallParams::AllowAppShutdown() const
+    {
+    return iAllowAppShutdown;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::AllowAppBreakDependency()
+// ---------------------------------------------------------------------------
+//
+TSifPolicy CSisxSifPluginInstallParams::AllowAppBreakDependency() const
+    {
+    return iAllowAppBreakDependency;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::AllowOverwrite()
+// ---------------------------------------------------------------------------
+//
+TSifPolicy CSisxSifPluginInstallParams::AllowOverwrite() const
+    {
+    return iAllowOverwrite;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::PackageInfo()
+// ---------------------------------------------------------------------------
+//
+TSifPolicy CSisxSifPluginInstallParams::PackageInfo() const
+    {
+    return iPackageInfo;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::AllowIncompatible()
+// ---------------------------------------------------------------------------
+//
+TSifPolicy CSisxSifPluginInstallParams::AllowIncompatible() const
+    {
+    return iAllowIncompatible;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::CSisxSifPluginInstallParams()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPluginInstallParams::CSisxSifPluginInstallParams() : iAllowUntrusted( ENotAllowed )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginInstallParams::ConstructL( const COpaqueNamedParams& aParams )
+    {
+    iUseSilentMode = GetIntParam( aParams, KSifInParam_InstallSilently, EFalse );
+    iIsInstallInactive = GetIntParam( aParams, KSifInParam_InstallInactive, EFalse );
+    // TODO: change drive and language params as arrays when available
+    iDrive = static_cast<TUint>( GetIntParam( aParams, KSifInParam_Drive, EDriveC ) );
+    iLanguage = static_cast<TLanguage>( GetIntParam( aParams, KSifInParam_Languages,
+            ELangNone ) );
+    GetStringParamL( aParams, KSifInParam_OCSPUrl, iOCSPUrl );
+    GetPolicyParam( aParams, KSifInParam_PerformOCSP, iPerformOCSP, EAllowed );
+    GetPolicyParam( aParams, KSifInParam_IgnoreOCSPWarnings, iIgnoreOCSPWarnings, EAllowed );
+    GetPolicyParam( aParams, KSifInParam_AllowUpgrade, iAllowUpgrade, EAllowed );
+    GetPolicyParam( aParams, KSifInParam_InstallOptionalItems, iInstallOptionalItems, EAllowed );
+    GetPolicyParam( aParams, KSifInParam_AllowUntrusted, iAllowUntrusted, ENotAllowed );
+    GetPolicyParam( aParams, KSifInParam_GrantCapabilities, iGrantCapabilities, EAllowed );
+    GetPolicyParam( aParams, KSifInParam_AllowAppShutdown, iAllowAppShutdown, EAllowed );
+    GetPolicyParam( aParams, KSifInParam_AllowAppBreakDependency, iAllowAppBreakDependency,
+            EAllowed );
+    GetPolicyParam( aParams, KSifInParam_AllowOverwrite, iAllowOverwrite, EAllowed );
+    GetPolicyParam( aParams, KSifInParam_PackageInfo, iPackageInfo, EAllowed );
+    GetPolicyParam( aParams, KSifInParam_AllowIncompatible, iAllowIncompatible, EAllowed );
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginInstallParams::ConstructL( const CSisxSifPluginInstallParams& aParams )
+    {
+	iUseSilentMode = aParams.iUseSilentMode;
+	iIsInstallInactive = aParams.iIsInstallInactive;
+    iDrive = aParams.iDrive;
+    iLanguage = aParams.iLanguage;
+    if( aParams.iOCSPUrl )
+        {
+        iOCSPUrl = aParams.iOCSPUrl->AllocL();
+        }
+    iPerformOCSP = aParams.iPerformOCSP;
+    iIgnoreOCSPWarnings = aParams.iIgnoreOCSPWarnings;
+    iAllowUpgrade = aParams.iAllowUpgrade;
+    iInstallOptionalItems = aParams.iInstallOptionalItems;
+    iAllowUntrusted = aParams.iAllowUntrusted;
+    iGrantCapabilities = aParams.iGrantCapabilities;
+    iAllowAppShutdown = aParams.iAllowAppShutdown;
+    iAllowAppBreakDependency = aParams.iAllowAppBreakDependency;
+    iAllowOverwrite = aParams.iAllowOverwrite;
+    iPackageInfo = aParams.iPackageInfo;
+    iAllowIncompatible = aParams.iAllowIncompatible;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::GetIntParam()
+// ---------------------------------------------------------------------------
+//
+TInt CSisxSifPluginInstallParams::GetIntParam( const COpaqueNamedParams& aParams,
+        const TDesC& aParamName, TInt aDefaultValue )
+    {
+    TInt value = aDefaultValue;
+    TBool paramFound = EFalse;
+    TRAPD( err, paramFound = aParams.GetIntByNameL( aParamName, value ) );
+    if( !err && paramFound )
+        {
+        return value;
+        }
+    return aDefaultValue;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::GetPolicyParam()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginInstallParams::GetPolicyParam( const COpaqueNamedParams& aParams,
+        const TDesC& aParamName, TSifPolicy& aPolicy, const TSifPolicy& aDefault )
+    {
+    TInt value = aDefault;
+    TBool paramFound = EFalse;
+    TRAPD( err, paramFound = aParams.GetIntByNameL( aParamName, value ) );
+    if( !err && paramFound )
+        {
+        aPolicy = static_cast<TSifPolicy>( value );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginInstallParams::GetStringParamL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginInstallParams::GetStringParamL( const COpaqueNamedParams& aParams,
+        const TDesC& aParamName, HBufC*& aBuf )
+    {
+    TPtr value( NULL, 0 );
+    TRAPD( err, value = aParams.StringByNameL( aParamName ) );
+    if( !err && value.Length() )
+        {
+        if( aBuf )
+            {
+            delete aBuf;
+            aBuf = NULL;
+            }
+        aBuf = value.AllocL();
+        }
+    }
+
--- a/appinstaller/AppinstUi/sisxsifplugin/src/sisxsifpluginuihandler.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sisxsifplugin/src/sisxsifpluginuihandler.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -16,10 +16,13 @@
 */
 
 #include "sisxsifpluginuihandler.h"     // CSisxSifPluginUiHandler
+#include "sisxsifpluginerrorhandler.h"  // CSisxSifPluginErrorHandler
 #include "sisxsifplugin.pan"            // Panic codes
 #include "sisxsifcleanuputils.h"        // CleanupResetAndDestroyPushL
 #include "sisxsifuiselectioncache.h"    // CSisxUISelectionCache
 #include <sifui.h>                      // CSifUi
+#include <sifuiappinfo.h>               // CSifUiAppInfo
+#include <sifuicertificateinfo.h>       // CSifUiCertificateInfo
 #include <bautils.h>                    // BaflUtils
 #include <driveinfo.h>                  // DriveInfo
 #include <featmgr.h>                    // FeatureManager
@@ -47,10 +50,11 @@
 // CSisxSifPluginUiHandler::NewL()
 // ---------------------------------------------------------------------------
 //
-CSisxSifPluginUiHandler* CSisxSifPluginUiHandler::NewL( RFs& aFs )
+CSisxSifPluginUiHandler* CSisxSifPluginUiHandler::NewL( RFs& aFs,
+        CSisxSifPluginErrorHandler& aErrorHandler )
     {
     FLOG( _L("CSisxSifPluginUiHandler::NewL") );
-    CSisxSifPluginUiHandler *self = new( ELeave ) CSisxSifPluginUiHandler( aFs );
+    CSisxSifPluginUiHandler *self = new( ELeave ) CSisxSifPluginUiHandler( aFs, aErrorHandler );
     CleanupStack::PushL( self );
     self->ConstructL();
     CleanupStack::Pop( self );
@@ -86,9 +90,10 @@
 // ---------------------------------------------------------------------------
 //
 void CSisxSifPluginUiHandler::DisplayErrorL( const Swi::CAppInfo& /*aAppInfo*/,
-        Swi::TErrorDialog /*aType*/, const TDesC& /*aParam*/ )
+        Swi::TErrorDialog aType, const TDesC& aParam )
     {
     FLOG( _L("CSisxSifPluginUiHandler::DisplayErrorL") );
+    SetDisplayErrorL( aType, aParam );
     }
 
 // ---------------------------------------------------------------------------
@@ -148,14 +153,11 @@
 //
 TBool CSisxSifPluginUiHandler::DisplayInstallL( const Swi::CAppInfo& /*aAppInfo*/,
         const CApaMaskedBitmap* /*aLogo*/,
-        const RPointerArray<Swi::CCertificateInfo>& aCertificates )
+        const RPointerArray<Swi::CCertificateInfo>& /*aCertificates*/ )
     {
     FLOG( _L("CSisxSifPluginUiHandler::DisplayInstallL") );
 
-    if( iSifUi )
-        {
-        iSifUi->SetCertificateInfoL( aCertificates );
-        }
+    iMode = EModeInstall;
     return ETrue;
     }
 
@@ -252,14 +254,30 @@
     {
     FLOG_2( _L("CSisxSifPluginUiHandler::HandleInstallEventL: aEvent %d, aValue %d"), aEvent, aValue );
 
+    if( iSifUi->IsCancelled() )
+        {
+        return EFalse;
+        }
+
+    TSifOperationPhase phase = ( iMode == EModeInstall ? EInstalling : EUninstalling );
     switch( aEvent )
         {
         case Swi::EEventSetProgressBarFinalValue:
-            iSifUi->ShowProgressL( aAppInfo, iMaxInstalledSize, aValue );
+            iProgressBarFinalValue = aValue;
+            if( iMode == EModeInstall )
+                {
+                CSifUiAppInfo *appInfo = GetAppInfoLC( aAppInfo );
+                iSifUi->ShowProgressL( *appInfo, aValue );
+                CleanupStack::PopAndDestroy( appInfo );
+                }
             break;
 
         case Swi::EEventUpdateProgressBar:
-            iSifUi->IncreaseProgressBarValueL( aValue );
+            if( iMode == EModeInstall )
+                {
+                iSifUi->IncreaseProgressBarValueL( aValue );
+                }
+            PublishProgressL( phase, EFileOperation, aValue, iProgressBarFinalValue );
             break;
 
         case Swi::EEventOcspCheckEnd:
@@ -309,7 +327,7 @@
     FLOG( _L("CSisxSifPluginUiHandler::DisplaySecurityWarningL") );
     TBool result = EFalse;
 
-    if( iDriveSelectionRequired )
+    if( iIsDriveSelectionRequired )
         {
         AddMemorySelectionL();
         }
@@ -318,7 +336,11 @@
     switch( aSigValidationResult )
         {
         case Swi::EValidationSucceeded:
-            result = iSifUi->ShowConfirmationL( aAppInfo, iMaxInstalledSize, iLogo );
+            {
+            CSifUiAppInfo *appInfo = GetAppInfoLC( aAppInfo );
+            result = iSifUi->ShowConfirmationL( *appInfo );
+            CleanupStack::PopAndDestroy( appInfo );
+            }
             break;
 
         case Swi::ESignatureSelfSigned:
@@ -331,7 +353,9 @@
         case Swi::EMandatorySignatureMissing:
             if( aInstallAnyway )
                 {
-                result = iSifUi->ShowConfirmationL( aAppInfo, iMaxInstalledSize, iLogo );
+                CSifUiAppInfo *appInfo = GetAppInfoLC( aAppInfo );
+                result = iSifUi->ShowConfirmationL( *appInfo );
+                CleanupStack::PopAndDestroy( appInfo );
                 }
             break;
 
@@ -348,7 +372,7 @@
 //
 TBool CSisxSifPluginUiHandler::DisplayOcspResultL( const Swi::CAppInfo& /*aAppInfo*/,
         Swi::TRevocationDialogMessage /*aMessage*/, RPointerArray<TOCSPOutcome>& /*aOutcomes*/,
-        RPointerArray<Swi::CCertificateInfo>& /*aCertificates*/,TBool /*aWarningOnly*/ )
+        RPointerArray<Swi::CCertificateInfo>& /*aCertificates*/, TBool /*aWarningOnly*/ )
     {
     FLOG( _L("CSisxSifPluginUiHandler::DisplayOcspResultL") );
 
@@ -360,7 +384,7 @@
 // ---------------------------------------------------------------------------
 //
 void CSisxSifPluginUiHandler::DisplayCannotOverwriteFileL( const Swi::CAppInfo& /*aAppInfo*/,
-        const Swi::CAppInfo& /*aInstalledAppInfo*/,const TDesC& /*aFileName*/ )
+        const Swi::CAppInfo& /*aInstalledAppInfo*/, const TDesC& /*aFileName*/ )
     {
     FLOG( _L("CSisxSifPluginUiHandler::DisplayCannotOverwriteFileL") );
 
@@ -383,11 +407,12 @@
 // CSisxSifPluginUiHandler::DisplayUninstallL()
 // ---------------------------------------------------------------------------
 //
-TBool CSisxSifPluginUiHandler::DisplayUninstallL( const Swi::CAppInfo& aAppInfo )
+TBool CSisxSifPluginUiHandler::DisplayUninstallL( const Swi::CAppInfo& /*aAppInfo*/ )
     {
     FLOG( _L("CSisxSifPluginUiHandler::DisplayUninstallL") );
 
-    return iSifUi->ShowConfirmationL( aAppInfo );
+    iMode = EModeUninstall;
+    return ETrue;       // uninstall is always silent
     }
 
 // ---------------------------------------------------------------------------
@@ -396,7 +421,8 @@
 //
 void CSisxSifPluginUiHandler::DisplayPreparingInstallL( const TDesC& /*aFileName*/ )
     {
-    // TODO: should this be displayed?
+    FLOG( _L("CSisxSifPluginUiHandler::DisplayPreparingInstallL") );
+    // TODO: display preparing install
     }
 
 // ---------------------------------------------------------------------------
@@ -405,48 +431,31 @@
 //
 void CSisxSifPluginUiHandler::DisplayCompleteL()
     {
-    if( iSifUi )
-        {
-        iSifUi->ShowCompleteL();
-        }
+    FLOG( _L("CSisxSifPluginUiHandler::DisplayCompleteL") );
+
+    iSifUi->ShowCompleteL();
+    iMode = EModeUndefined;
     }
 
 // ---------------------------------------------------------------------------
 // CSisxSifPluginUiHandler::DisplayFailedL()
 // ---------------------------------------------------------------------------
 //
-void CSisxSifPluginUiHandler::DisplayFailedL( TInt aErrorCode )
+void CSisxSifPluginUiHandler::DisplayFailedL( const CSisxSifPluginErrorHandler& aError )
     {
-    if( iSifUi )
-        {
-        _LIT( KErrorMessage, "Error" );
-        iSifUi->ShowFailedL( aErrorCode, KErrorMessage );
-        }
-    }
+    FLOG_1( _L("CSisxSifPluginUiHandler::DisplayFailedL, error code %d"), aError.ErrorCode() );
 
-// ---------------------------------------------------------------------------
-// CSisxSifPluginUiHandler::SetDriveSelectionRequired()
-// ---------------------------------------------------------------------------
-//
-void CSisxSifPluginUiHandler::SetDriveSelectionRequired( TBool aIsRequired )
-    {
-    iDriveSelectionRequired = aIsRequired;
-    }
-
-// ---------------------------------------------------------------------------
-// CSisxSifPluginUiHandler::SetMaxInstalledSize()
-// ---------------------------------------------------------------------------
-//
-void CSisxSifPluginUiHandler::SetMaxInstalledSize( TInt aSize )
-    {
-    iMaxInstalledSize = aSize;
+    // TODO: add error details
+    iSifUi->ShowFailedL( aError.ErrorCode(), aError.ErrorMessage() );
     }
 
 // ---------------------------------------------------------------------------
 // CSisxSifPluginUiHandler::CSisxSifPluginUiHandler()
 // ---------------------------------------------------------------------------
 //
-CSisxSifPluginUiHandler::CSisxSifPluginUiHandler( RFs& aFs ) : iFs( aFs )
+CSisxSifPluginUiHandler::CSisxSifPluginUiHandler( RFs& aFs,
+        CSisxSifPluginErrorHandler& aErrorHandler ) :
+        CSisxSifPluginUiHandlerBase( aFs, aErrorHandler )
     {
     }
 
@@ -505,19 +514,31 @@
     {
     ASSERT( aCertificates.Count() == aPkixResults.Count() );
 
-    RPointerArray<Swi::CCertificateInfo> certificates;
-    CleanupClosePushL( certificates );  // does not own array items
+    RPointerArray<CSifUiCertificateInfo> certificates;
+    CleanupResetAndDestroyPushL( certificates );
 
     for( TInt index = 0; index < aCertificates.Count(); ++index )
         {
         TValidationStatus status = aPkixResults[ index ]->Error();
         if( status.iReason == EValidatedOK )
             {
-            Swi::CCertificateInfo* cert = aCertificates[ index ];
-            certificates.AppendL( cert );   // not owned
+            CSifUiCertificateInfo* cert = CSifUiCertificateInfo::NewLC( *aCertificates[ index ] );
+            certificates.AppendL( cert );
+            CleanupStack::Pop( cert );
             }
         }
     iSifUi->SetCertificateInfoL( certificates );
     CleanupStack::PopAndDestroy( &certificates );
     }
 
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandler::GetAppInfoLC()
+// ---------------------------------------------------------------------------
+//
+CSifUiAppInfo* CSisxSifPluginUiHandler::GetAppInfoLC( const Swi::CAppInfo& aAppInfo )
+    {
+    CSifUiAppInfo *appInfo = CSifUiAppInfo::NewLC( aAppInfo.AppName(), aAppInfo.AppVendor(),
+            aAppInfo.AppVersion(), iMaxInstalledSize, iLogo );
+    return appInfo;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsifplugin/src/sisxsifpluginuihandlerbase.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,240 @@
+/*
+* Copyright (c) 2010 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:  Base class for SISX SIF plugin UI handlers.
+*
+*/
+
+#include "sisxsifpluginuihandlerbase.h"     // CSisxSifPluginUiHandlerBase
+#include "sisxsifplugininstallparams.h"     // CSisxSifPluginInstallParams
+#include "sisxsifpluginerrorhandler.h"      // CSisxSifPluginErrorHandler
+#include "sisxsifcleanuputils.h"            // CleanupResetAndDestroyPushL
+
+using namespace Usif;
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerBase::CSisxSifPluginUiHandlerBase()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPluginUiHandlerBase::CSisxSifPluginUiHandlerBase( RFs& aFs,
+        CSisxSifPluginErrorHandler& aErrorHandler ) : iFs( aFs ),
+        iErrorHandler( aErrorHandler )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerBase::~CSisxSifPluginUiHandlerBase()
+// ---------------------------------------------------------------------------
+//
+CSisxSifPluginUiHandlerBase::~CSisxSifPluginUiHandlerBase()
+    {
+    delete iInstallParams;
+    delete iGlobalComponentId;
+    delete iPublishSifOperationInfo;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerBase::SetInstallParamsL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerBase::SetInstallParamsL(
+        const CSisxSifPluginInstallParams& aInstallParams )
+    {
+    if( iInstallParams )
+        {
+        delete iInstallParams;
+        iInstallParams = NULL;
+        }
+    iInstallParams = CSisxSifPluginInstallParams::NewL( aInstallParams );
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerBase::SetMaxInstalledSize()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerBase::SetMaxInstalledSize( TInt aSize )
+    {
+    iMaxInstalledSize = aSize;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerBase::SetDriveSelectionRequired()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerBase::SetDriveSelectionRequired( TBool aIsRequired )
+    {
+    iIsDriveSelectionRequired = aIsRequired;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerBase::PublishStartL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerBase::PublishStartL( const CComponentInfo::CNode& aRootNode )
+    {
+    RPointerArray<HBufC> appNames;
+    CleanupResetAndDestroyPushL( appNames );
+    RPointerArray<HBufC> appIcons;
+    CleanupResetAndDestroyPushL( appIcons );
+
+    const RPointerArray<CComponentInfo::CApplicationInfo>& apps = aRootNode.Applications();
+    for( TInt index = 0; index < apps.Count(); ++index )
+        {
+        HBufC* name = apps[ index ]->Name().AllocLC();
+        appNames.AppendL( name );
+        CleanupStack::Pop( name );
+        HBufC* icon = apps[ index ]->IconFileName().AllocLC();
+        appIcons.AppendL( icon );
+        CleanupStack::Pop( icon );
+        }
+
+    if( iGlobalComponentId )
+        {
+        delete iGlobalComponentId;
+        iGlobalComponentId = NULL;
+        }
+    iGlobalComponentId = aRootNode.GlobalComponentId().AllocL();
+
+    CSifOperationStartData* data = CSifOperationStartData::NewLC( *iGlobalComponentId,
+            aRootNode.ComponentName(), appNames, appIcons, aRootNode.MaxInstalledSize(),
+            KNullDesC, KNullDesC, aRootNode.SoftwareTypeName() );
+
+    if( !iPublishSifOperationInfo )
+        {
+        iPublishSifOperationInfo = CPublishSifOperationInfo::NewL();
+        }
+    iPublishSifOperationInfo->PublishStartL( *data );
+
+    CleanupStack::PopAndDestroy( 3, &appNames );    // data, appIcons, appNames
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerBase::PublishProgressL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerBase::PublishProgressL( TSifOperationPhase aPhase,
+        TSifOperationSubPhase aSubPhase, TInt aCurrentProgress, TInt aTotal )
+    {
+    User::LeaveIfNull( iPublishSifOperationInfo );
+    CSifOperationProgressData* data = CSifOperationProgressData::NewLC( *iGlobalComponentId,
+            aPhase, aSubPhase, aCurrentProgress, aTotal );
+    iPublishSifOperationInfo->PublishProgressL( *data );
+    CleanupStack::PopAndDestroy( data );
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerBase::PublishCompletionL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerBase::PublishCompletionL( const CSisxSifPluginErrorHandler& aError )
+    {
+    User::LeaveIfNull( iPublishSifOperationInfo );
+    CSifOperationEndData* data = CSifOperationEndData::NewLC( *iGlobalComponentId,
+            aError.ErrorCategory(), aError.ErrorCode(), aError.ErrorMessage(),
+            aError.ErrorMessageDetails() );
+    iPublishSifOperationInfo->PublishCompletionL( *data );
+    CleanupStack::PopAndDestroy( data );
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerBase::SetDisplayErrorL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerBase::SetDisplayErrorL( Swi::TErrorDialog aType, const TDesC& aParam )
+    {
+    iErrorHandler.SetExtendedErrorCode( aType );
+
+    // TODO: localised detailed error messages
+    TBuf<512> details;
+    switch( aType )
+        {
+        case Swi::EUiAlreadyInRom:
+            details.Copy(_L("EUiAlreadyInRom"));
+            break;
+        case Swi::EUiMissingDependency:
+            details.Copy(_L("EUiMissingDependency"));
+            break;
+        case Swi::EUiRequireVer:
+            details.Copy(_L("EUiRequireVer"));
+            break;
+        case Swi::EUiRequireVerOrGreater:
+            details.Copy(_L("EUiRequireVerOrGreater"));
+            break;
+        case Swi::EUiFileCorrupt:
+            details.Copy(_L("EUiFileCorrupt"));
+            break;
+        case Swi::EUiDiskNotPresent:
+            details.Copy(_L("EUiDiskNotPresent"));
+            break;
+        case Swi::EUiCannotRead:
+            details.Copy(_L("EUiCannotRead"));
+            break;
+        case Swi::EUiCannotDelete:
+            details.Copy(_L("EUiCannotDelete"));
+            break;
+        case Swi::EUiInvalidFileName:
+            details.Copy(_L("EUiInvalidFileName"));
+            break;
+        case Swi::EUiFileNotFound:
+            details.Copy(_L("EUiFileNotFound"));
+            break;
+        case Swi::EUiInsufficientSpaceOnDrive:
+            details.Copy(_L("EUiInsufficientSpaceOnDrive"));
+            break;
+        case Swi::EUiCapabilitiesCannotBeGranted:
+            details.Copy(_L("EUiCapabilitiesCannotBeGranted"));
+            break;
+        case Swi::EUiUnknownFile:
+            details.Copy(_L("EUiUnknownFile"));
+            break;
+        case Swi::EUiMissingBasePackage:
+            details.Copy(_L("EUiMissingBasePackage"));
+            break;
+        case Swi::EUiConstraintsExceeded:
+            details.Copy(_L("EUiConstraintsExceeded"));
+            break;
+        case Swi::EUiSIDViolation:
+            details.Copy(_L("EUiSIDViolation"));
+            break;
+        case Swi::EUiVIDViolation:
+            details.Copy(_L("EUiVIDViolation"));
+            break;
+        case Swi::EUiNoMemoryInDrive:
+            details.Copy(_L("EUiNoMemoryInDrive"));
+            break;
+        case Swi::EUiUIDPackageViolation:
+            details.Copy(_L("EUiUIDPackageViolation"));
+            break;
+        case Swi::EUiOSExeViolation:
+            details.Copy(_L("EUiOSExeViolation"));
+            break;
+        case Swi::EUiSIDMismatch:
+            details.Copy(_L("EUiSIDMismatch"));
+            break;
+        case Swi::EUiBlockingEclipsingFile:
+            details.Copy(_L("EUiBlockingEclipsingFile"));
+            break;
+        default:
+            break;
+        }
+
+    if( aParam.Length() )
+        {
+        details.Append( _L("\n") );
+        details.Append( aParam );
+        }
+    }
+
--- a/appinstaller/AppinstUi/sisxsifplugin/src/sisxsifpluginuihandlersilent.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sisxsifplugin/src/sisxsifpluginuihandlersilent.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -15,23 +15,14 @@
 *
 */
 
-#include "sisxsifpluginuihandlersilent.h"   // CSisxSifPluginUiHandlerSilentSilent
+#include "sisxsifpluginuihandlersilent.h"   // CSisxSifPluginUiHandlerSilent
+#include "sisxsifplugininstallparams.h"     // CSisxSifPluginInstallParams
+#include "sisxsifpluginerrorhandler.h"      // CSisxSifPluginErrorHandler
 #include "sisxsifplugin.pan"                // Panic codes
 #include "sisxsifcleanuputils.h"            // CleanupResetAndDestroyPushL
 
 using namespace Usif;
 
-// TODO: replace with proper tracing support
-#ifdef _DEBUG
-#define FLOG(x)         RDebug::Print(x);
-#define FLOG_1(x,y)     RDebug::Print(x, y);
-#define FLOG_2(x,y,z)   RDebug::Print(x, y, z);
-#else
-#define FLOG(x)
-#define FLOG_1(x,y)
-#define FLOG_2(x,y,z)
-#endif
-
 
 // ======== MEMBER FUNCTIONS ========
 
@@ -39,10 +30,11 @@
 // CSisxSifPluginUiHandlerSilent::NewL()
 // ---------------------------------------------------------------------------
 //
-CSisxSifPluginUiHandlerSilent* CSisxSifPluginUiHandlerSilent::NewL( RFs& aFs )
+CSisxSifPluginUiHandlerSilent* CSisxSifPluginUiHandlerSilent::NewL( RFs& aFs,
+        CSisxSifPluginErrorHandler& aErrorHandler )
     {
-    FLOG( _L("CSisxSifPluginUiHandlerSilent::NewL") );
-    CSisxSifPluginUiHandlerSilent *self = new( ELeave ) CSisxSifPluginUiHandlerSilent( aFs );
+    CSisxSifPluginUiHandlerSilent *self = new( ELeave ) CSisxSifPluginUiHandlerSilent(
+            aFs, aErrorHandler );
     CleanupStack::PushL( self );
     self->ConstructL();
     CleanupStack::Pop( self );
@@ -55,7 +47,6 @@
 //
 CSisxSifPluginUiHandlerSilent::~CSisxSifPluginUiHandlerSilent()
     {
-    FLOG( _L("CSisxSifPluginUiHandlerSilent::~CSisxSifPluginUiHandlerSilent") );
     }
 
 // ---------------------------------------------------------------------------
@@ -65,9 +56,23 @@
 TBool CSisxSifPluginUiHandlerSilent::DisplayTextL( const Swi::CAppInfo& /*aAppInfo*/,
         Swi::TFileTextOption /*aOption*/, const TDesC& /*aText*/ )
     {
-    FLOG( _L("CSisxSifPluginUiHandlerSilent::DisplayTextL") );
-
-    return ETrue;
+	TBool okToContinue = EFalse;
+	if( iInstallParams )
+		{
+		switch( iInstallParams->PackageInfo() )
+			{
+			case EAllowed:
+				okToContinue = ETrue;
+				break;
+			case EUserConfirm:
+				// TODO: EPolicyUserConfirm
+				break;
+			case ENotAllowed:
+			default:
+				break;
+			}
+		}
+    return okToContinue;
     }
 
 // ---------------------------------------------------------------------------
@@ -75,21 +80,33 @@
 // ---------------------------------------------------------------------------
 //
 void CSisxSifPluginUiHandlerSilent::DisplayErrorL( const Swi::CAppInfo& /*aAppInfo*/,
-        Swi::TErrorDialog /*aType*/, const TDesC& /*aParam*/ )
+        Swi::TErrorDialog aType, const TDesC& aParam )
     {
-    FLOG( _L("CSisxSifPluginUiHandlerSilent::DisplayErrorL") );
+    SetDisplayErrorL( aType, aParam );
     }
 
 // ---------------------------------------------------------------------------
-// CSisxSifPluginUiHandlerSilent::
+// CSisxSifPluginUiHandlerSilent::DisplayDependencyBreakL()
 // ---------------------------------------------------------------------------
 //
 TBool CSisxSifPluginUiHandlerSilent::DisplayDependencyBreakL( const Swi::CAppInfo& /*aAppInfo*/,
         const RPointerArray<TDesC>& /*aComponents*/ )
     {
-    FLOG( _L("CSisxSifPluginUiHandlerSilent::DisplayDependencyBreakL") );
-
-    return ETrue;
+	TBool okToContinue = EFalse;
+	if( iInstallParams )
+		{
+		switch( iInstallParams->AllowAppBreakDependency() )
+			{
+			case EAllowed:
+				okToContinue = ETrue;
+				break;
+			case EUserConfirm:
+			case ENotAllowed:
+			default:
+				break;
+			}
+		}
+    return okToContinue;
     }
 
 // ---------------------------------------------------------------------------
@@ -99,9 +116,21 @@
 TBool CSisxSifPluginUiHandlerSilent::DisplayApplicationsInUseL( const Swi::CAppInfo& /*aAppInfo*/,
         const RPointerArray<TDesC>& /*aAppNames*/ )
     {
-    FLOG( _L("CSisxSifPluginUiHandlerSilent::DisplayApplicationsInUseL") );
-
-    return ETrue;
+	TBool okToContinue = EFalse;
+	if( iInstallParams )
+		{
+		switch( iInstallParams->AllowAppShutdown() )
+			{
+			case EAllowed:
+				okToContinue = ETrue;
+				break;
+			case EUserConfirm:
+			case ENotAllowed:
+			default:
+				break;
+			}
+		}
+    return okToContinue;
     }
 
 // ---------------------------------------------------------------------------
@@ -111,18 +140,45 @@
 TBool CSisxSifPluginUiHandlerSilent::DisplayQuestionL( const Swi::CAppInfo& /*aAppInfo*/,
         Swi::TQuestionDialog aQuestion, const TDesC& /*aDes*/ )
     {
-    FLOG( _L("CSisxSifPluginUiHandlerSilent::DisplayQuestionL") );
-
-    TBool result = ETrue;
+	TBool okToContinue = EFalse;
     switch( aQuestion )
         {
         case Swi::EQuestionIncompatible:
+        	if( iInstallParams )
+        		{
+				switch( iInstallParams->AllowIncompatible() )
+					{
+					case EAllowed:
+						okToContinue = ETrue;
+						break;
+                    case EUserConfirm:
+					case ENotAllowed:
+					default:
+						break;
+					}
+        		}
             break;
+
         case Swi::EQuestionOverwriteFile:
+        	if( iInstallParams )
+        		{
+				switch( iInstallParams->AllowOverwrite() )
+					{
+					case EAllowed:
+						okToContinue = ETrue;
+						break;
+					case EUserConfirm:
+					case ENotAllowed:
+					default:
+						break;
+					}
+        		}
+        	break;
+
         default:
             break;
         }
-    return result;
+    return okToContinue;
     }
 
 // ---------------------------------------------------------------------------
@@ -133,8 +189,6 @@
         const CApaMaskedBitmap* /*aLogo*/,
         const RPointerArray<Swi::CCertificateInfo>& /*aCertificates*/ )
     {
-    FLOG( _L("CSisxSifPluginUiHandlerSilent::DisplayInstallL") );
-
     return ETrue;
     }
 
@@ -145,9 +199,21 @@
 TBool CSisxSifPluginUiHandlerSilent::DisplayGrantCapabilitiesL( const Swi::CAppInfo& /*aAppInfo*/,
         const TCapabilitySet& /*aCapabilitySet*/ )
     {
-    FLOG( _L("CSisxSifPluginUiHandlerSilent::DisplayGrantCapabilitiesL") );
-
-    return ETrue;
+	TBool okToContinue = EFalse;
+	if( iInstallParams )
+		{
+		switch( iInstallParams->GrantCapabilities() )
+			{
+			case EAllowed:
+				okToContinue = ETrue;
+				break;
+			case EUserConfirm:
+			case ENotAllowed:
+			default:
+				break;
+			}
+		}
+    return okToContinue;
     }
 
 // ---------------------------------------------------------------------------
@@ -155,11 +221,31 @@
 // ---------------------------------------------------------------------------
 //
 TInt CSisxSifPluginUiHandlerSilent::DisplayLanguageL( const Swi::CAppInfo& /*aAppInfo*/,
-        const RArray<TLanguage>& /*aLanguages*/ )
+        const RArray<TLanguage>& aLanguages )
     {
-    FLOG( _L("CSisxSifPluginUiHandlerSilent::DisplayLanguageL") );
-
-    return 0;
+	TInt languageIndex = 0;
+	TBool found = EFalse;
+	TInt languageCount = aLanguages.Count();
+	if( iInstallParams )
+		{
+		TLanguage lang = iInstallParams->Language();
+		TInt index = aLanguages.Find( lang );
+		if( index >= 0 && index < languageCount )
+			{
+			languageIndex = index;
+			found = ETrue;
+			}
+		}
+	if( !found )
+		{
+		TLanguage lang = User::Language();
+		TInt index = aLanguages.Find( lang );
+		if( index > 0 && index < languageCount )
+			{
+			languageIndex = index;
+			}
+		}
+    return languageIndex;
     }
 
 // ---------------------------------------------------------------------------
@@ -167,12 +253,32 @@
 // ---------------------------------------------------------------------------
 //
 TInt CSisxSifPluginUiHandlerSilent::DisplayDriveL( const Swi::CAppInfo& /*aAppInfo*/,
-        TInt64 /*aSize*/, const RArray<TChar>& /*aDriveLetters*/,
-        const RArray<TInt64>& /*aDriveSpaces*/ )
+        TInt64 aSize, const RArray<TChar>& aDriveLetters,
+        const RArray<TInt64>& aDriveSpaces )
     {
-    FLOG( _L("CSisxSifPluginUiHandlerSilent::DisplayDriveL") );
-
-    return 0;
+	TInt driveIndex = 0;
+	TBool found = EFalse;
+	TInt driveCount = aDriveLetters.Count();
+	if( iInstallParams )
+		{
+		TChar driveLetter = 0;
+		RFs::DriveToChar( iInstallParams->Drive(), driveLetter );
+		TInt index = aDriveLetters.Find( driveLetter );
+		if( index >= 0 && index < driveCount )
+			{
+			if( aDriveSpaces[ index ] > aSize )
+				{
+				driveIndex = index;
+				found = ETrue;
+				}
+			}
+		}
+	// TODO: should there be some default drive?
+	if( !found )
+		{
+		User::Leave( KErrNoMemory );
+		}
+    return driveIndex;
     }
 
 // ---------------------------------------------------------------------------
@@ -182,9 +288,21 @@
 TBool CSisxSifPluginUiHandlerSilent::DisplayUpgradeL( const Swi::CAppInfo& /*aAppInfo*/,
         const Swi::CAppInfo& /*aExistingAppInfo*/ )
     {
-    FLOG( _L("CSisxSifPluginUiHandlerSilent::DisplayUpgradeL") );
-
-    return ETrue;
+	TBool okToContinue = EFalse;
+	if( iInstallParams )
+		{
+		switch( iInstallParams->AllowUpgrade() )
+			{
+			case EAllowed:
+				okToContinue = ETrue;
+				break;
+			case EUserConfirm:
+			case ENotAllowed:
+			default:
+				break;
+			}
+		}
+    return okToContinue;
     }
 
 // ---------------------------------------------------------------------------
@@ -192,11 +310,27 @@
 // ---------------------------------------------------------------------------
 //
 TBool CSisxSifPluginUiHandlerSilent::DisplayOptionsL( const Swi::CAppInfo& /*aAppInfo*/,
-        const RPointerArray<TDesC>& /*aOptions*/, RArray<TBool>& /*aSelections*/ )
+        const RPointerArray<TDesC>& aOptions, RArray<TBool>& aSelections )
     {
-    FLOG( _L("CSisxSifPluginUiHandlerSilent::DisplayOptionsL") );
-
-    return ETrue;
+	TBool allowOptions = EFalse;
+	if( iInstallParams )
+		{
+		switch( iInstallParams->InstallOptionalItems() )
+			{
+			case EAllowed:
+				allowOptions = ETrue;
+				break;
+			case EUserConfirm:
+			case ENotAllowed:
+			default:
+				break;
+			}
+		}
+	for( TInt index = 0; index < aOptions.Count(); ++index )
+		{
+		aSelections[ index ] = allowOptions;
+		}
+    return ETrue;		// always ok to continue
     }
 
 // ---------------------------------------------------------------------------
@@ -206,8 +340,6 @@
 TBool CSisxSifPluginUiHandlerSilent::HandleInstallEventL( const Swi::CAppInfo& /*aAppInfo*/,
         Swi::TInstallEvent /*aEvent*/, TInt /*aValue*/, const TDesC& /*aDes*/ )
     {
-    FLOG( _L("CSisxSifPluginUiHandlerSilent::HandleInstallEventL") );
-
     return ETrue;
     }
 
@@ -217,9 +349,8 @@
 //
 void CSisxSifPluginUiHandlerSilent::HandleCancellableInstallEventL(
         const Swi::CAppInfo& /*aAppInfo*/, Swi::TInstallCancellableEvent /*aEvent*/,
-        Swi::MCancelHandler& /*aCancelHandler*/, TInt /*aValue*/,const TDesC& /*aDes*/ )
+        Swi::MCancelHandler& /*aCancelHandler*/, TInt /*aValue*/, const TDesC& /*aDes*/ )
     {
-    FLOG( _L("CSisxSifPluginUiHandlerSilent::HandleCancellableInstallEventL") );
     }
 
 // ---------------------------------------------------------------------------
@@ -232,15 +363,15 @@
         RPointerArray<Swi::CCertificateInfo>& /*aCertificates*/,
         TBool aInstallAnyway )
     {
-    FLOG( _L("CSisxSifPluginUiHandlerSilent::DisplaySecurityWarningL") );
-    TBool result = EFalse;
+    TBool okToContinue = EFalse;
 
     switch( aSigValidationResult )
         {
         case Swi::EValidationSucceeded:
-            result = ETrue;
+        	okToContinue = ETrue;
             break;
 
+        // TODO: check these, now same functionality as before
         case Swi::ESignatureSelfSigned:
         case Swi::ENoCertificate:
         case Swi::ECertificateValidationError:
@@ -249,9 +380,18 @@
         case Swi::ENoCodeSigningExtension:
         case Swi::ENoSupportedPolicyExtension:
         case Swi::EMandatorySignatureMissing:
-            if( aInstallAnyway )
+            if( aInstallAnyway && iInstallParams )
                 {
-                result = ETrue;
+				switch( iInstallParams->AllowUntrusted() )
+					{
+					case EAllowed:
+						okToContinue = ETrue;
+						break;
+					case EUserConfirm:
+					case ENotAllowed:
+					default:
+						break;
+					}
                 }
             break;
 
@@ -259,7 +399,7 @@
             break;
         }
 
-    return result;
+    return okToContinue;
     }
 
 // ---------------------------------------------------------------------------
@@ -268,11 +408,24 @@
 //
 TBool CSisxSifPluginUiHandlerSilent::DisplayOcspResultL( const Swi::CAppInfo& /*aAppInfo*/,
         Swi::TRevocationDialogMessage /*aMessage*/, RPointerArray<TOCSPOutcome>& /*aOutcomes*/,
-        RPointerArray<Swi::CCertificateInfo>& /*aCertificates*/,TBool /*aWarningOnly*/ )
+        RPointerArray<Swi::CCertificateInfo>& /*aCertificates*/, TBool aWarningOnly )
     {
-    FLOG( _L("CSisxSifPluginUiHandlerSilent::DisplayOcspResultL") );
-
-    return ETrue;
+	TBool okToContinue = EFalse;
+	// TODO: KSWInstallerOcspProcedure setting (off/on/must)
+	if( iInstallParams && aWarningOnly )
+		{
+		switch( iInstallParams->IgnoreOCSPWarnings() )
+			{
+			case EAllowed:
+				okToContinue = ETrue;
+				break;
+			case EUserConfirm:
+			case ENotAllowed:
+			default:
+				break;
+			}
+		}
+    return okToContinue;
     }
 
 // ---------------------------------------------------------------------------
@@ -280,9 +433,9 @@
 // ---------------------------------------------------------------------------
 //
 void CSisxSifPluginUiHandlerSilent::DisplayCannotOverwriteFileL( const Swi::CAppInfo& /*aAppInfo*/,
-        const Swi::CAppInfo& /*aInstalledAppInfo*/,const TDesC& /*aFileName*/ )
+        const Swi::CAppInfo& /*aInstalledAppInfo*/, const TDesC& /*aFileName*/ )
     {
-    FLOG( _L("CSisxSifPluginUiHandlerSilent::DisplayCannotOverwriteFileL") );
+	// TODO: error handling
     }
 
 // ---------------------------------------------------------------------------
@@ -293,9 +446,21 @@
         const TDesC& /*aDependencyName*/, TVersion /*aWantedVersionFrom*/,
         TVersion /*aWantedVersionTo*/, TVersion /*aInstalledVersion*/ )
     {
-    FLOG( _L("CSisxSifPluginUiHandlerSilent::DisplayMissingDependencyL") );
-
-    return ETrue;
+	TBool okToContinue = EFalse;
+	if( iInstallParams )
+		{
+		switch( iInstallParams->AllowAppBreakDependency() )
+			{
+			case EAllowed:
+				okToContinue = ETrue;
+				break;
+			case EUserConfirm:
+			case ENotAllowed:
+			default:
+				break;
+			}
+		}
+    return okToContinue;
     }
 
 // ---------------------------------------------------------------------------
@@ -304,16 +469,44 @@
 //
 TBool CSisxSifPluginUiHandlerSilent::DisplayUninstallL( const Swi::CAppInfo& /*aAppInfo*/ )
     {
-    FLOG( _L("CSisxSifPluginUiHandlerSilent::DisplayUninstallL") );
+    return ETrue;
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerSilent::DisplayPreparingInstallL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerSilent::DisplayPreparingInstallL( const TDesC& /*aFileName*/ )
+    {
+    // nothing displayed in silent mode
+    }
 
-    return ETrue;
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerSilent::DisplayCompleteL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerSilent::DisplayCompleteL()
+    {
+    // nothing displayed in silent mode
+    }
+
+// ---------------------------------------------------------------------------
+// CSisxSifPluginUiHandlerSilent::DisplayFailedL()
+// ---------------------------------------------------------------------------
+//
+void CSisxSifPluginUiHandlerSilent::DisplayFailedL(
+        const CSisxSifPluginErrorHandler& /*aError*/ )
+    {
+    // nothing displayed in silent mode
     }
 
 // ---------------------------------------------------------------------------
 // CSisxSifPluginUiHandlerSilent::CSisxSifPluginUiHandlerSilent()
 // ---------------------------------------------------------------------------
 //
-CSisxSifPluginUiHandlerSilent::CSisxSifPluginUiHandlerSilent( RFs& aFs ) : iFs( aFs )
+CSisxSifPluginUiHandlerSilent::CSisxSifPluginUiHandlerSilent( RFs& aFs,
+        CSisxSifPluginErrorHandler& aErrorHandler ) :
+        CSisxSifPluginUiHandlerBase( aFs, aErrorHandler )
     {
     }
 
--- a/appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/activerunner.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/activerunner.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -32,10 +32,10 @@
     delete d_ptr;
 }
 
-void ActiveRunner::install(const QString &fileName, bool silent)
+void ActiveRunner::install(const QString &fileName, bool silent, bool openfile)
 {
     if (d_ptr) {
-        d_ptr->Install(fileName, silent);
+        d_ptr->Install(fileName, silent, openfile);
     }
 }
 
--- a/appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/activerunner.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/activerunner.h	Thu Jul 22 16:35:01 2010 +0100
@@ -37,7 +37,7 @@
     void opFailed(int error);
 
 public:     // new functions
-    void install(const QString &fileName, bool silent);
+    void install(const QString &fileName, bool silent, bool openfile);
     void remove(const Usif::TComponentId& aComponentId, bool silent);
     void remove(const TUid& aUid, const TDesC8& aMime, bool silent);
 
--- a/appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/activerunner_symbian.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/activerunner_symbian.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -19,10 +19,10 @@
 #include "activerunner.h"
 
 
-ActiveRunnerPrivate::ActiveRunnerPrivate(ActiveRunner *aRunner) :
+ActiveRunnerPrivate::ActiveRunnerPrivate( ActiveRunner *aRunner ) :
         CActive( CActive::EPriorityStandard ), q_ptr( aRunner )
     {
-    CActiveScheduler::Add(this);
+    CActiveScheduler::Add( this );
     }
 
 ActiveRunnerPrivate::~ActiveRunnerPrivate()
@@ -36,6 +36,7 @@
         {
         iSWInstLauncher.Close();
         }
+    iFs.Close();
     delete iFileName;
     delete iArguments;
     delete iResults;
@@ -43,22 +44,13 @@
 
 TInt ActiveRunnerPrivate::Initialize( bool aUseSif )
     {
-    iUseSif = aUseSif;
-    TInt ret = KErrNone;
-    if( iUseSif )
-        {
-        ret = iSoftwareInstall.Connect();
-        }
-    else
-        {
-        ret = iSWInstLauncher.Connect();
-        }
-    return ret;
+    TRAPD( err, DoInitializeL( aUseSif ) );
+    return err;
     }
 
-TInt ActiveRunnerPrivate::Install( const QString& aFileName, bool aSilent )
+TInt ActiveRunnerPrivate::Install( const QString& aFileName, bool aSilent, bool aOpenFile )
     {
-    TRAPD( err, DoInstallL( aFileName, aSilent ) );
+    TRAPD( err, DoInstallL( aFileName, aSilent, aOpenFile ) );
     return err;
     }
 
@@ -107,7 +99,22 @@
     return KErrNone;
     }
 
-void ActiveRunnerPrivate::DoInstallL( const QString& aFileName, bool aSilent )
+void ActiveRunnerPrivate::DoInitializeL( bool aUseSif )
+    {
+    iUseSif = aUseSif;
+    User::LeaveIfError( iFs.Connect() );
+    User::LeaveIfError( iFs.ShareProtected() );
+    if( iUseSif )
+        {
+        User::LeaveIfError( iSoftwareInstall.Connect() );
+        }
+    else
+        {
+        User::LeaveIfError( iSWInstLauncher.Connect() );
+        }
+    }
+
+void ActiveRunnerPrivate::DoInstallL( const QString& aFileName, bool aSilent, bool aOpenFile )
     {
     if( iFileName )
         {
@@ -129,6 +136,13 @@
             }
         }
 
+    RFile fileHandle;
+    if( aOpenFile )
+        {
+        User::LeaveIfError( fileHandle.Open( iFs, fileName, EFileRead ) );
+        CleanupClosePushL( fileHandle );
+        }
+
     if( iUseSif )
         {
         if( aSilent )
@@ -142,11 +156,25 @@
             iResults = NULL;
             iResults = Usif::COpaqueNamedParams::NewL();
 
-            iSoftwareInstall.Install( fileName, *iArguments, *iResults, iStatus );
+            if( aOpenFile )
+                {
+                iSoftwareInstall.Install( fileHandle, *iArguments, *iResults, iStatus );
+                }
+            else
+                {
+                iSoftwareInstall.Install( fileName, *iArguments, *iResults, iStatus );
+                }
             }
         else
             {
-            iSoftwareInstall.Install( fileName, iStatus );
+            if( aOpenFile )
+                {
+                iSoftwareInstall.Install( fileHandle, iStatus );
+                }
+            else
+                {
+                iSoftwareInstall.Install( fileName, iStatus );
+                }
             }
         }
     else
@@ -155,13 +183,34 @@
             {
             SwiUI::TInstallOptions defaultOptions;
             SwiUI::TInstallOptionsPckg optPckg( defaultOptions );
-            iSWInstLauncher.SilentInstall( iStatus, fileName, optPckg );
+
+            if( aOpenFile )
+                {
+                iSWInstLauncher.SilentInstall( iStatus, fileHandle, optPckg );
+                }
+            else
+                {
+                iSWInstLauncher.SilentInstall( iStatus, fileName, optPckg );
+                }
             }
         else
             {
-            iSWInstLauncher.Install( iStatus, fileName );
+            if( aOpenFile )
+                {
+                iSWInstLauncher.Install( iStatus, fileHandle );
+                }
+            else
+                {
+                iSWInstLauncher.Install( iStatus, fileName );
+                }
             }
         }
+
+    if( aOpenFile )
+        {
+        CleanupStack::PopAndDestroy( &fileHandle );
+        }
+
     SetActive();
     }
 
--- a/appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/activerunner_symbian.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/activerunner_symbian.h	Thu Jul 22 16:35:01 2010 +0100
@@ -29,12 +29,12 @@
 class ActiveRunnerPrivate : public CActive
 {
 public:     // constructor and destructor
-    ActiveRunnerPrivate(ActiveRunner *aRunner);
+    ActiveRunnerPrivate( ActiveRunner *aRunner );
     ~ActiveRunnerPrivate();
 
 public:     // new functions
     TInt Initialize( bool aUseSif );
-    TInt Install( const QString& aFileName, bool aSilent );
+    TInt Install( const QString& aFileName, bool aSilent, bool aOpenFile );
     TInt Remove( const Usif::TComponentId& aComponentId, bool aSilent );
     TInt Remove( const TUid& aUid, const TDesC8& aMime, bool aSilent );
 
@@ -44,12 +44,14 @@
     TInt RunError(TInt aError);
 
 private:    // new functions
-    void DoInstallL( const QString& aFileName, bool aSilent );
+    void DoInitializeL( bool aUseSif );
+    void DoInstallL( const QString& aFileName, bool aSilent, bool aOpenFile );
     void DoRemoveL( const Usif::TComponentId& aComponentId, bool aSilent );
     void DoRemoveL( const TUid& aUid, const TDesC8& aMime, bool aSilent );
 
 private:    // data
     ActiveRunner *q_ptr;
+    RFs iFs;
     HBufC* iFileName;
     TBool iUseSif;
     Usif::COpaqueNamedParams *iArguments;
--- a/appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/testinstaller.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/testinstaller.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -19,6 +19,7 @@
 #include "activerunner.h"
 #include <hbmainwindow.h>
 #include <hbview.h>
+#include <hbtoolbar.h>
 #include <hbpushbutton.h>
 #include <hbcheckbox.h>
 #include <hbcombobox.h>
@@ -40,25 +41,21 @@
 
 
 TestInstaller::TestInstaller(int& argc, char* argv[]) : HbApplication(argc, argv),
-    mMainWindow(0), mMainView(0), mUseSilentInstall(false),
+    mMainWindow(0), mInstallView(0), mRemoveView(0),
+    mUseSilentInstall(false), mUseSilentUninstall(false), mUseRFileInstall(false),
     mInstallDirectories(0), mInstallableFiles(0), mRemovableApps(0),
     mCurrentDirPath(), mCurrentFile(), mRunner(0)
 {
     mMainWindow = new HbMainWindow();
-    mMainView = new HbView();
-    mMainView->setTitle(tr("Test Installer"));
-
-    QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
 
-    HbCheckBox *silentInstallCheckBox = new HbCheckBox;
-    silentInstallCheckBox->setText(tr("Silent install/uninstall"));
-    connect(silentInstallCheckBox, SIGNAL(stateChanged(int)),
-        this, SLOT(silentCheckChanged(int)));
-    layout->addItem(silentInstallCheckBox);
-    layout->addStretch();
+    // Install view
+    mInstallView = new HbView();
+    mInstallView->setTitle(tr("Test Installer"));
+
+    QGraphicsLinearLayout *installLayout = new QGraphicsLinearLayout(Qt::Vertical);
 
     HbLabel *installTitle = new HbLabel(tr("Install:"));
-    layout->addItem(installTitle);
+    installLayout->addItem(installTitle);
 
     mInstallDirectories = new HbComboBox;
     mInstallDirectories->setEditable(false);
@@ -67,46 +64,81 @@
     mInstallDirectories->setItems(dirList);
     connect(mInstallDirectories, SIGNAL(currentIndexChanged(int)),
         this, SLOT(installableDirChanged(int)));
-    layout->addItem(mInstallDirectories);
+    installLayout->addItem(mInstallDirectories);
 
     mInstallableFiles = new HbComboBox;
     mInstallableFiles->setEditable(false);
     connect(mInstallableFiles, SIGNAL(currentIndexChanged(int)),
             this, SLOT(installableFileChanged(int)));
-    layout->addItem(mInstallableFiles);
+    installLayout->addItem(mInstallableFiles);
+
+    HbCheckBox *silentInstallCheckBox = new HbCheckBox;
+    silentInstallCheckBox->setText(tr("Silent"));
+    connect(silentInstallCheckBox, SIGNAL(stateChanged(int)),
+            this, SLOT(silentInstallCheckChanged(int)));
+    installLayout->addItem(silentInstallCheckBox);
+    HbCheckBox *rfileCheckBox = new HbCheckBox;
+    rfileCheckBox->setText(tr("Use RFile"));
+    connect(rfileCheckBox, SIGNAL(stateChanged(int)), this, SLOT(rfileCheckChanged(int)));
+    installLayout->addItem(rfileCheckBox);
+    installLayout->addStretch();
 
     HbPushButton *installNew = new HbPushButton(tr("Install using new API"));
-    layout->addItem(installNew);
+    installLayout->addItem(installNew);
     HbPushButton *installOld = new HbPushButton(tr("Install using old API"));
-    layout->addItem(installOld);
+    installLayout->addItem(installOld);
     HbPushButton *launchApp = new HbPushButton(tr("Install by opening file"));
-    layout->addItem(launchApp);
+    installLayout->addItem(launchApp);
+    installLayout->addStretch();
     connect(installNew, SIGNAL(clicked()), this, SLOT(installUsingNewApi()));
     connect(installOld, SIGNAL(clicked()), this, SLOT(installUsingOldApi()));
     connect(launchApp, SIGNAL(clicked()), this, SLOT(installByOpeningFile()));
-    layout->addStretch();
+
+    HbToolBar *installToolBar = new HbToolBar();
+    installToolBar->addAction(tr("RemoveView"), this, SLOT(removeViewActivated()));
+    installToolBar->addAction(tr("Exit"), this, SLOT(closeApp()));
+    mInstallView->setToolBar(installToolBar);
+
+    mInstallView->setLayout(installLayout);
+    mMainWindow->addView(mInstallView);
+
+    // Remove view
+    mRemoveView = new HbView();
+    mRemoveView->setTitle(tr("Test Uninstaller"));
+
+    QGraphicsLinearLayout *removeLayout = new QGraphicsLinearLayout(Qt::Vertical);
 
     HbLabel *uninstallTitle = new HbLabel(tr("Uninstall:"));
-    layout->addItem(uninstallTitle);
+    removeLayout->addItem(uninstallTitle);
+
     mRemovableApps = new HbComboBox;
     mRemovableApps->setEditable(false);
-    layout->addItem(mRemovableApps);
+    removeLayout->addItem(mRemovableApps);
+
+    HbCheckBox *silentRemoveCheckBox = new HbCheckBox;
+    silentRemoveCheckBox->setText(tr("Silent"));
+    connect(silentRemoveCheckBox, SIGNAL(stateChanged(int)),
+            this, SLOT(silentCheckChanged(int)));
+    removeLayout->addItem(silentRemoveCheckBox);
+    removeLayout->addStretch();
 
     HbPushButton *removeNew = new HbPushButton(tr("Remove using new API"));
-    layout->addItem(removeNew);
+    removeLayout->addItem(removeNew);
     HbPushButton *removeOld = new HbPushButton(tr("Remove using old API"));
-    layout->addItem(removeOld);
+    removeLayout->addItem(removeOld);
+    removeLayout->addStretch();
     connect(removeNew, SIGNAL(clicked()), this, SLOT(removeUsingNewApi()));
     connect(removeOld, SIGNAL(clicked()), this, SLOT(removeUsingOldApi()));
-    layout->addStretch();
 
-    HbPushButton *quit = new HbPushButton(tr("Exit"));
-    layout->addItem(quit);
+    mRemoveView->setLayout(removeLayout);
+    mMainWindow->addView(mRemoveView);
 
-    connect(quit, SIGNAL(clicked()), this, SLOT(closeApp()));
+    HbToolBar *removeToolBar = new HbToolBar();
+    removeToolBar->addAction(tr("InstallView"), this, SLOT(installViewActivated()));
+    removeToolBar->addAction(tr("Exit"), this, SLOT(closeApp()));
+    mRemoveView->setToolBar(removeToolBar);
 
-    mMainView->setLayout(layout);
-    mMainWindow->addView(mMainView);
+    mMainWindow->setCurrentView(mInstallView);
     mMainWindow->show();
 
     changeDir(mInstallDirectories->currentText());
@@ -116,16 +148,39 @@
 TestInstaller::~TestInstaller()
 {
     delete mRunner;
-    delete mMainView;
+    delete mInstallView;
+    delete mRemoveView;
     delete mMainWindow;
 }
 
-void TestInstaller::silentCheckChanged(int state)
+void TestInstaller::installViewActivated()
+{
+    mMainWindow->setCurrentView(mInstallView);
+}
+
+void TestInstaller::removeViewActivated()
+{
+    mMainWindow->setCurrentView(mRemoveView);
+}
+
+void TestInstaller::silentInstallCheckChanged(int state)
 {
     Qt::CheckState s = static_cast<Qt::CheckState>(state);
     mUseSilentInstall = (s == Qt::Checked);
 }
 
+void TestInstaller::silentRemoveCheckChanged(int state)
+{
+    Qt::CheckState s = static_cast<Qt::CheckState>(state);
+    mUseSilentUninstall = (s == Qt::Checked);
+}
+
+void TestInstaller::rfileCheckChanged(int state)
+{
+    Qt::CheckState s = static_cast<Qt::CheckState>(state);
+    mUseRFileInstall = (s == Qt::Checked);
+}
+
 void TestInstaller::installableDirChanged(int /*index*/)
 {
     if (mInstallDirectories) {
@@ -333,7 +388,7 @@
 void TestInstaller::doInstall(const QString &fileName)
 {
     if (mRunner) {
-        mRunner->install(fileName, mUseSilentInstall);
+        mRunner->install(fileName, mUseSilentInstall, mUseRFileInstall);
     }
 }
 
@@ -368,7 +423,7 @@
     if (mRemovableApps && mRunner) {
         int index = mRemovableApps->currentIndex();
         const TComponentId &compId(mRemovableComponentIds.at(index));
-        mRunner->remove(compId, mUseSilentInstall);
+        mRunner->remove(compId, mUseSilentUninstall);
     }
 }
 
--- a/appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/testinstaller.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/testinstaller.h	Thu Jul 22 16:35:01 2010 +0100
@@ -38,7 +38,11 @@
     ~TestInstaller();
 
 private slots:
-    void silentCheckChanged(int state);
+    void installViewActivated();
+    void removeViewActivated();
+    void silentInstallCheckChanged(int state);
+    void silentRemoveCheckChanged(int state);
+    void rfileCheckChanged(int state);
     void installableDirChanged(int index);
     void installableFileChanged(int index);
     void installUsingNewApi();
@@ -66,8 +70,11 @@
 
 private:    // data
     HbMainWindow *mMainWindow;
-    HbView       *mMainView;
+    HbView       *mInstallView;
+    HbView       *mRemoveView;
     bool         mUseSilentInstall;
+    bool         mUseSilentUninstall;
+    bool         mUseRFileInstall;
     HbComboBox   *mInstallDirectories;
     HbComboBox   *mInstallableFiles;
     HbComboBox   *mRemovableApps;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsilentinstallindicatorplugin/inc/sisxsilentinstallindicator.h	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2010 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 SISXSILENTINSTALLINDICATOR_H
+#define SISXSILENTINSTALLINDICATOR_H
+
+#include <QObject>
+#include <hbindicatorinterface.h>
+
+/**
+ * SWI Daemon sisx silent install universal indicator class. 
+ * Handles client request and showing the indications. 
+ */
+class SisxSilentInstallIndicator : public HbIndicatorInterface
+{
+public:
+    /**
+     * Constructor
+     */
+    SisxSilentInstallIndicator(const QString &indicatorType);
+    
+    /**
+     * Destructor
+     */
+    ~SisxSilentInstallIndicator();
+    
+    /**
+     * @see HbIndicatorInterface
+     */
+    bool handleInteraction(InteractionType type);
+    
+    /**
+     * @see HbIndicatorInterface
+     */
+    QVariant indicatorData(int role) const;
+    
+protected:
+    /**
+     * @see HbIndicatorInterface
+     */
+    bool handleClientRequest(RequestType type, const QVariant &parameter);
+    
+private: 
+    
+private:
+    
+    int mUpdateValue;
+    bool mIsInstallProcess;
+    
+};
+
+#endif // SISXSILENTINSTALLINDICATOR_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsilentinstallindicatorplugin/inc/sisxsilentinstallindicatorplugin.h	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2010 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 SISXSILENTINSTALLINDICATORPLUGIN_H
+#define SISXSILENTINSTALLINDICATORPLUGIN_H
+
+#include <QObject>
+#include <QStringList>
+#include <QVariant>
+#include <hbindicatorplugininterface.h>
+#include <hbindicatorinterface.h>
+
+/**
+ * SWI Daemon sisx silent install indicator plugin class. 
+ * Main class of indicator plugin. 
+ */
+class SisxSilentInstallIndicatorPlugin : public QObject, 
+                                         public HbIndicatorPluginInterface
+{
+    Q_OBJECT
+    Q_INTERFACES(HbIndicatorPluginInterface)
+
+public:
+    /**
+     * Constructor
+     */
+     SisxSilentInstallIndicatorPlugin();
+     
+     /**
+      * Destructor
+      */
+    ~SisxSilentInstallIndicatorPlugin();
+    
+    /**
+     * @see HbIndicatorPluginInterface
+     */
+    QStringList indicatorTypes() const;
+    
+    /**
+     * @see HbIndicatorPluginInterface
+     */   
+    bool accessAllowed(const QString &indicatorType,
+                       const QVariantMap &securityInfo) const;
+      
+    /**
+     * @see HbIndicatorPluginInterface
+     */
+    HbIndicatorInterface* createIndicator(const QString &indicatorType);
+    
+    /**
+     * @see HbIndicatorPluginInterface
+     */
+    int error() const;
+    
+private:
+    Q_DISABLE_COPY(SisxSilentInstallIndicatorPlugin)
+    
+    /**
+     * Error value
+     */
+    int mError;
+        
+    /**
+     * Indicator types 
+     * supported indicator types. 
+     */
+    QStringList mIndicatorTypes;
+};
+
+#endif // SISXSILENTINSTALLINDICATORPLUGIN_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsilentinstallindicatorplugin/rom/sisxsilentinstallindicatorplugin.iby	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2010 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 __SISXSILENTINSTALLINDICATORPLUGIN_IBY__
+#define __SISXSILENTINSTALLINDICATORPLUGIN_IBY__
+
+REM DLL
+file=ABI_DIR\UREL\sisxsilentinstallindicatorplugin.dll    SHARED_LIB_DIR\sisxsilentinstallindicatorplugin.dll UNPAGED
+data=\epoc32\data\z\resource\plugins\indicators\sisxsilentinstallindicatorplugin.qtplugin   \resource\plugins\indicators\sisxsilentinstallindicatorplugin.qtplugin
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsilentinstallindicatorplugin/sisxsilentinstallindicatorplugin.pro	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,55 @@
+#
+# Copyright (c) 2010 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:
+#
+
+TEMPLATE = lib
+TARGET = sisxsilentinstallindicatorplugin
+CONFIG += plugin
+CONFIG += hb
+
+INCLUDEPATH += .
+DEPENDPATH += .
+INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE
+INCLUDEPATH += ../../../../inc
+
+
+HEADERS += inc/sisxsilentinstallindicatorplugin.h \ 
+				inc/sisxsilentinstallindicator.h
+
+SOURCES += src/sisxsilentinstallindicatorplugin.cpp \ 
+				src/sisxsilentinstallindicator.cpp
+		   
+
+symbian {
+    TARGET.EPOCALLOWDLLDATA=1
+    TARGET.CAPABILITY = CAP_GENERAL_DLL
+    TARGET.UID3 = 0x2002FF6A 
+
+    pluginstub.sources = sisxsilentinstallindicatorplugin.dll
+    pluginstub.path = /resource/plugins/indicators
+    DEPLOYMENT += pluginstub
+}
+
+BLD_INF_RULES.prj_exports += \
+  "$${LITERAL_HASH}include <platform_paths.hrh>" \
+  "rom/sisxsilentinstallindicatorplugin.iby             CORE_APP_LAYER_IBY_EXPORT_PATH(sisxsilentinstallindicatorplugin.iby)" 
+  
+LIBS += -lxqservice
+LIBS += -lws32
+LIBS += -lapparc  
+LIBS += -lapgrfx
+
+# TODO: onko tarpeen apparc lippi ? lapparc 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsilentinstallindicatorplugin/src/sisxsilentinstallindicator.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,148 @@
+/*
+ * Copyright (c) 2010 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 <w32std.h>
+#include <apgtask.h>
+#include <apacmdln.h>
+#include <xqservicerequest.h>
+#include <hb/hbcore/hbtranslator.h>
+#include <hbicon.h>
+#include "sisxsilentinstallindicator.h" 
+
+const char KSifUiDefaultApplicationIcon[] = "qtg_large_application.svg";
+
+// ----------------------------------------------------------------------------
+// SisxSilentInstallIndicator::SisxSilentInstallIndicator
+// @see sisxsilentinstallindicator.h
+// ----------------------------------------------------------------------------
+SisxSilentInstallIndicator::SisxSilentInstallIndicator( 
+	const QString &indicatorType) :
+    	HbIndicatorInterface( indicatorType,    				
+    		HbIndicatorInterface::NotificationCategory,
+    		InteractionActivated),
+    	mUpdateValue(0),
+    	mIsInstallProcess(1) // Set installer mode as default.
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// SisxSilentInstallIndicator::~SisxSilentInstallIndicator
+// @see sisxsilentinstallindicator.h
+// ----------------------------------------------------------------------------
+SisxSilentInstallIndicator::~SisxSilentInstallIndicator()
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// SisxSilentInstallIndicator::handleInteraction
+// @see sisxsilentinstallindicator.h
+// ----------------------------------------------------------------------------
+bool SisxSilentInstallIndicator::handleInteraction(InteractionType type)
+    {
+    bool handled = false;
+    
+    if (type == InteractionActivated) 
+        {       
+        handled = true;           
+        emit deactivate(); 
+        }
+    
+    return handled;
+    }
+
+// ----------------------------------------------------------------------------
+// SisxSilentInstallIndicator::indicatorData
+// @see sisxsilentinstallindicator.h
+// ----------------------------------------------------------------------------
+QVariant SisxSilentInstallIndicator::indicatorData(int role) const
+{       
+switch(role)
+    {
+    case PrimaryTextRole: 
+        {
+        // Set text to first line of indicator.
+        QString text("");
+        // Check which mode is on.
+        if ( mIsInstallProcess  )
+            { 
+            text.append(QString("Installing"));            
+            }       
+        else
+            {
+            text.append(QString("Finalizing installations"));            
+            }     
+        return text;        
+        }
+    case SecondaryTextRole:
+        {
+        // Set text to second line of indicator.
+        QString text("");        
+        text.append(QString("%1 %").arg(mUpdateValue));      
+        return text; 
+        }    
+    case DecorationNameRole:
+    case MonoDecorationNameRole:
+        {
+        // Get icon for the indicator.
+        QString iconName(KSifUiDefaultApplicationIcon);
+        return iconName;
+        }
+    default: 
+        return QVariant();      
+    }
+}
+
+// ----------------------------------------------------------------------------
+// SisxSilentInstallIndicator::prepareDisplayName
+// @see sisxsilentinstallindicator.h
+// ----------------------------------------------------------------------------
+bool SisxSilentInstallIndicator::handleClientRequest( RequestType type, 
+                                                      const QVariant &parameter)
+    {
+    bool handled(false);
+    
+    switch (type) 
+        {
+        case RequestActivate:
+            {
+            // Read client percent value to float.
+            mUpdateValue = parameter.toInt();
+            
+            // If client send -1 insted of percent value (0-100) we need
+            // to switch to uninstaller mode.
+            if (mUpdateValue == -1)
+                {
+                mIsInstallProcess = false;
+                mUpdateValue = 0;
+                }           
+            emit dataChanged();
+            handled =  true;
+            }
+            break;
+        case RequestDeactivate:
+            {
+            emit deactivate();
+            }
+            break;
+        default:
+            break;
+        }
+
+    return handled;
+    }
+
+// EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/sisxsilentinstallindicatorplugin/src/sisxsilentinstallindicatorplugin.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2010 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 <QtPlugin>
+#include <QVariant>
+#include "sisxsilentinstallindicatorplugin.h"
+#include "sisxsilentinstallindicator.h"
+
+Q_EXPORT_PLUGIN(SisxSilentInstallIndicatorPlugin)
+
+// ----------------------------------------------------------------------------
+// SisxSilentInstallIndicatorPlugin::SisxSilentInstallIndicatorPlugin
+// @see sisxsilentinstallindicatorplugin.h
+// ----------------------------------------------------------------------------
+SisxSilentInstallIndicatorPlugin::SisxSilentInstallIndicatorPlugin() : mError(0)
+{
+   
+}
+
+// ----------------------------------------------------------------------------
+// SisxSilentInstallIndicatorPlugin::~SisxSilentInstallIndicatorPlugin
+// @see sisxsilentinstallindicatorplugin.h
+// ----------------------------------------------------------------------------
+SisxSilentInstallIndicatorPlugin::~SisxSilentInstallIndicatorPlugin()
+{
+}
+
+// ----------------------------------------------------------------------------
+// SisxSilentInstallIndicatorPlugin::indicatorTypes
+// Return notification types this plugin implements
+// @see sisxsilentinstallindicatorplugin.h
+// ----------------------------------------------------------------------------
+QStringList SisxSilentInstallIndicatorPlugin::indicatorTypes() const
+{
+  QStringList types; 
+  types << "com.nokia.sisxsilentinstall.indicatorplugin/1.0";
+  return types;
+}
+
+// ----------------------------------------------------------------------------
+// SisxSilentInstallIndicatorPlugin::accessAllowed
+// Check if client is allowed to use notification widget
+// @see sisxsilentinstallindicatorplugin.h
+// ----------------------------------------------------------------------------
+bool SisxSilentInstallIndicatorPlugin::accessAllowed(
+		const QString &indicatorType,
+    const QVariantMap &securityInfo) const
+{
+    Q_UNUSED(indicatorType)
+    Q_UNUSED(securityInfo)
+
+    // This plugin doesn't perform operations that may compromise security.
+    // All clients are allowed to use.
+    return true;
+}
+
+// ----------------------------------------------------------------------------
+// SisxSilentInstallIndicatorPlugin::createIndicator
+// @see sisxsilentinstallindicatorplugin.h
+// ----------------------------------------------------------------------------
+HbIndicatorInterface* SisxSilentInstallIndicatorPlugin::createIndicator(
+        const QString &indicatorType)
+{
+    HbIndicatorInterface *indicator = 
+            new SisxSilentInstallIndicator(indicatorType);
+    return indicator;
+}
+
+// ----------------------------------------------------------------------------
+// SisxSilentInstallIndicatorPlugin::error
+// @see sisxsilentinstallindicatorplugin.h
+// ----------------------------------------------------------------------------
+int SisxSilentInstallIndicatorPlugin::error() const
+{
+    return mError;
+}
+
+//EOF
--- a/appinstaller/AppinstUi/startuplistupdater/group/startuplistupdater.mmp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/startuplistupdater/group/startuplistupdater.mmp	Thu Jul 22 16:35:01 2010 +0100
@@ -37,11 +37,12 @@
 USERINCLUDE     ../inc
 
 LIBRARY         euser.lib
-LIBRARY         efsrv.lib				// RFs, RFile
-LIBRARY         dscstore.lib			// RDscStore, CDscItem
-LIBRARY         sisregistryclient.lib	// Swi::RSisRegistrySession, Swi::RSisRegistryEntry
-LIBRARY         featmgr.lib				// FeatureManager
-LIBRARY         bafl.lib				// RResourceFile
+LIBRARY         efsrv.lib               // RFs, RFile
+LIBRARY         dscstore.lib            // RDscStore, CDscItem
+LIBRARY         sisregistryclient.lib   // Swi::RSisRegistrySession, Swi::RSisRegistryEntry
+LIBRARY         siscontroller.lib       // Swi::TSisTrustStatus::IsTrusted
+LIBRARY         featmgr.lib             // FeatureManager
+LIBRARY         bafl.lib                // RResourceFile
 LIBRARY         platformenv.lib         // DriveInfo
 
 SMPSAFE
--- a/appinstaller/AppinstUi/startuplistupdater/inc/startuplistupdater.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/startuplistupdater/inc/startuplistupdater.h	Thu Jul 22 16:35:01 2010 +0100
@@ -50,6 +50,8 @@
     void RemoveImportedResourceFiles( RPointerArray<HBufC>& aResourceFileArray );
     void AppendExecutablesFromResourceFileL( const TDesC& aResourceFile,
             RPointerArray<HBufC>& aExecutableArray );
+    TBool IsValidExecutableForStartupL( const TDesC& aResourceFile,
+        const TDesC& aExecutableName );
     void GetInstalledAppsL( RPointerArray<HBufC>& aInstalledExecutableArray );
     void GetStartupListAppsL( RDscStore& aDscStore,
             RPointerArray<HBufC>& aStartedExecutableArray );
--- a/appinstaller/AppinstUi/startuplistupdater/src/startuplistupdater.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/startuplistupdater/src/startuplistupdater.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -26,6 +26,7 @@
 #include <swi/sisregistrysession.h>     // Swi::RSisRegistrySession
 #include <swi/sisregistrypackage.h>     // Swi::CSisRegistryPackage
 #include <swi/sisregistryentry.h>       // Swi::RSisRegistryEntry
+#include <swi/sistruststatus.h>         // Swi::TSisTrustStatus::IsTrusted
 
 _LIT( KImport, "import\\" );
 _LIT( KDriveAndPathFormat, "%c:%S" );
@@ -310,7 +311,7 @@
 
         CleanupStack::PopAndDestroy( buffer );
 
-        if( recoveryPolicy == EStartupItemExPolicyNone )
+        if( versionInfo == 0 && recoveryPolicy == EStartupItemExPolicyNone )
             {
             // PKG files use '!' for drive letters that user can decide at installation time
             if( executableName.Length() > 0 && executableName[ 0 ] == '!' )
@@ -318,7 +319,7 @@
                 executableName.Replace( 0, 1, KAsterisk );
 
                 TFindFile fileFinder( iFs );
-                CDir* executableDir;
+                CDir* executableDir;            // next FindWildByDir needs AllFiles capability
                 TInt err = fileFinder.FindWildByDir( executableName, KNullDesC, executableDir );
                 if( !err )
                     {
@@ -328,8 +329,7 @@
                     }
                 }
 
-            TEntry entry;
-            if( iFs.Entry( executableName, entry ) == KErrNone )    // needs AllFiles capability
+            if( IsValidExecutableForStartupL( aResourceFile, executableName ) )
                 {
                 aExecutableArray.AppendL( executableName.AllocL() );
                 }
@@ -340,6 +340,95 @@
     }
 
 // ---------------------------------------------------------------------------
+// CStartupListUpdater::IsValidExecutableForStartupL()
+// ---------------------------------------------------------------------------
+//
+TBool CStartupListUpdater::IsValidExecutableForStartupL( const TDesC& aResourceFile,
+        const TDesC& aExecutableName )
+    {
+    TBool isValid = EFalse;
+
+    TEntry entry;
+    if( iFs.Entry( aExecutableName, entry ) == KErrNone )   // needs AllFiles capability
+        {
+        isValid = ETrue;
+
+        // Extract package UID from the resource file name
+        // - allow both "[1234ABCD]" and "1234ABCD" formats
+        // - allow possible "0x" prefix too
+        TUid packageUid = KNullUid;
+        TParsePtrC parse( aResourceFile );
+        TPtrC parseName = parse.Name();
+        TInt fileNameLength = parseName.Length();
+        if( !parse.IsNameWild() && fileNameLength > 0 )
+            {
+            TPtr fileName( const_cast<TUint16*>( parseName.Ptr() ),
+                fileNameLength, fileNameLength );
+
+            if( fileName[ 0 ] == '[' && fileName[ fileNameLength - 1 ] == ']' )
+                {
+                const TInt KTwoCharsLength = 2;
+                fileNameLength -= KTwoCharsLength;
+                fileName = fileName.Mid( 1, fileNameLength );
+                }
+
+            _LIT( KHexPrefix, "0x" );
+            const TInt KHexPrefixLength = 2;
+            if( fileName.Left( KHexPrefixLength ) == KHexPrefix )
+                {
+                fileNameLength -= KHexPrefixLength;
+                fileName = fileName.Mid( KHexPrefixLength, fileNameLength );
+                }
+
+            TLex lex( fileName );
+            TUint32 uidValue = 0;
+            TInt lexError = lex.Val( uidValue, EHex );
+            if( !lexError )
+                {
+                packageUid.iUid = uidValue;
+                }
+            }
+
+        // Get package info from RSisRegistry, and check that
+        // - the package contains the resource file
+        // - the package is properly signed
+        if( packageUid != KNullUid )
+            {
+            Swi::RSisRegistrySession sisRegSession;
+            User::LeaveIfError( sisRegSession.Connect() );
+            CleanupClosePushL( sisRegSession );
+
+            Swi::RSisRegistryEntry package;
+            CleanupClosePushL( package );
+            TInt openError = package.Open( sisRegSession, packageUid );
+            if( !openError )
+                {
+                TBool hasResourceFile = EFalse;
+
+                RPointerArray<HBufC> files;
+                CleanupResetAndDestroyPushL( files );
+                package.FilesL( files );
+                for( TInt index = 0; index < files.Count() && !hasResourceFile; ++index )
+                    {
+                    hasResourceFile = ( aResourceFile.CompareF( *files[ index ] ) == 0 );
+                    }
+
+                if( hasResourceFile && package.TrustStatusL().IsTrusted() )
+                    {
+                    isValid = ETrue;
+                    }
+
+                CleanupStack::PopAndDestroy( &files );
+                }
+
+            CleanupStack::PopAndDestroy( 2, &sisRegSession );  // package, sisRegSession
+            }
+        }
+
+    return isValid;
+    }
+
+// ---------------------------------------------------------------------------
 // CStartupListUpdater::GetInstalledAppsL()
 // ---------------------------------------------------------------------------
 //
@@ -359,7 +448,7 @@
         Swi::RSisRegistryEntry entry;
         CleanupClosePushL( entry );
         entry.OpenL( sisRegistrySession, *( removablePackages[ index ] ) );
-        if( entry.IsPresentL() && entry.RemovableL() )
+        if( entry.RemovableL() )
             {
             GetExecutablesFromEntryL( entry, aInstalledExecutableArray );
             }
--- a/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/conf/mt_startuplistupdater.cfg	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/conf/mt_startuplistupdater.cfg	Thu Jul 22 16:35:01 2010 +0100
@@ -36,4 +36,24 @@
 delete test
 [Endtest]
 
+[Test]
+title Install embedded startable exe
+create mt_startuplistupdater test
+test NotInStartList c:\sys\bin\teststartlistembedded.exe
+//test Install e:\testing\data\teststartlistembedded.sisx
+test Install c:\data\installs\teststartlistembedded.sisx
+pause 1000
+test InStartList c:\sys\bin\teststartlistembedded.exe
+delete test
+[Endtest]
 
+[Test]
+title Remove embedded startable exe
+create mt_startuplistupdater test
+test InStartList c:\sys\bin\teststartlistembedded.exe
+test Remove 0xED2159D3
+pause 1000
+test NotInStartList c:\sys\bin\teststartlistembedded.exe
+delete test
+[Endtest]
+
--- a/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/ctc_compile_tests.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/ctc_compile_tests.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -22,6 +22,7 @@
 echo ----------------------------------------------------------------------
 echo.
 pushd group
+call sbs reallyclean
 call sbs -c armv5_urel
 call sbs -c winscw_udeb
 popd
--- a/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/ctc_instrument_code.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/ctc_instrument_code.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -17,7 +17,7 @@
 
 echo ----------------------------------------------------------------------
 echo.
-echo Instrumenting code (armv5 urel and winscw udeb, function coverage)
+echo Instrumenting code (armv5 urel and winscw udeb, decision coverage)
 echo.
 echo ----------------------------------------------------------------------
 echo.
@@ -26,7 +26,7 @@
 if exist MON.dat del MON.dat
 if exist profile.txt del profile.txt
 call sbs reallyclean
-call ctcwrap -i f -2comp -C "EXCLUDE+*.UID.CPP" sbs -c armv5_urel
-call ctcwrap -i f -2comp -C "EXCLUDE+*.UID.CPP" sbs -c winscw_udeb
+call ctcwrap -i d -2comp -C "EXCLUDE+*.UID.CPP" sbs -c armv5_urel
+call ctcwrap -i d -2comp -C "EXCLUDE+*.UID.CPP" sbs -c winscw_udeb
 popd
 
--- a/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/ctc_run_tests.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/ctc_run_tests.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -21,8 +21,12 @@
 echo.
 echo ----------------------------------------------------------------------
 echo.
+echo Note: module test can be run also manually. Start STIF UI and run
+echo test cases listed in conf\mt_startuplistupdater.cfg file. Use ctcpost
+echo and ctc2html commands to process the CTC output file (MON.dat).
+echo.
 pushd ..\..\group
-call \epoc32\release\winscw\udeb\ATSInterface.exe –testmodule testscripter –config c:\testframework\mt_startuplistupdater.cfg
+call \epoc32\release\winscw\udeb\ATSInterface.exe -testmodule testscripter -config c:\testframework\mt_startuplistupdater.cfg
 
 echo.
 echo.
Binary file appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data/mmc/teststartlistembedded.sisx has changed
Binary file appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data/mmc/teststartlistembedded_winscw.sisx has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/bld.inf	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2010 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:  Test exe for startup list updater test module.
+*
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_MMPFILES
+teststartlistembedded.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/datafile.txt	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,1 @@
+This is data file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/doall.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,49 @@
+@echo off
+rem
+rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:  Creates test exe for startup list updater test module.
+rem
+
+set CERTPATH=%1
+if not x%CERTPATH%x == xx goto doit
+echo Usage
+echo doall.bat [path to RD certificates]
+goto end
+
+:doit
+echo on
+call sbs
+call makesis teststartlistembedded.pkg
+call makesis teststartlistembedded_winscw.pkg
+call signsis teststartlistembedded.sis teststartlistembedded.sisx %CERTPATH%\rd.cer %CERTPATH%\rd-key.pem
+call signsis teststartlistembedded_winscw.sis teststartlistembedded_winscw.sisx %CERTPATH%\rd.cer %CERTPATH%\rd-key.pem
+del teststartlistembedded.sis
+del teststartlistembedded_winscw.sis
+call makesis teststartlistembedded_main.pkg
+call makesis teststartlistembedded_main_winscw.pkg
+call signsis teststartlistembedded_main.sis teststartlistembedded_main.sisx %CERTPATH%\rd.cer %CERTPATH%\rd-key.pem
+call signsis teststartlistembedded_main_winscw.sis teststartlistembedded_main_winscw.sisx %CERTPATH%\rd.cer %CERTPATH%\rd-key.pem
+if not exist ..\..\data mkdir ..\..\data
+if not exist ..\..\data\mmc mkdir ..\..\data\mmc
+if exist ..\..\data\mmc\teststartlistembedded.sisx del /F/Q ..\..\data\mmc\teststartlistembedded.sisx
+move teststartlistembedded_main.sisx ..\..\data\mmc\teststartlistembedded.sisx
+if exist ..\..\data\mmc\teststartlistembedded_winscw.sisx del /F/Q ..\..\data\mmc\teststartlistembedded_winscw.sisx
+move teststartlistembedded_main_winscw.sisx ..\..\data\mmc\teststartlistembedded_winscw.sisx
+del teststartlistembedded_main.sis
+del teststartlistembedded_main_winscw.sis
+call sbs reallyclean
+dir ..\..\data\mmc
+
+:end
+set CERTPATH=
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/teststartlistembedded.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2010 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:  Test exe for startup list updater test module.
+*
+*/
+
+
+#include "teststartlistembedded.h"
+
+
+GLDEF_C TInt E32Main()
+    {
+    return KErrNone;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/teststartlistembedded.h	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2010 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:  Test exe for startup list updater test module.
+*
+*/
+
+
+#ifndef TESTSTARTLISTEMBEDDED_H
+#define TESTSTARTLISTEMBEDDED_H
+
+#include <e32base.h>
+
+GLDEF_C TInt E32Main();
+
+#endif  // TESTSTARTLISTEMBEDDED_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/teststartlistembedded.mmp	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2010 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:  Test exe for startup list updater test module.
+*
+*/
+
+#include <platform_paths.hrh>
+
+TARGET          teststartlistembedded.exe
+TARGETTYPE      exe
+UID             0 0xEC35FEAB    // random UID
+
+START RESOURCE  teststartlistembedded.rss
+TARGET          ec35feab.rsc
+TARGETPATH      /private/101f875a/import
+END
+
+USERINCLUDE     .
+APP_LAYER_SYSTEMINCLUDE
+
+SOURCEPATH      .
+SOURCE          teststartlistembedded.cpp
+
+LIBRARY         euser.lib
+
+SMPSAFE
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/teststartlistembedded.pkg	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,35 @@
+;
+; Copyright (c) 2010 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:  Test exe for startup list updater test module.
+;
+
+
+#{"TestStartListEmbedded"},(0xEC35FEAB),1,0,0
+
+; S60 platform dependencies
+[0x101F7961],0,0,0,{"Series60ProductID"}
+[0x1028315F],0,0,0,{"Series60ProductID"}
+[0x10283160],0,0,0,{"Series60ProductID"}
+[0x20022E6D],0,0,0,{"Series60ProductID"}
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; Files
+"\epoc32\release\armv5\urel\teststartlistembedded.exe" - "c:\sys\bin\teststartlistembedded.exe"
+"\epoc32\data\z\private\101f875a\import\ec35feab.rsc" - "c:\private\101f875a\import\[0xec35feab].rsc"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/teststartlistembedded.rss	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2010 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:  Test exe for startup list updater test module.
+*
+*/
+
+#include <startupitem.rh>
+
+RESOURCE STARTUP_ITEM_INFO teststartlistembedded
+    {
+    executable_name = "c:\\sys\\bin\\teststartlistembedded.exe";
+    recovery = EStartupItemExPolicyNone;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/teststartlistembedded_main.pkg	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,37 @@
+;
+; Copyright (c) 2010 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:  Test exe for startup list updater test module.
+;
+
+
+#{"TestStartListEmbedded"},(0xED2159D3),1,0,0
+
+; S60 platform dependencies
+[0x101F7961],0,0,0,{"Series60ProductID"}
+[0x1028315F],0,0,0,{"Series60ProductID"}
+[0x10283160],0,0,0,{"Series60ProductID"}
+[0x20022E6D],0,0,0,{"Series60ProductID"}
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; Files
+"datafile.txt" - "c:\data\datafile.txt"
+
+; Embeddded package containing startable exe
+@{"teststartlistembedded.sisx"}, (0xEC35FEAB)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/teststartlistembedded_main_winscw.pkg	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,37 @@
+;
+; Copyright (c) 2010 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:  Test exe for startup list updater test module.
+;
+
+
+#{"TestStartListEmbedded"},(0xED2159D3),1,0,0
+
+; S60 platform dependencies
+[0x101F7961],0,0,0,{"Series60ProductID"}
+[0x1028315F],0,0,0,{"Series60ProductID"}
+[0x10283160],0,0,0,{"Series60ProductID"}
+[0x20022E6D],0,0,0,{"Series60ProductID"}
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; Files
+"datafile.txt" - "c:\data\datafile.txt"
+
+; Embeddded package containing startable exe
+@{"teststartlistembedded_winscw.sisx"}, (0xEC35FEAB)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/data_src/teststartlistembedded/teststartlistembedded_winscw.pkg	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,36 @@
+;
+; Copyright (c) 2010 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:  Test exe for startup list updater test module.
+;
+
+
+#{"TestStartListEmbedded"},(0xEC35FEAB),1,0,0
+
+; S60 platform dependencies
+[0x101F7961],0,0,0,{"Series60ProductID"}
+[0x1028315F],0,0,0,{"Series60ProductID"}
+[0x10283160],0,0,0,{"Series60ProductID"}
+[0x20022E6D],0,0,0,{"Series60ProductID"}
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; Files
+"\epoc32\release\winscw\udeb\teststartlistembedded.exe" - "c:\sys\bin\teststartlistembedded.exe"
+; "\epoc32\data\z\private\101f875a\import\ec35feab.rsc" - "c:\private\101f875a\import\[0xec35feab].rsc"
+"\epoc32\data\z\private\101f875a\import\ec35feab.rsc" - "c:\private\E5F88F39\import\[0xec35feab].rsc"
+
--- a/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/group/bld.inf	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/group/bld.inf	Thu Jul 22 16:35:01 2010 +0100
@@ -24,6 +24,8 @@
 ../conf/mt_startuplistupdater.cfg   /epoc32/winscw/c/testframework/mt_startuplistupdater.cfg
 ../conf/mt_startuplistupdater.cfg   /epoc32/data/z/testframework/mt_startuplistupdater.cfg
 ../rom/mt_startuplistupdater.iby    CORE_MW_LAYER_IBY_EXPORT_PATH( mt_startuplistupdater.iby )
+../data/mmc/teststartlist_winscw.sisx   /epoc32/winscw/c/data/installs/teststartlist.sisx
+../data/mmc/teststartlistembedded_winscw.sisx /epoc32/winscw/c/data/installs/teststartlistembedded.sisx
 
 PRJ_TESTMMPFILES
 mt_startuplistupdater.mmp
--- a/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/group/mt_startuplistupdater_nrm.mmp	Tue Jun 15 13:36:10 2010 +0100
+++ b/appinstaller/AppinstUi/startuplistupdater/tsrc/mt_startuplistupdater/group/mt_startuplistupdater_nrm.mmp	Thu Jul 22 16:35:01 2010 +0100
@@ -17,3 +17,5 @@
 
 #include "mt_startuplistupdater.mmp"
 
+SMPSAFE
+
--- a/iaupdate/IAD/api/client/src/iaupdateclient.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/api/client/src/iaupdateclient.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -75,72 +75,73 @@
     else if (!mServiceRequest)
     {
         mServiceRequest = new XQServiceRequest("com.nokia.services.swupdate.swupdate_interface", message, false);
-        connect(mServiceRequest, SIGNAL(requestCompleted(QVariant)), this, SLOT(requestCompleted(QVariant)));
-        connect(mServiceRequest, SIGNAL(requestError(int)), this, SLOT(requestError(int)));
+        if (mServiceRequest)
+        {    
+            connect(mServiceRequest, SIGNAL(requestCompleted(QVariant)), this, SLOT(requestCompleted(QVariant)));
+            connect(mServiceRequest, SIGNAL(requestError(int)), this, SLOT(requestError(int)));
+        }
+        else
+        {
+            error = KErrNoMemory;
+        }
     }
     else
     {
         mServiceRequest->setMessage(message);
     }
-    XQRequestInfo requestInfo;
-    requestInfo.setBackground(toBackground);
-    mServiceRequest->setInfo(requestInfo);
+    
     
     if (error == KErrNone)
     {    
-        if (!mServiceRequest)
+        XQRequestInfo requestInfo;
+        requestInfo.setBackground(toBackground);
+        mServiceRequest->setInfo(requestInfo); 
+        int wgId = 0;
+        CEikonEnv* eikEnv = CEikonEnv::Static();
+        if ( eikEnv )
         {
-            error = KErrNoMemory;    
+            RWindowGroup owngroup;
+            wgId = eikEnv->RootWin().Identifier();
         }
-        else
+        IAUPDATE_TRACE_1("IAUpdateClient::initRequest() wgId: %d", wgId);
+        QString stringWgid;
+        stringWgid.setNum(wgId);
+        *mServiceRequest << stringWgid;  
+        if (updateParameters)
         {    
-            int wgId = 0;
-            CEikonEnv* eikEnv = CEikonEnv::Static();
-            if ( eikEnv )
-            {
-                RWindowGroup owngroup;
-                wgId = eikEnv->RootWin().Identifier();
-            }
-            IAUPDATE_TRACE_1("IAUpdateClient::initRequest() wgId: %d", wgId);
-            QString stringWgid;
-            stringWgid.setNum(wgId);
-            *mServiceRequest << stringWgid;  
-            if (updateParameters)
-            {    
-                IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() UID: %d", updateParameters->Uid().iUid);
-                QString stringUid; 
-                stringUid.setNum(updateParameters->Uid().iUid);
-                *mServiceRequest << stringUid;
+            IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() UID: %d", updateParameters->Uid().iUid);
+            QString stringUid; 
+            stringUid.setNum(updateParameters->Uid().iUid);
+            *mServiceRequest << stringUid;
                 
-                IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() searchcriteria: %S", &updateParameters->SearchCriteria());
-                *mServiceRequest << qStringFromTDesC(updateParameters->SearchCriteria());
+            IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() searchcriteria: %S", &updateParameters->SearchCriteria());
+            *mServiceRequest << qStringFromTDesC(updateParameters->SearchCriteria());
                 
-                IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() executable: %S", &updateParameters->CommandLineExecutable());
-                *mServiceRequest << qStringFromTDesC(updateParameters->CommandLineExecutable());
+            IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() executable: %S", &updateParameters->CommandLineExecutable());
+            *mServiceRequest << qStringFromTDesC(updateParameters->CommandLineExecutable());
                 
-                IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() arguments: %S8", &updateParameters->CommandLineArguments());
-                *mServiceRequest << qStringFromTDesC8(updateParameters->CommandLineArguments());
+            IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() arguments: %S8", &updateParameters->CommandLineArguments());
+            *mServiceRequest << qStringFromTDesC8(updateParameters->CommandLineArguments());
                 
-                IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() show progress: %d", updateParameters->ShowProgress());
-                QString stringShowProgress;
-                stringShowProgress.setNum(updateParameters->ShowProgress());
-                *mServiceRequest << stringShowProgress;
+            IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() show progress: %d", updateParameters->ShowProgress());
+            QString stringShowProgress;
+            stringShowProgress.setNum(updateParameters->ShowProgress());
+            *mServiceRequest << stringShowProgress;
                 
-                IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() importance: %d", updateParameters->Importance());
-                QString stringImportance;
-                stringImportance.setNum(updateParameters->Importance());
-                *mServiceRequest << stringImportance;
+            IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() importance: %d", updateParameters->Importance());
+            QString stringImportance;
+            stringImportance.setNum(updateParameters->Importance());
+            *mServiceRequest << stringImportance;
                 
-                IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() type: %d", updateParameters->Type());
-                QString stringType;
-                stringType.setNum(updateParameters->Type());
-                *mServiceRequest << stringType;
+            IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() type: %d", updateParameters->Type());
+            QString stringType;
+            stringType.setNum(updateParameters->Type());
+            *mServiceRequest << stringType;
                 
-                IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() refresh: %d", updateParameters->Refresh());
-                QString stringRefresh;
-                stringRefresh.setNum(updateParameters->Refresh());
-                *mServiceRequest << stringRefresh;
-            }
+            IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateClient::initRequest() refresh: %d", updateParameters->Refresh());
+            QString stringRefresh;
+            stringRefresh.setNum(updateParameters->Refresh());
+            *mServiceRequest << stringRefresh;
         }
     }                 
      
--- a/iaupdate/IAD/api/iaupdateapi.pro	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/api/iaupdateapi.pro	Thu Jul 22 16:35:01 2010 +0100
@@ -23,6 +23,14 @@
     TARGET.CAPABILITY = CAP_GENERAL_DLL
     TARGET.EPOCALLOWDLLDATA=1
     MMP_RULES += "OPTION ARMCC --export_all_vtbl"
+
+    defBlock = \      
+    "$${LITERAL_HASH}if defined(EABI)" \
+    "DEFFILE  ../eabi/iaupdateapi.def" \
+    "$${LITERAL_HASH}else" \
+    "DEFFILE  ../bwins/iaupdateapi.def" \
+    "$${LITERAL_HASH}endif"
+     MMP_RULES += defBlock
 } 
 
 DEPENDPATH += .
--- a/iaupdate/IAD/backgroundchecker/group/bld.inf	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/backgroundchecker/group/bld.inf	Thu Jul 22 16:35:01 2010 +0100
@@ -22,13 +22,8 @@
 PRJ_PLATFORMS
 DEFAULT
 
-
 PRJ_EXPORTS
 
-/epoc32/s60/icons/qgn_note_swupdate_notification.svg   /epoc32/release/winscw/udeb/z/private/200211f4/qgn_note_swupdate_notification.svg
-/epoc32/s60/icons/qgn_note_swupdate_notification.svg   /epoc32/release/winscw/urel/z/private/200211f4/qgn_note_swupdate_notification.svg
-/epoc32/s60/icons/qgn_note_swupdate_notification.svg   /epoc32/data/z/private/200211f4/qgn_note_swupdate_notification.svg
-
 PRJ_MMPFILES
 ./iaupdatebg.mmp
 
--- a/iaupdate/IAD/backgroundchecker/group/iaupdatebg.mmp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/backgroundchecker/group/iaupdatebg.mmp	Thu Jul 22 16:35:01 2010 +0100
@@ -41,14 +41,13 @@
 SOURCEPATH          ../src
 SOURCE              iaupdatebgmain.cpp
 SOURCE              iaupdatebgrefreshtimer.cpp
-SOURCE              iaupdatebgremindertimer.cpp
+//SOURCE              iaupdatebgremindertimer.cpp
 SOURCE              iaupdatebgcontrollerfile.cpp
 SOURCE              iaupdatebgfirsttimehandler.cpp
 SOURCE              iaupdatebginternalfilehandler.cpp
 SOURCE              iaupdatebgsoftnotification.cpp
 
 
-
 LIBRARY             euser.lib 
 LIBRARY             centralrepository.lib 
 LIBRARY             iaupdateapi.lib 
@@ -66,9 +65,8 @@
 LIBRARY             sysversioninfo.lib
 LIBRARY             FeatMgr.lib
 
-// HLa
-LIBRARY     hbcore.lib
-LIBRARY     hbwidgets.lib
+LIBRARY             hbcore.lib
+LIBRARY             hbwidgets.lib
 
 DEBUGLIBRARY 	    flogger.lib
 
--- a/iaupdate/IAD/backgroundchecker/inc/iaupdatebgfirsttimehandler.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/backgroundchecker/inc/iaupdatebgfirsttimehandler.h	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 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"
@@ -61,12 +61,7 @@
     * Set Nokia agreement as accepted by an user
     */
     void SetAgreementAcceptedL();
-    
-    /**
-    * Set Nokia agreement as asked (prompted) to an user
-    */
-    void SetAgreementAskedL();
-        
+          
     /**
     * Set automatic update checks as asked (prompted) to an user
     */
@@ -79,13 +74,7 @@
     */
     TBool AgreementAcceptedL();
     
-    /**
-    * Is Nokia agreement of Application Update already asked 
-    *
-    * @return True value if agreement already asked 
-    */
-    TBool AgreementAskedL();
-    
+       
     /**
     * Is activation for automatic update cheks from network already asked 
     *
@@ -121,8 +110,6 @@
     
     TBool iAgreementAccepted;
     
-    TBool iAgreementAsked;
-    
     TBool iAutomaticUpdateChecksAsked;   
    
     };
--- a/iaupdate/IAD/backgroundchecker/inc/iaupdatebginternalfilehandler.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/backgroundchecker/inc/iaupdatebginternalfilehandler.h	Thu Jul 22 16:35:01 2010 +0100
@@ -52,22 +52,10 @@
 
     void SetLastTimeShowNewFeatureDialog( TInt64 aTime );
 
-    //void SetCurrentRefreshTime();
-
     TBool UserRejectNewFeatureDialog() const;
     
     void SetUserRejectNewFeatureDialog( TBool aUserDecision );
     
-    TBool ReminderOn();
-    
-    void SetReminder( TBool aOn );
-    
-    TTime NextRemindTime();
-    
-    void SetNextRemindTime( TTime aNextRemindTime );
-    
-    void SetNextRemindTime( TInt64 aNextRemindTime );
-    
     void SetMode( TIAUpdateBGMode aMode );
     
     TIAUpdateBGMode Mode();
@@ -113,14 +101,9 @@
 
     // Time when the content was refreshed.
     TTime iLastTimeShowNewFeatureDialog;
-
     
     TBool iUserRejectNewFeatureDialog;
     
-    TTime iNextRemindTime;
-    
-    TBool iIsReminderOn;
-    
     TIAUpdateBGMode iMode;
     
     HBufC* iFwVersion;
--- a/iaupdate/IAD/backgroundchecker/inc/iaupdatebgrefreshtimer.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/backgroundchecker/inc/iaupdatebgrefreshtimer.h	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 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"
@@ -26,7 +26,8 @@
 #include <iaupdateobserver.h>
 #include <barsc.h>
 
-#include "iaupdatebgremindertimer.h"
+
+#include "iaupdatebginternalfilehandler.h"
 #include "iaupdatebgcontrollerfile.h"
 #include "iaupdatebgsoftnotification.h"
 #include "iaupdatebgcheckermode.h"
@@ -34,7 +35,6 @@
 // FORWARD DECLARATIONS
 class CIAUpdate;
 class CIAUpdateParameters;
-// class CAknSoftNotifier;
 class CInternalFileHandler;
 class CIdleObserver;
 
@@ -49,8 +49,7 @@
 class CIAUpdateBGTimer : public CTimer, 
                  public MIAUpdateObserver, 
                  public MCenRepNotifyHandlerCallback, 
-                 public MIAUpdateBGSoftNotificationCallBack, 
-                 public MIAUpdateBGReminderTimerCallBack
+                 public MIAUpdateBGSoftNotificationCallBack 
             
     {
     public:
@@ -121,9 +120,7 @@
         TTimeIntervalMinutes TimeIntervalFromNextShowOfNewFeatureDialogL();
         
         TBool IsAgreementAcceptedL();
-        
-        TBool IsAskedAlreadyL();
-        
+       
         void HandlerFirstTimeL();
         
         TTime GetLastTimeShowNewFeatureDialogL();
@@ -134,14 +131,6 @@
  
         TInt SetUserDecisionL( TBool aDecision );
         
-        TBool ReminderOnL();
-
-        TInt SetReminderL( TBool aOn );
-        
-        TTime NextRemindTimeL();
-
-        TInt SetNextRemindTimeL( TTime aTime );
-        
         TIAUpdateBGMode ModeL();
 
         TInt SetModeL( TIAUpdateBGMode aMode );
@@ -150,12 +139,8 @@
 
         TInt SetRetryTimesL( TInt aRetry );
           
-        // HBufC* ReadResourceLC( TInt aResourceId );
-        
         void StartIaupdateL() const;
         
-        // void LaunchSoftNotificationL( const TInt& aResourceId, const TInt& SK1, const TInt& SK2 );
-        
         void LaunchNotificationL( const int aNrOfUpdates );
         
         TBool IsAutoUpdateDisabledL();
@@ -170,18 +155,8 @@
         
         void DoSoftNotificationCallBackL( TBool aIsAccepted );
         
-        void DoReminderTimerCallBackL();
-        
         void StartUpdatesCheckingL();    
         
-        // HBufC8* LoadFileLC(const TDesC& aFile);
-        
-        TInt GetPrivatePathL( TFileName& aPath );
-        
-        TInt SetSessionPrivatePathL( RFs& aFs, const TDesC& aPath ) const;
-        
-        void SetPrivateDriveL( RFs& aFs, const TDesC& aFileName ) const;
-        
         TBool IAUpdateEnabledL() const;
         
         void Shutdown();
@@ -190,7 +165,6 @@
         // Data       
         CIAUpdate* iUpdate; 
         CIAUpdateParameters* iParameters; 
-        CIAUpdateBGReminderTimer* iReminderTimer;
         CRepository* iIAUpdateCRSession; 
         CCenRepNotifyHandler* iNotifyHandler; 
         TInt iRuns;
@@ -199,8 +173,6 @@
         CIAUpdateBGInternalFileHandler* iInternalFile;
         TIAUpdateBGMode iMode;
         CIAUpdateBGSoftNotification* iSoftNotification;
-        // RResourceFile iResourceFile;
-        RFs iFs;
     };        
 
 #endif //IAUPDATEBGREFRESHTIMER_H
--- a/iaupdate/IAD/backgroundchecker/inc/iaupdatebgsoftnotification.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/backgroundchecker/inc/iaupdatebgsoftnotification.h	Thu Jul 22 16:35:01 2010 +0100
@@ -61,22 +61,16 @@
         
          /**
           * Shows notification and  indicator. 
-          *
-          * @param aNrOfUpdates number of updates
           */
          void ShowNotificationL();
          
          /**
           * Shows indicator. 
-          *
-          * @param aMode indicator mode (EFirstTimeMode / ENormalMode)
           */
          void ShowIndicatorL();
          
          /**
           * Removes indicator. 
-          *
-          * @param aNrOfUpdates number of updates
           */
          void RemoveIndicatorL();
 
@@ -87,13 +81,6 @@
          * @param aText  text for soft notification
          */
         void SetTextL( const TDesC& aTitle, const TDesC& aText ); 
-
-        /**
-        * Set an image path for a soft notification.
-        *
-        * @param aImage image path for soft notification
-        */
-        void SetImagePathL( const TDesC& aImage );
         
         /**
         * Set number of updates a soft notification.
@@ -152,39 +139,28 @@
         /**
          * Get indicator enablation state
          *
-         * @return aEnabled ETrue-enabled, EFalse-disabled
+         * @return ETrue-enabled, EFalse-disabled
          */ 
         TBool IsIndicatorEnabled();
         
-        /**
-         * Set number of updates
-         *
-         * @param aNrOfUpdates number of updates 
-         */ 
-        // void SetNrOfUpdates( const int aNrOfUpdates );
-        
-        /**
-         * Get number of updates
-         *
-         * @return  number of updates 
-         */ 
         int GetNrOfUpdates();
         
     private:  // Data
         // Note title
         HBufC* iTitle; 
+        
         // Note text
         HBufC* iText; 
-        /// Image data byte array
-        HBufC8* iImageData;
+        
         // Notification callback
         MIAUpdateBGSoftNotificationCallBack* iCallback;
-        // Image path
-        HBufC* iImagePath;
+        
         // Number of updates
         int iNrOfUpdates;
+        
         // Indictor activation state
         TBool iActivateIndicator;
+        
         //Notification dialog
         CHbDeviceNotificationDialogSymbian* iNotificationDialog;
 
--- a/iaupdate/IAD/backgroundchecker/src/iaupdatebgfirsttimehandler.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/backgroundchecker/src/iaupdatebgfirsttimehandler.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 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"
@@ -98,19 +98,7 @@
     iAgreementAccepted = ETrue;
     WriteDataL();
     }
-    
-// ---------------------------------------------------------------------------
-// CIAUpdateBGFirstTimeHandler::SetAgreementAskedL
-// Set Nokia agreement as asked (prompted) to an user
-// ---------------------------------------------------------------------------
-//
-void CIAUpdateBGFirstTimeHandler::SetAgreementAskedL()
-    {
-    ReadDataL();
-    iAgreementAsked = ETrue;
-    WriteDataL();
-    }
-        
+       
 // ---------------------------------------------------------------------------
 // CIAUpdateBGFirstTimeHandler::SetAutomaticUpdatesAskedL
 // Set automatic update checks as prompted to an use
@@ -136,17 +124,6 @@
 
 
 // ---------------------------------------------------------------------------
-// CIAUpdateBGFirstTimeHandler::AgreementAskedL
-// Is Nokia agreement of Application Update already asked 
-// ---------------------------------------------------------------------------
-//
-TBool CIAUpdateBGFirstTimeHandler::AgreementAskedL()
-    {
-    ReadDataL();
-    return iAgreementAsked;
-    }
-
-// ---------------------------------------------------------------------------
 // CIAUpdateBGFirstTimeHandler::AutomaticUpdateChecksAskedL
 // Is activation for automatic update cheks from network already asked 
 // ---------------------------------------------------------------------------
@@ -170,7 +147,6 @@
     if ( err == KErrNotFound )
     	{
     	iAgreementAccepted = EFalse;
-	    iAgreementAsked = EFalse;
 	    iAutomaticUpdateChecksAsked = EFalse; 
     	}
     else
@@ -216,7 +192,6 @@
 void CIAUpdateBGFirstTimeHandler::InternalizeL( RReadStream& aStream )
 	{
 	iAgreementAccepted = aStream.ReadInt32L();
-	iAgreementAsked = aStream.ReadInt32L();
 	iAutomaticUpdateChecksAsked = aStream.ReadInt32L();
 	}
 
@@ -229,7 +204,6 @@
 void CIAUpdateBGFirstTimeHandler::ExternalizeL( RWriteStream& aStream )
 	{
 	aStream.WriteInt32L( iAgreementAccepted );
-	aStream.WriteInt32L( iAgreementAsked );	
 	aStream.WriteInt32L( iAutomaticUpdateChecksAsked );
 	}
     
--- a/iaupdate/IAD/backgroundchecker/src/iaupdatebginternalfilehandler.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/backgroundchecker/src/iaupdatebginternalfilehandler.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -15,9 +15,6 @@
 *
 */
 
-
-
-
 #include <bautils.h>
 #include <s32file.h>
 #include <sysversioninfo.h>
@@ -67,7 +64,7 @@
 //
 CIAUpdateBGInternalFileHandler::CIAUpdateBGInternalFileHandler()
     : iLastTimeShowNewFeatureDialog( 0 ), iUserRejectNewFeatureDialog( EFalse ), 
-      iNextRemindTime(0), iIsReminderOn( EFalse ), iMode( EFirstTimeMode ), iFwVersion( NULL ), 
+      iMode( EFirstTimeMode ), iFwVersion( NULL ), 
       iSNID(0), iRetryTimes(0)
     {
     }
@@ -215,62 +212,6 @@
     iUserRejectNewFeatureDialog = aUserDecision;
     }
 
-
-// -----------------------------------------------------------------------------
-// CIAUpdateBGInternalFileHandler::ReminderOn
-//
-// -----------------------------------------------------------------------------
-//
-TBool CIAUpdateBGInternalFileHandler::ReminderOn()
-    {
-    return iIsReminderOn;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateBGInternalFileHandler::SetReminder
-//
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateBGInternalFileHandler::SetReminder( TBool aOn )
-    {
-    iIsReminderOn = aOn;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateBGInternalFileHandler::NextRemindTime
-//
-// -----------------------------------------------------------------------------
-//
-TTime CIAUpdateBGInternalFileHandler::NextRemindTime()
-    {
-    return iNextRemindTime;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateBGInternalFileHandler::SetNextRemindTime
-//
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateBGInternalFileHandler::SetNextRemindTime( TTime aNextRemindTime )
-    {
-    iNextRemindTime = aNextRemindTime;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateBGInternalFileHandler::SetNextRemindTime
-//
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateBGInternalFileHandler::SetNextRemindTime( TInt64 aNextRemindTime )
-    {
-    iNextRemindTime = aNextRemindTime;
-    }
-
-
 // -----------------------------------------------------------------------------
 // CIAUpdateBGInternalFileHandler::SetMode
 //
@@ -382,6 +323,7 @@
     // Static casting is safe to do here because enum and TInt are the same.
     SetUserRejectNewFeatureDialog( static_cast< TBool >( userDecision ) );
     
+    /*
     TInt64 nextRemindTime( 0 );
     aStream >> nextRemindTime;
     SetNextRemindTime( nextRemindTime );
@@ -389,6 +331,7 @@
     TInt remindOn( aStream.ReadUint8L() );
     // Static casting is safe to do here because enum and TInt are the same.
     SetReminder( static_cast< TBool >( remindOn ) );
+    */
     
     TInt mode( aStream.ReadUint8L() );
     SetMode( static_cast<TIAUpdateBGMode> (mode) );
@@ -424,11 +367,13 @@
     TInt userDecision ( UserRejectNewFeatureDialog() );
     aStream.WriteUint8L( userDecision );
     
+    /*
     TInt64 nextRemindTime( NextRemindTime().Int64() ); 
     aStream << nextRemindTime;
     
     TInt remindOn ( ReminderOn() );
     aStream.WriteUint8L( remindOn );
+    */
     
     TInt mode( Mode() );
     aStream.WriteUint8L( mode );
--- a/iaupdate/IAD/backgroundchecker/src/iaupdatebgrefreshtimer.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/backgroundchecker/src/iaupdatebgrefreshtimer.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -25,10 +25,6 @@
 #include <apgwgnam.h>
 #include <apgcli.h>
 #include <apacmdln.h>
-// #include <avkon.hrh>
-//#include <StringLoader.h> 
-//#include <iaupdate.rsg>
-//#include <data_caging_path_literals.hrh>
 #include <bautils.h>
 #include <apgtask.h>
 #include <sysversioninfo.h>  //sysversioninfo
@@ -46,13 +42,9 @@
 
 //MACROS
 _LIT8( KRefreshFromNetworkDenied, "1" );
-// _LIT(KIAUpdateResourceFile, "iaupdate.rsc");
 _LIT(KIAUpdateLauncherExe, "iaupdatelauncher.exe" );
-_LIT(KImageFile, "qgn_note_swupdate_notification.svg");
 _LIT8( KFirstTimeCase, "0" );
 
-
-
 //CONSTANTS
 const TUint KIADUpdateLauncherUid( 0x2001FE2F );
 
@@ -77,7 +69,6 @@
     CTimer::ConstructL();
     CActiveScheduler::Add( this );
   
-    iReminderTimer = CIAUpdateBGReminderTimer::NewL( this );
     iUpdate = NULL;
     iParameters = NULL;
     
@@ -88,28 +79,18 @@
     
     iInternalFile = CIAUpdateBGInternalFileHandler::NewL();
     
-    iSoftNotification = CIAUpdateBGSoftNotification::NewL( this ); //, iInternalFile );
-    // HLa: iSoftNotification->StartObservingIfNeededL();
-    
-    // Get resource file path
-    /* HLa
-    TFileName fileName;
-    fileName.Copy(TParsePtrC(RProcess().FileName()).Drive());
-    fileName.Append(KDC_APP_RESOURCE_DIR);
-    fileName.Append(KIAUpdateResourceFile);
-    */
+    iSoftNotification = CIAUpdateBGSoftNotification::NewL( this ); 
     
-    User::LeaveIfError(iFs.Connect());
-
-    // Get language of resource file        
-    //BaflUtils::NearestLanguageFile( iFs, fileName );
-
-    // Open resource file
-    //iResourceFile.OpenL( iFs, fileName );
-    //iResourceFile.ConfirmSignatureL();    
+    // loc: initialize localisation text loader
+    /*
+    TBool res = HbTextResolverSymbian::Init(KLocFile, KLocFilePath);
+    if ( res != KErrNone )
+        {
+        // nothing to do
+        }
+    */
     }
     
-    
 // ----------------------------------------------------------
 // CIAUpdateBGTimer::~CIAUpdateBGTimer()
 // ----------------------------------------------------------
@@ -118,7 +99,6 @@
     Cancel();
     delete iUpdate; 
     delete iParameters;
-    delete iReminderTimer;
 
     if ( iNotifyHandler ) 
         {
@@ -131,11 +111,8 @@
     delete iInternalFile;
     delete iSoftNotification;
     
-    // iResourceFile.Close();
-    iFs.Close();
     }
 
-
 // ----------------------------------------------------------
 // CIAUpdateBGTimer::StartProcessL()
 // ----------------------------------------------------------
@@ -145,27 +122,20 @@
         
     iMode = ModeL();
     
-    //HLa
-    TBool test1 = IsAgreementAcceptedL();
-    TBool test2 = ReminderOnL();
-    
-    int test = 0;
     switch ( iMode )
         {
         case EFirstTimeMode:
-         
-        // while not released keep in sleep mode
-        //int test = 1;
-        if ( test == 0 )
             {
-            ListenAutoUpdateSettingsL();
-            iMode = ESleepMode;
-            SetModeL( iMode );
-            return;
-            }
+            // while not released keep in sleep mode
+            int test = 0;
+            if ( test == 0 )
+                {
+                ListenAutoUpdateSettingsL();
+                iMode = ESleepMode;
+                SetModeL( iMode );
+                return;
+                }
         
-        //case EFirstTimeRemindMode:    
-            {
             if ( IsFirstTimeDialogDisabledL() )
                 {
                 //this should only happen in testing
@@ -193,9 +163,6 @@
                         
             FLOG("[bgchecker] StartProcessL EFirstTimeMode");
             
-            
-
-
             //Wait for some days before activate the first time mode
             TTimeIntervalMinutes timetowait =
                     TimeIntervalFromNextShowOfNewFeatureDialogL();
@@ -239,17 +206,10 @@
                                                   
             break;
             }
-/*
+
         case EFirstTimeMode2:
             {
-            FLOG("[bgchecker] StartProcessL EFirstTimeMode2");
-            RunL();
-            break;
-            }
-*/
-        case EFirstTimeMode2:
-            {
-            FLOG("[bgchecker] StartProcessL EFirstTimeMode 3");
+            FLOG("[bgchecker] StartProcessL EFirstTimeMode 2");
             //if user accepted the disclaimer already and reboot the phone, 
             //this mode could go to network immediately after boot
             //We put one min delay here to wait for network ready.
@@ -294,6 +254,10 @@
         case ENormalMode:
         case ERetryMode:
             {
+            
+            // Check if indicator should be shown
+            
+            
             StartUpdatesCheckingL();
             break;
             }
@@ -321,19 +285,6 @@
 
 
 // ----------------------------------------------------------
-// CIAUpdateBGTimer::IsAskedAlreadyL()
-// ----------------------------------------------------------
-TBool CIAUpdateBGTimer::IsAskedAlreadyL()
-    {
-    CIAUpdateBGFirstTimeHandler* fthandler  = CIAUpdateBGFirstTimeHandler::NewL();
-    CleanupStack::PushL( fthandler );
-    TBool result = fthandler->AgreementAskedL();
-    CleanupStack::PopAndDestroy( fthandler );
-    return result;
-    }
-
-
-// ----------------------------------------------------------
 // CIAUpdateBGTimer::StartUpdatesCheckingL()
 // ----------------------------------------------------------
 void CIAUpdateBGTimer::StartUpdatesCheckingL()  
@@ -369,38 +320,7 @@
             FLOG_NUM( "Start checking update after %d minutes", timetowait.Int());
             StartL( timetowait );
             
-            //start reminder timer also if user choose later before reboot
-            //check the value from private folder
-             
-            
-              if ( ReminderOnL() )
-                  {
-                  TTime currenttime;
-                  currenttime.UniversalTime();
-                  
-                  FTIME( currenttime );
-                  
-                  TTime nextremindtime = NextRemindTimeL();
-                  
-                  FTIME( nextremindtime );
-                  
-                  TTimeIntervalMinutes timetogo;
-                  nextremindtime.MinutesFrom( currenttime, timetogo );
-                  
-                  FLOG_NUM("time to go = %d", timetogo.Int() );
-                  
-                  if ( timetogo.Int() <= 0 )
-                      {
-                      //pop up the reminder directly
-                      ReminderTimerCallBack();
-                      }
-                  else
-                      {
-                      iReminderTimer->StartReminderTimerL( timetogo );
-                      }
-                  }
-                  
-            }
+         }
     }
 
 
@@ -527,48 +447,6 @@
 
 
 // ----------------------------------------------------------
-// CIAUpdateBGTimer::NextRemindTimeL()
-// ----------------------------------------------------------
-TTime CIAUpdateBGTimer::NextRemindTimeL()
-    {
-    iInternalFile->ReadControllerDataL();
-    return iInternalFile->NextRemindTime();
-    }
-
-
-// ----------------------------------------------------------
-// CIAUpdateBGTimer::SetNextRemindTimeL()
-// ----------------------------------------------------------
-TInt CIAUpdateBGTimer::SetNextRemindTimeL( TTime aTime )
-    {
-    iInternalFile->SetNextRemindTime( aTime );
-    TRAPD( err,iInternalFile->WriteControllerDataL() );
-    return err;
-    }
-
-
-// ----------------------------------------------------------
-// CIAUpdateBGTimer::ReminderOnL()
-// ----------------------------------------------------------
-TBool CIAUpdateBGTimer::ReminderOnL()
-    {
-    iInternalFile->ReadControllerDataL(); 
-    return iInternalFile->ReminderOn();
-    }
-
-
-// ----------------------------------------------------------
-// CIAUpdateBGTimer::SetReminderL()
-// ----------------------------------------------------------
-TInt CIAUpdateBGTimer::SetReminderL( TBool aOn )
-    {
-    iInternalFile->SetReminder( aOn );
-    TRAPD( err,iInternalFile->WriteControllerDataL() );
-    return err;
-    }
-
-
-// ----------------------------------------------------------
 // CIAUpdateBGTimer::ModeL()
 // ----------------------------------------------------------
 TIAUpdateBGMode CIAUpdateBGTimer::ModeL()
@@ -625,17 +503,6 @@
 void CIAUpdateBGTimer::DoUpdatesCheckingL( const TBool& aUpdateFromServer )
     {   
     FLOG( "DoUpdatesCheckingL update");
-    //turn off the reminder, user will decide whether to turn if on or off
-    //The user's decision will be checked in soft notification callback function
-    
-    
-    if ( ReminderOnL())
-        {
-        FLOG( "Do CheckUpdates 3");
-        iReminderTimer->CancelReminderTimerL();
-        SetReminderL( EFalse );
-        }
-    
     
     if( !iUpdate )
         {
@@ -740,8 +607,6 @@
             FLOG( "CheckUpdatesComplete 4");
     
             LaunchNotificationL( aAvailableUpdates );
-            //LaunchSoftNotificationL(R_IAUPDATE_UPDATE_AVAILABLE,
-            //            R_TEXT_SOFTKEY_SHOW, R_TEXT_SOFTKEY_LATER );
             }
 
             FLOG( "CheckUpdatesComplete 5");
@@ -788,19 +653,6 @@
                 StartL( interval );
                 SetLastRefreshTime();
                 }
-            else
-                {
-                //don't show soft notification and restart the timer.
-                TTimeIntervalMinutes oneweek( UpdateAvailableReminderIntervalInMinutesL() );   
-                TTime currenttime;
-                currenttime.UniversalTime();
-                TTime nextRemindTime = currenttime + oneweek;
-
-                SetReminderL( ETrue );
-                SetNextRemindTimeL( nextRemindTime );
-                                       
-                iReminderTimer->StartReminderTimerL( oneweek );
-                }
             //clear the retry time
             SetRetryTimesL( 0 ); 
             }
@@ -945,7 +797,6 @@
             break;
             
         case EFirstTimeMode:
-        //case EFirstTimeRemindMode:
             {
             FLOG("[bgchecker] runl EFirstTimeMode");
             
@@ -970,18 +821,10 @@
                 }
             }
             break;
-        /*
+
         case EFirstTimeMode2:
             {
-            FLOG("[bgchecker] runl EFirstTimeMode2");
-            LaunchNotificationL( 1 );
-            //LaunchSoftNotificationL(R_IAUPDATE_REMIND_LATER, R_TEXT_SOFTKEY_YES, R_TEXT_SOFTKEY_NO );
-            }
-            break;
-        */
-        case EFirstTimeMode2:
-            {
-            FLOG("[bgchecker] runl EFirstTimeMode3");                 
+            FLOG("[bgchecker] runl EFirstTimeMode2");                 
             //disclaimer is not accepted  
            
             if ( !IsAgreementAcceptedL()  )
@@ -1012,146 +855,6 @@
        
     }
 
-/*
-// ----------------------------------------------------------
-// CIAUpdateBGTimer::RunL()
-// ----------------------------------------------------------
-void CIAUpdateBGTimer::RunL()
-    {
-    FLOG("[bgchecker]RunL() ");
-    if ( !IAUpdateEnabledL() )
-        {
-        Shutdown();
-        return;
-        }
-    User::LeaveIfError( iStatus.Int() );
-    //Check the mode again, in case the mode is changed while waiting.
-    iMode = ModeL();
-    
-    switch ( iMode )
-        {
-        case ENormalMode:
-        case ERetryMode:
-            {     
-            FLOG("[bgchecker]RunL() ENormalMode");                                    
-            //roaming case is checked in IAUpdate server side
-            if ( IsAutoUpdateDisabledL() )
-                {
-                ListenAutoUpdateSettingsL();
-                
-                iMode = ESleepMode;
-                SetModeL( iMode );
-                
-                //the program is waked up when automatic checking is changed by user.
-                //cenrep call back will be used.
-                return;
-                }                        
-            
-            FLOG("[bgchecker]RunL() ENormalMode 1");
-            
-            if(iRuns == 0)
-                {
-                FLOG("[bgchecker]RunL() ENormalMode 2");
-                // if user did the refresh from server while waiting, restart the timer.
-                // the last refresh time is read from the private file of IAUpdate server.
-                TTimeIntervalMinutes timetowait =
-                        TimeIntervalFromNextRefreshL();
-
-                if (timetowait.Int() <= 0 )
-                    {
-                    DoUpdatesCheckingL( ETrue );
-                    }
-                else
-                    {
-                    StartL( timetowait );
-                    }
-                FLOG("[bgchecker]RunL() ENormalMode 3");
-                }
-            else
-                {
-                FLOG("[bgchecker]RunL() ENormalMode 4");
-                TTimeIntervalMinutes timetowait = TimeIntervalFromNextRefreshL();
-                   
-                   if ( timetowait.Int() <= 0 )
-                       {
-                       StartL( StartNow );
-                       }
-                   else
-                       {
-                       StartL( timetowait );
-                       }
-                   FLOG("[bgchecker]RunL() ENormalMode 5");
-                 }        
-            }
-            break;
-            
-        case EFirstTimeMode:
-        case EFirstTimeRemindMode:
-            {
-            FLOG("[bgchecker] runl EFirstTimeMode");
-            
-            if ( iRuns == 0 )
-                {
-                FLOG("[bgchecker] runl run = 0");
-                HandlerFirstTimeL();
-                }
-            else
-                {
-                FLOG("[bgchecker] runl still wait");
-                TTimeIntervalMinutes timetowait = TimeIntervalFromNextShowOfNewFeatureDialogL();
-                                   
-                if ( timetowait.Int() <= 0 )
-                    {
-                    StartL( StartNow );
-                    }
-                 else
-                    {
-                    StartL( timetowait );
-                    } 
-                }
-            }
-            break;
-
-        case EFirstTimeMode2:
-            {
-            FLOG("[bgchecker] runl EFirstTimeMode2");
-            LaunchNotificationL( 1 );
-            //LaunchSoftNotificationL(R_IAUPDATE_REMIND_LATER, R_TEXT_SOFTKEY_YES, R_TEXT_SOFTKEY_NO );
-            }
-            break;
-
-        case EFirstTimeMode3:
-            {
-            FLOG("[bgchecker] runl EFirstTimeMode3");                 
-            //disclaimer is not accepted  
-           
-            if ( !IsAgreementAcceptedL()  )
-                {
-                FLOG("[bgchecker] runl EFirstTimeMode reject disclaimer");
-                //user accepte the new feature dialog but user reject sthe disclaimer
-                //in sleep mode now
-                iMode = ESleepMode;
-                SetModeL( iMode );
-                //subscribe to cenrep key for automatic checking for wake up from sleep mode
-                ListenAutoUpdateSettingsL(); 
-                }
-            else
-                {
-                FLOG("[bgchecker] runl EFirstTimeMode go to normal mode");
-                //Set to Normal mode
-                //check autochecksetting in Runl later
-                iMode = ENormalMode;
-                SetModeL( iMode );
-                StartL( StartNow );
-                }
-            }
-            break;
-            
-        default:
-            break;
-        };
-       
-    }*/
 
 // ----------------------------------------------------------
 // CIAUpdateBGTimer::HandlerFirstTimeL()
@@ -1178,8 +881,6 @@
         //this is first time mode
         FLOG("[bgchecker]HandlerFirstTimeL 3 ");
         LaunchNotificationL( 0 );
-        // LaunchSoftNotificationL( R_IAUPDATE_FEATURES_AVAILABLE,
-        //            R_TEXT_SOFTKEY_OK, R_TEXT_SOFTKEY_CANCEL );
         }
     }
 
@@ -1446,12 +1147,6 @@
         FLOG(" current mode is FirstTimeMode ");
         interval = FirstTimeDialogDelayInMinutesL();
         }
-    /*
-    else if ( ModeL() == EFirstTimeRemindMode )
-        {
-        FLOG(" current mode is FirstTimeRemindMode");
-        interval = FirstTimeDialogReminderIntervalInMinutesL();
-        }*/
     else
         {
         //nothing
@@ -1485,7 +1180,6 @@
       switch ( iMode )
           {
           case EFirstTimeMode:
-          // case EFirstTimeRemindMode:     
                  {
                  
                  FLOG("[bgchecker] SoftNotificationCallBack EFirstTimeMode");
@@ -1499,12 +1193,6 @@
                      //subscribe to cenrep key for automatic checking for wake up from sleep mode
                      ListenAutoUpdateSettingsL();
                      
-                     /*
-                     FLOG("[bgchecker] SoftNotificationCallBack EFirstTimeMode not accepted");
-                     iMode = EFirstTimeMode2;
-                     SetModeL( iMode );
-                     StartL( StartNow );
-                     */
                      }
                  else
                      {
@@ -1524,60 +1212,13 @@
                  break;
                  }
                  
-                 
-          /*       
-          case EFirstTimeMode2:  // reminder 
-              {
-              FLOG("[bgchecker] SoftNotificationCallBack EFirstTimeMode2 ");
-              if ( aIsAccepted ) // reminder accepted ?
-                  {
-                  FLOG("[bgchecker] SoftNotificationCallBack EFirstTimeMode2, accepted");
-                  //user wants to be reminder so remind in 4 weeks
-                  //set to first time remind mode
-                  iMode = EFirstTimeRemindMode;
-                  SetModeL( iMode );
-                  TTimeIntervalMinutes fourweeks( FirstTimeDialogReminderIntervalInMinutesL() );            
-                  TTime currenttime;
-                  currenttime.UniversalTime();
-                        
-                  //save the next show new feature dialog time
-                  //in case use switch off the device and restarted.      
-                  User::LeaveIfError( SetLastTimeShowNewFeatureDialogL( currenttime ) );
-                        
-                  StartL( fourweeks );
-                  return;
-                  }
-              else
-                  {
-                  FLOG("[bgchecker] SoftNotificationCallBack EFirstTimeMode2, not accepted");
-                  //in sleep mode now
-                  iMode = ESleepMode;
-                  SetModeL( iMode );
-                  
-                  //subscribe to cenrep key for automatic checking for wake up from sleep mode
-                  ListenAutoUpdateSettingsL(); 
-                  }
-              break;
-              }
-          */    
           case ENormalMode:
               {
               FLOG("[bgchecker] SoftNotificationCallBack ENormalMode");
               if ( !aIsAccepted )
                   {
                   FLOG("[bgchecker] SoftNotificationCallBack ENormalMode not accpeted");
-                  //user wants to be reminded later
-                  TTimeIntervalMinutes oneweek( UpdateAvailableReminderIntervalInMinutesL() );   
-                  TTime currenttime;
-                  currenttime.UniversalTime();
-                  TTime nextRemindTime = currenttime + oneweek;
-
-                  SetReminderL( ETrue );
-                  SetNextRemindTimeL( nextRemindTime );
                   
-                  iReminderTimer->StartReminderTimerL( oneweek );
-                  
-                  //the reminder call back function will be called when reminder timer expires.
                   }
               else
                   {
@@ -1599,127 +1240,6 @@
           }
     }
 
-/*
-// ----------------------------------------------------------
-// CIAUpdateBGTimer::DoSoftNotificationCallBackL()
-// ----------------------------------------------------------
-void CIAUpdateBGTimer::DoSoftNotificationCallBackL( TBool aIsAccepted )
-    {
-    FLOG("[bgchecker] SoftNotificationCallBack");
-    if ( !IAUpdateEnabledL() )
-        {
-        Shutdown();
-        return;
-        }
-    iMode = ModeL(); 
-    
-      switch ( iMode )
-          {
-          case EFirstTimeMode:
-          case EFirstTimeRemindMode:     
-                 {
-                 
-                 FLOG("[bgchecker] SoftNotificationCallBack EFirstTimeMode");
-                 if ( !aIsAccepted )
-                     {
-                     FLOG("[bgchecker] SoftNotificationCallBack EFirstTimeMode not accepted");
-                     iMode = EFirstTimeMode2;
-                     SetModeL( iMode );
-                     StartL( StartNow );
-                     }
-                 else
-                     {
-                     FLOG("[bgchecker] SoftNotificationCallBack EFirstTimeMod accepeted");
-                     StartIaupdateL();
-                     //iaupdate is launched
-                     //check the disclaimer acceptance and automatic checking setting in 10mins
-
-                     StartL( KDelayForUserToAcceptDisclaimer );
-                     iMode = EFirstTimeMode3;     
-                     SetModeL( iMode );
-
-                     
-                     //Still in first time mode, 
-                     //check user's setting and disclamier after 10mins.
-                     }
-                 break;
-                 }
-                 
-                 
-                 
-          case EFirstTimeMode2:  // reminder 
-              {
-              FLOG("[bgchecker] SoftNotificationCallBack EFirstTimeMode2 ");
-              if ( aIsAccepted ) // reminder accepted ?
-                  {
-                  FLOG("[bgchecker] SoftNotificationCallBack EFirstTimeMode2, accepted");
-                  //user wants to be reminder so remind in 4 weeks
-                  //set to first time remind mode
-                  iMode = EFirstTimeRemindMode;
-                  SetModeL( iMode );
-                  TTimeIntervalMinutes fourweeks( FirstTimeDialogReminderIntervalInMinutesL() );            
-                  TTime currenttime;
-                  currenttime.UniversalTime();
-                        
-                  //save the next show new feature dialog time
-                  //in case use switch off the device and restarted.      
-                  User::LeaveIfError( SetLastTimeShowNewFeatureDialogL( currenttime ) );
-                        
-                  StartL( fourweeks );
-                  return;
-                  }
-              else
-                  {
-                  FLOG("[bgchecker] SoftNotificationCallBack EFirstTimeMode2, not accepted");
-                  //in sleep mode now
-                  iMode = ESleepMode;
-                  SetModeL( iMode );
-                  
-                  //subscribe to cenrep key for automatic checking for wake up from sleep mode
-                  ListenAutoUpdateSettingsL(); 
-                  }
-              break;
-              }
-              
-          case ENormalMode:
-              {
-              FLOG("[bgchecker] SoftNotificationCallBack ENormalMode");
-              if ( !aIsAccepted )
-                  {
-                  FLOG("[bgchecker] SoftNotificationCallBack ENormalMode not accpeted");
-                  //user wants to be reminded later
-                  TTimeIntervalMinutes oneweek( UpdateAvailableReminderIntervalInMinutesL() );   
-                  TTime currenttime;
-                  currenttime.UniversalTime();
-                  TTime nextRemindTime = currenttime + oneweek;
-
-                  SetReminderL( ETrue );
-                  SetNextRemindTimeL( nextRemindTime );
-                  
-                  iReminderTimer->StartReminderTimerL( oneweek );
-                  
-                  //the reminder call back function will be called when reminder timer expires.
-                  }
-              else
-                  {
-                  //accepted, launch iad
-                  StartIaupdateL();
-                  }
-              break;
-              }
-
-          case ESleepMode:
-              {
-              FLOG("[bgchecker] SoftNotificationCallBack ESleepMode");
-              //donothing
-              break;
-              }
-
-          default:
-              break;
-          }
-    } */
-
 // ----------------------------------------------------------
 // CIAUpdateBGTimer::SoftNotificationCallBack()
 // ----------------------------------------------------------
@@ -1737,65 +1257,13 @@
     return iMode;
     }
 
-
-
-// ----------------------------------------------------------
-// CIAUpdateBGTimer::DoReminderTimerCallBack()
-// ----------------------------------------------------------
-void CIAUpdateBGTimer::DoReminderTimerCallBackL()
-    {
-    FLOG("[bgchecker] ReminderTimerCallBack begin");
-    if ( !IAUpdateEnabledL() )
-        {
-        Shutdown();
-        return;
-        }
-    //Check the automatic update setting, if it has been disabled, 
-    //then go to sleep mode.   
-    if ( IsAutoUpdateDisabledL() )
-        {
-        FLOG("[bgchecker] ReminderTimerCallBack autoupdate is disabled, switch to sleep mode");
-        ListenAutoUpdateSettingsL();
-        iMode = ESleepMode;
-        SetModeL( iMode );
-        return;
-        } 
-    
-    TTimeIntervalMinutes timetowait = TimeIntervalFromNextRefreshL();
-    
-    if ( timetowait.Int() <= KRefreshTimerReminderTimerGap )
-        {
-        FLOG("[bgchecker] ReminderTimerCallBack refresh is about to come in one day. We don't show reminder then");
-        return;
-        }
-    
-    //if reminder is still on which means the BGTimer is not expired 
-    //and checkupdate() is not called yet, then go ahead to call DoupdatesChecking
-    //this is to avoid DoUpdateChecking being called at the same time.
-        
-    if ( ReminderOnL() )
-        {
-        FLOG("[bgchecker] ReminderTimerCallBack Reminder is still ON");
-        DoUpdatesCheckingL( EFalse );
-        }
-    FLOG("[bgchecker] ReminderTimerCallBack end");
-    }
-
-// ----------------------------------------------------------
-// CIAUpdateBGTimer::ReminderTimerCallBack()
-// ----------------------------------------------------------
-void CIAUpdateBGTimer::ReminderTimerCallBack()
-    {
-    TRAP_IGNORE( DoReminderTimerCallBackL() );
-    }
-   
 // ----------------------------------------------------------
 // CIAUpdateBGTimer::LaunchNotificationL( const int aNrOfUpdates )
 // ----------------------------------------------------------
 void CIAUpdateBGTimer::LaunchNotificationL( const int aNrOfUpdates )
     {
    
-    _LIT( KFirstTimeText, "Check for updates ?" );
+    _LIT( KFirstTimeText, "Update checking" );
     _LIT( KNormalText, "Updates available" );
     _LIT( KSecondText, "Tap to view" );
 
@@ -1805,14 +1273,14 @@
     _LIT(KLocFile, "Text_Map_Swupdate_");
     _LIT(KLocFilePath, "z:\\resource\\iaupdate\\");
     
-    _LIT(KTitleFirstTime, "txt_software_update_list_software_update");
+    _LIT(KTitleFirstTime, "txt_software_dpophead_update_checking");
     _LIT(KTitleOneUpdate, "txt_software_dpophead_update_available");
     _LIT(KTitleSeveralUpdates, "txt_software_dpophead_updates_available");
     
     
-    _LIT(KSecondFirstTime, "txt_software_update_list_software_update");
-    _LIT(KSecondOneUpdate, "txt_software_dpopinfo_val_1_new");
-    _LIT(KSecondSeveralUpdates, "txt_software_dpopinfo_ln_new");
+    _LIT(KSecondFirstTime, "txt_software_dpopinfo_tap_to_view");
+    _LIT(KSecondOneUpdate, "txt_software_dpopinfo_tap_to_view");
+    _LIT(KSecondSeveralUpdates, "txt_software_dpopinfo_tap_to_view");
    */
     
     FLOG("[bgchecker] LaunchNotificationL ");
@@ -1874,7 +1342,6 @@
     // HBufC* secondText3 = HbTextResolverSymbian::LoadL(KTextSecond);
     // CleanupStack::PushL( titleText );
     
-    //TBuf<256> iconPath;
     
     TBuf<128> titleText;
     TBuf<128> secondText;
@@ -1893,6 +1360,7 @@
     secondText.Append(KSecondText);
             
     // icon
+    /* HLa-->
     if ( iMode == ENormalMode )
         {
         TFileName path;
@@ -1906,7 +1374,7 @@
             //CleanupStack::PopAndDestroy( image );
             }
         }
-    
+    */
     // loc: set image path
     // iSoftNotification->SetImagePathL( KIcon );
   
@@ -1922,211 +1390,10 @@
     iSoftNotification->SetNrOfUpdates( aNrOfUpdates );
    
     iSoftNotification->ShowNotificationL();
-    FLOG("[bgchecker] LaunchSoftNotificationL 1");
-    // CleanupStack::PopAndDestroy( 3 ); //text, sk1, sk2
+    FLOG("[bgchecker] LaunchNotificationL 1");
     
     return;
     }
-// ----------------------------------------------------------
-// CIAUpdateBGTimer::LaunchSoftNotificationL()
-// ----------------------------------------------------------
-/* HLa
-void CIAUpdateBGTimer::LaunchSoftNotificationL( const TInt& aResourceId, const TInt& SK1, const TInt& SK2 )
-    {     
-    iInternalFile->ReadControllerDataL(); 
-    TInt snid = iInternalFile->SoftNotificationID();
-    if ( snid ) 
-        {
-        //there is a soft notification buffered, remove it
-        iSoftNotification->RemoveSoftNotificationL( snid );
-        }
-    
-    FLOG("[bgchecker] LaunchSoftNotificationL ");
-    HBufC* text = ReadResourceLC( aResourceId );    
-    HBufC* sk1 = ReadResourceLC( SK1 );    
-    HBufC* sk2 = ReadResourceLC( SK2 );  
-    
-        
-    iMode = ModeL();
-    
-    if ( iMode == ENormalMode )
-        {
-        TFileName path;
-        TInt err = GetPrivatePathL( path ); 
-        
-        if ( err == KErrNone )
-            {
-            HBufC8* image = LoadFileLC( path );   
-            iSoftNotification->SetImageL( *image );
-            //iSoftNotification->SetImagePathL( *image );
-            CleanupStack::PopAndDestroy( image );
-            }
-        }
-  
-    
-    iSoftNotification->SetTextL( *text, *text );
-   
-    iSoftNotification->ShowSoftNotificationL();
-    FLOG("[bgchecker] LaunchSoftNotificationL 1");
-    CleanupStack::PopAndDestroy( 3 ); //text, sk1, sk2
-    }
-*/
-
-
-// ----------------------------------------------------------
-// CIAUpdateBGTimer::GetPrivatePathL()
-// ----------------------------------------------------------
-TInt CIAUpdateBGTimer::GetPrivatePathL( TFileName& aPath )
-    {
-    RFs fsSession;  
-    User::LeaveIfError( fsSession.Connect() );
-    CleanupClosePushL( fsSession );
-
-    // This will set the correct drive and private path 
-    // for the file server session. 
-    TInt err = KErrNone;
-    TRAP( err, SetPrivateDriveL( fsSession, KImageFile ) );
-    
-    if ( err != KErrNone )
-        {
-        CleanupStack::PopAndDestroy( &fsSession ); 
-        return err;
-        }
-   
-    err = fsSession.SessionPath( aPath );
-    aPath.Append( KImageFile );
-    
-    CleanupStack::PopAndDestroy( &fsSession ); 
-    return err;
-    }
-
-/*
-// ----------------------------------------------------------
-// CIAUpdateBGTimer::LoadFileLC()
-// ----------------------------------------------------------
- HBufC8* CIAUpdateBGTimer::LoadFileLC(const TDesC& aFile)
-     {
-     RFs fs;
-    User::LeaveIfError( fs.Connect() );
-    CleanupClosePushL( fs );
-    RFile file;
-    User::LeaveIfError(file.Open(fs, aFile, EFileRead));
-    CleanupClosePushL(file);
-    TInt size;
-    User::LeaveIfError(file.Size(size));
-    HBufC8* imagebuf = HBufC8::NewL(size);
-    TPtr8 imageptr(imagebuf->Des());
-    file.Read(imageptr);
-    CleanupStack::PopAndDestroy( &file ); 
-    CleanupStack::PopAndDestroy( &fs ); 
-    CleanupDeletePushL(imagebuf);
-    return imagebuf;
-     } 
-*/
- 
- // ----------------------------------------------------------
- // CIAUpdateBGTimer::SetPrivateDriveL()
- // ----------------------------------------------------------
- void CIAUpdateBGTimer::SetPrivateDriveL( 
-     RFs& aFs,
-     const TDesC& aFileName ) const
-     {
-     // First try to find the file from the private directory
-     // of the drive where the process exists.
-     RProcess process;
-
-     // Set the session private path according to 
-     // the process file name drive.
-     TInt driveNum( 
-         SetSessionPrivatePathL( aFs, process.FileName() ) );
-
-     // Get the session path that was set above.
-     TFileName sessionPath;
-     User::LeaveIfError( aFs.SessionPath( sessionPath ) );
-
-     // Use the file finder to check if the file actually exists 
-     // in the given drive path. If it does not, the file finder 
-     // will automatically check from other drives. So, here we 
-     // should always find the file if any exists.
-     TFindFile finder( aFs );
-     User::LeaveIfError( finder.FindByDir( aFileName, sessionPath ) );
-
-     // The drive may have changed if the file was not found from
-     // the first suggested drive. So, be sure to have the correct
-     // private path.
-     driveNum = SetSessionPrivatePathL( aFs, finder.File() );
-
-     // Use the drive info to check if the drive is ROM drive.
-     // We prefer non ROM drives. But, accept ROM if nothing else is
-     // available.
-     TDriveInfo info;
-     User::LeaveIfError( aFs.Drive( info, driveNum ) );
-     TBool isRomDrive( info.iDriveAtt & KDriveAttRom );
-     if ( !isRomDrive )
-         {
-         // The current file is not in ROM drive so use that.
-         return;
-         }
-
-     // Because previous finding was ROM file, try to find a non ROM file.
-     TInt findErrorCode( finder.Find() );
-     if ( findErrorCode == KErrNotFound )
-         {
-         // Because no new file is found, use the current settings.
-         return;
-         }
-     User::LeaveIfError( findErrorCode );
-
-     // Update the session path for the correct file.
-     SetSessionPrivatePathL( aFs, finder.File() );
-     }
-
-
- // ----------------------------------------------------------
- // CIAUpdateBGTimer::SetSessionPrivatePathL()
- // ----------------------------------------------------------
- TInt CIAUpdateBGTimer::SetSessionPrivatePathL( 
-     RFs& aFs,
-     const TDesC& aPath ) const
-     {                      
-     // Use the parser to get the drive information from the path.
-     TParsePtrC parser( aPath );
-
-     if ( !parser.DrivePresent() )
-         {
-         User::Leave( KErrArgument );
-         }
-
-     // Drive check was passed above.
-     // So, drive information is safe to use.
-     const TDesC& drive( parser.Drive() );
-     const TChar driveChar( drive[ 0 ] );
-     TInt driveNum( EDriveA );
-     User::LeaveIfError( 
-         RFs::CharToDrive( driveChar, driveNum ) );
-
-     // Set the file drive to be file session private path drive.
-     User::LeaveIfError( aFs.SetSessionToPrivate( driveNum ) );
-
-     return driveNum;
-     }
-
- 
-// ----------------------------------------------------------
-// CIAUpdateBGTimer::ReadResourceLC()
-// ----------------------------------------------------------
- /* HLa
-HBufC* CIAUpdateBGTimer::ReadResourceLC( TInt aResourceId )
-    {
-    TResourceReader reader;
-    HBufC8* buff = iResourceFile.AllocReadLC( aResourceId );
-    reader.SetBuffer( buff );
-    HBufC* text = reader.ReadHBufCL();
-    CleanupStack::PopAndDestroy( buff );
-    CleanupStack::PushL( text );
-    return text;
-    } */
-
 
 // ----------------------------------------------------------
 // CIAUpdateBGTimer::IsAutoUpdateDisabledL()
@@ -2255,8 +1522,8 @@
     delete iUpdate; 
     iUpdate = NULL;
     
-    delete iReminderTimer;
-    iReminderTimer = NULL;
+    //delete iReminderTimer;
+    //iReminderTimer = NULL;
     
     if ( iNotifyHandler ) 
         {
@@ -2267,7 +1534,6 @@
     
     if ( iSoftNotification )
         {
-        // TRAP_IGNORE( iSoftNotification->RemoveSoftNotificationL( iSoftNotification->Id() ) );    
         delete iSoftNotification;
         iSoftNotification = NULL;
         }
@@ -2276,9 +1542,4 @@
         
     FLOG("[bgchecker] Shutdown() end");
     }
-
-
-
 // End of file
-
-
--- a/iaupdate/IAD/backgroundchecker/src/iaupdatebgsoftnotification.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/backgroundchecker/src/iaupdatebgsoftnotification.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -103,28 +103,19 @@
 
     delete iTitle;
     delete iText;
-
-    delete iImagePath;
     
     delete iNotificationDialog;
 
     }
    
 // -----------------------------------------------------------------------------
-// CIAUpdateBGSoftNotification::ShowSoftNotificationL
+// CIAUpdateBGSoftNotification::ShowNotificationL
 // Displays notification
 // -----------------------------------------------------------------------------
 //
 void CIAUpdateBGSoftNotification::ShowNotificationL()
     {
     
-    /*
-    _LIT( KIcon, "C:\\qgn_note_swupdate_notification.svg" );
-    _LIT( KFirstTimeText, "Check for updates ?" );
-    _LIT( KNormalText, "Check for updates ?" );
-    _LIT( KTextRow2, "Tap to view" );
-    */
-    
     FLOG("[bgchecker] ShowNotificationL");
     
     // crete dialog, id does not exist already
@@ -133,11 +124,6 @@
         iNotificationDialog = CHbDeviceNotificationDialogSymbian::NewL( this );
         }
     
-    //CleanupStack::PushL( notificationDialog ); // --> memberiin - delete closessa/activaatiossa/destructorissa
-                                                           //    + leave kiinni + tuhoaminen
-    // save number of updates
-    //SetNrOfUpdates ( aNrOfUpdates );
-    
     // enable indicator showing
     SetIndicatorEnabled( ETrue );
 
@@ -170,7 +156,7 @@
         CHbSymbianVariant::EInt );
     CleanupStack::PushL( varValue );
     // Temporary removal 
-    // ind->Activate( KIndicatorTypeBgc, varValue );
+    ind->Activate( KIndicatorTypeBgc, varValue );
     CleanupStack::PopAndDestroy( varValue );
     CleanupStack::PopAndDestroy( ind );
     
@@ -191,7 +177,7 @@
     CHbIndicatorSymbian *ind = CHbIndicatorSymbian::NewL();
     CleanupStack::PushL( ind );
     // Temporary removal 
-    // ind->Deactivate( KIndicatorTypeBgc ); 
+    ind->Deactivate( KIndicatorTypeBgc ); 
     CleanupStack::PopAndDestroy(ind);
     
     return;
@@ -216,19 +202,6 @@
     }
 
 // -----------------------------------------------------------------------------
-// CIAUpdateBGSoftNotification::SetImagePathL
-// Sets an image path for a soft notification
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateBGSoftNotification::SetImagePathL( const TDesC& aImage )
-    {
-    HBufC* txt = aImage.AllocL();
-    delete iImagePath;
-    iImagePath = txt;
-    return;
-    }
-
-// -----------------------------------------------------------------------------
 // CIAUpdateBGSoftNotification::SetNrOfUpdates
 // Sets an image path for a soft notification
 // -----------------------------------------------------------------------------
@@ -280,11 +253,6 @@
         iNotificationDialog->SetTextL(iText->Des());
         }
     
-    if ( iImagePath )
-        {
-        iNotificationDialog->SetIconNameL(iImagePath->Des());
-        }
-    
     // set wrapping, timeout and touch 
     iNotificationDialog->SetTitleTextWrapping(
             CHbDeviceNotificationDialogSymbian::TextWordWrap);
@@ -311,16 +279,6 @@
     return iActivateIndicator;
     
     }
-// ----------------------------------------------------------
-// CIAUpdateBGSoftNotification::SetNrOfUpdates( TIAUpdateBGMode aNrOfUpdates )
-// ----------------------------------------------------------
-/*
-void CIAUpdateBGSoftNotification::SetNrOfUpdates( const int aNrOfUpdates )
-    {
-    
-    iNrOfUpdates = aNrOfUpdates;
-    
-    }*/
 
 // ----------------------------------------------------------
 // CIAUpdateBGSoftNotification::GetNrOfUpdates()
--- a/iaupdate/IAD/bgcindicatorplugin/inc/bgcindicator.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/bgcindicatorplugin/inc/bgcindicator.h	Thu Jul 22 16:35:01 2010 +0100
@@ -11,7 +11,7 @@
  *
  * Contributors:
  *
- * Description: Message Indicator class
+ * Description: Backgroundchecker Indicator class
  *
  */
 
@@ -57,12 +57,8 @@
     
 private: 
     /**
-     * Prepares the display name from stream.
-     * @param dataStream data stream. 
+     * Start the iaupdate client
      */
-    //void prepareDisplayName(QDataStream& dataStream);
-    
-    //HLa
     void StartIaupdateL() const;
     
 private:
--- a/iaupdate/IAD/bgcindicatorplugin/inc/bgcindicatorplugin.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/bgcindicatorplugin/inc/bgcindicatorplugin.h	Thu Jul 22 16:35:01 2010 +0100
@@ -11,7 +11,7 @@
  *
  * Contributors:
  *
- * Description: Message Indicator Plugin Class 
+ * Description: Backgroundchecker Indicator Plugin Class 
  *
  */
 
@@ -26,8 +26,8 @@
 #include <hbindicatorinterface.h>
 
 /**
- * Message indicator plugin class. 
- * Main class of message indicator plugin. 
+ * Backgroundchecker indicator plugin class. 
+ * Main class of backgroundchecker indicator plugin. 
  */
 class BgcIndicatorPlugin : public QObject, public HbIndicatorPluginInterface
 {
--- a/iaupdate/IAD/bgcindicatorplugin/resources/message.svg	Tue Jun 15 13:36:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="40px" version="1.1" viewBox="0 0 30 40" width="30px" x="0px" y="0px">
-<g>
-<path d="M27.458,17.31l-0.81-0.416l0.81-0.418c0.624-0.317,0.62-1.024,0.405-1.392l-0.881-1.512   c-0.251-0.43-0.877-0.683-1.406-0.336l-0.748,0.484l0.051-0.892c0.025-0.453-0.309-1.056-0.998-1.056h-1.764   c-0.57,0-1.031,0.48-0.998,1.056l0.051,0.892l-0.748-0.484c-0.402-0.263-1.08-0.22-1.406,0.336l-0.879,1.512   c-0.219,0.376-0.126,0.735-0.049,0.916H6C4.346,16,3,17.345,3,19v12c0,1.621,1.293,2.944,2.901,2.997v2.695   c0,1.407,1.723,2.251,2.869,1.029l3.063-3.723h11.165C24.654,33.999,26,32.653,26,31V20.706c0.185,0.031,0.699-0.003,0.982-0.487   l0.881-1.516C28.278,17.989,27.701,17.435,27.458,17.31z" fill-opacity="0.2" stroke-opacity="0.2"/>
-<path d="M27,15.588l-0.882-1.512c0,1.023-6.239,1.58-6.239,0L19,15.588l7.118,4.126L27,18.199l-2.536-1.305   L27,15.588z" fill-opacity="0.5" stroke-opacity="0.5"/>
-<path d="M4,26.718V31c0,1.101,0.9,2,2,2h0.901v3.692c0,0.517,0.646,0.86,1.098,0.394L11.362,33H23c1.1,0,2-0.899,2-2   v-4.282c0-0.004-0.001-0.007-0.001-0.011L4,26.718z" fill-opacity="0.5" stroke-opacity="0.5"/>
-<linearGradient gradientTransform="matrix(1 0 0 1 -1530 0)" gradientUnits="userSpaceOnUse" id="SVGID_1_" x1="1544.5" x2="1544.5" y1="13.4609" y2="38.8497">
-<stop offset="0" style="stop-color:#FFE23D"/>
-<stop offset="0.2239" style="stop-color:#FAD337"/>
-<stop offset="0.6537" style="stop-color:#EFAB26"/>
-<stop offset="1" style="stop-color:#E48717"/>
-</linearGradient>
-<path d="M23,16H6c-1.1,0-2,0.9-2,2v12c0,1.101,0.9,2,2,2h0.901v3.692c0,0.438,0.599,0.907,1.098,0.394   L11.362,32H23c1.1,0,2-0.899,2-2V18C25,16.9,24.1,16,23,16z" fill="url(#SVGID_1_)"/>
-<rect fill="#A55B11" height="1" width="10" x="9.5" y="20.5"/>
-<rect fill="#A55B11" height="1" width="10" x="9.5" y="23.5"/>
-<rect fill="#A55B11" height="1" width="6.25" x="9.5" y="26.5"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_2_" x1="14.7773" x2="14.7773" y1="17" y2="32.9845">
-<stop offset="0" style="stop-color:#FFE23D"/>
-<stop offset="0.2239" style="stop-color:#FAD337"/>
-<stop offset="0.6537" style="stop-color:#EFAB26"/>
-<stop offset="1" style="stop-color:#E48717"/>
-</linearGradient>
-<path d="M25,18c0-0.572-0.243-1.089-0.631-1.454l-0.706,0.705C23.869,17.435,24,17.702,24,18   v11.999c0,0.554-0.5,1.002-1,1.002H10.891l-2.989,3.627v-3.627H6c-0.263,0-0.499-0.107-0.678-0.274   c0.009,0.009,0.013,0.021,0.022,0.03l-0.79,0.616C4.92,31.757,5.432,32,6,32h0.901v3.692c0.005,0.61,0.755,0.782,1.098,0.394   L11.362,32H23c1.172,0,2-0.947,2-2V18z" fill="url(#SVGID_2_)" fill-opacity="0.2" stroke-opacity="0.2"/>
-<path d="M7.901,34.628v-3.627l-1,0.999v3.692c0,0.262,0.164,0.494,0.411,0.583L7.901,34.628z" fill="#FFFFFF" fill-opacity="0.2" stroke-opacity="0.2"/>
-<path d="M5.345,30.757c-0.212-0.184-0.347-0.455-0.347-0.758V18c0-0.552,0.449-1.001,1.002-1.001h17   c0.254,0,0.457,0.069,0.663,0.252l0.706-0.705C24.011,16.208,23.528,16,23,16H6c-1.1,0-2,0.9-2,2v12   c0,0.532,0.211,1.017,0.552,1.376L5.345,30.757z" fill="#FFFFFF" fill-opacity="0.4" stroke-opacity="0.4"/>
-<path d="M7.901,31.001H6c-0.263,0-0.499-0.107-0.678-0.274c0.009,0.009,0.013,0.021,0.022,0.03l-0.79,0.616   C4.92,31.757,5.432,32,6,32h0.901L7.901,31.001z" fill-opacity="0.2" stroke-opacity="0.2"/>
-<path d="M25,18c0-0.572-0.243-1.089-0.631-1.454l-0.706,0.705C23.869,17.435,24,17.702,24,18v11.999   c0,0.585-0.562,1.002-1,1.002H10.891l-2.989,3.627l-0.589,1.647c0.067,0.024,0.422,0.105,0.687-0.189L11.362,32H23   c0.984,0,2-0.775,2-2V18z" fill-opacity="0.2" stroke-opacity="0.2"/>
-<path d="M25,16.619L24.25,16h-5.518c0.014,0.009,1.713,0.894,1.713,0.894l-1.675,0.86   c-0.317,0.205-0.271,0.577-0.204,0.694l0.879,1.515c0.352,0.402,0.623,0.224,0.705,0.171l1.574-1.017l-0.105,1.856   c0.021,0.438,0.361,0.527,0.498,0.527h1.764c0.4,0,0.508-0.391,0.498-0.527l-0.104-1.856L25,19.587V16.619z" fill-opacity="0.3" stroke-opacity="0.3"/>
-<polygon fill="#EA2227" points="27,17.199 26.118,18.714 23.722,17.162 23.881,20 22.117,20 22.277,17.162 19.879,18.714    19,17.199 21.537,15.895 19,14.588 19.879,13.076 22.277,14.625 22.117,11.771 23.881,11.771 23.722,14.625 26.118,13.076    27,14.588 24.464,15.895  "/>
-<rect fill="none" height="40" width="30"/>
-</g>
-</svg>
--- a/iaupdate/IAD/bgcindicatorplugin/rom/bgcindicatorplugin.iby	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/bgcindicatorplugin/rom/bgcindicatorplugin.iby	Thu Jul 22 16:35:01 2010 +0100
@@ -20,5 +20,4 @@
 REM DLL
 file=ABI_DIR\UREL\bgcindicatorplugin.dll               SHARED_LIB_DIR\bgcindicatorplugin.dll UNPAGED
 data=\epoc32\data\z\resource\plugins\indicators\bgcindicatorplugin.qtplugin   \resource\plugins\indicators\bgcindicatorplugin.qtplugin
-data=\epoc32\s60\icons\qgn_note_swupdate_notification.svg   \resource\iaupdate\qgn_note_swupdate_notification.svg
 #endif
\ No newline at end of file
--- a/iaupdate/IAD/bgcindicatorplugin/src/bgcindicator.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/bgcindicatorplugin/src/bgcindicator.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -88,8 +88,8 @@
         if ( mNrOfUpdates == 0 )
             {
             // First time case
-            // loc: text.append(hbTrId("txt_software_update_list_software_update"));
-            text.append(QString("Check for updates?"));
+            // loc: text.append(hbTrId("txt_software_dblist_update_checking"));
+            text.append(QString("Update checking"));
             }
         else if ( mNrOfUpdates == 1 )
             {
@@ -111,29 +111,27 @@
         if ( mNrOfUpdates == 0 )
             {
             // First time case
-            // loc: QString text(hbTrId("txt_software_update_list_software_update"));
-            text.append(QString("Tap to view"));
+            // loc: QString text(hbTrId("txt_software_dblist_val_not_activated"));
+            text.append(QString("Not activated"));
             }
         else if ( mNrOfUpdates == 1 )
             {
             // one update available
-            // loc: QString text(hbTrId("txt_software_dblist_val_1_new"));
-            text.append(QString("%1 new").arg(mNrOfUpdates));
+            // loc: QString text(hbTrId("txt_software_dblist_1_val_ln_update"));
+            text.append(QString("%Ln updates").arg(mNrOfUpdates));
             }
         else
             {
             // several updates available
-            // loc: QString text(hbTrId("txt_software_dblist_val_ln_new"));
-            text.append(QString("%1 new").arg(mNrOfUpdates));
+            // loc: QString text(hbTrId("txt_software_dblist_1_val_ln_update"));
+            text.append(QString("%%Ln updates").arg(mNrOfUpdates));
             }
         return text; 
         }
     case DecorationNameRole:
     case MonoDecorationNameRole:
         {
-        // QString iconName("z:/resource/messaging/message.svg");
-        // HbIcon iconName1 ("c:/qgn_note_swupdate_notification.svg");
-        QString iconName("z:/resource/iaupdate/qgn_note_swupdate_notification.svg");
+        QString iconName("");
         return iconName;
         }
     default: 
--- a/iaupdate/IAD/engine/controller/inc/iaupdatenodeimpl.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/engine/controller/inc/iaupdatenodeimpl.h	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2007-2010 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"
@@ -138,20 +138,19 @@
      */
     virtual TInt Depth() const;
     
-    /**
-     * Informs UI that downloading is ongoing
-     **/
-    virtual TBool Downloading() const;
-
-    /**
-     * Informs UI that installing is ongoing
-     **/
-    virtual TBool Installing() const;
-    
-    virtual void SetDownloading( TBool aDownloading );
-
-    virtual void SetInstalling( TBool aInstalling );
+    virtual void SetUiState( TUIUpdateState aState );
+        
+    virtual TUIUpdateState UiState() const;
+        
+    // for progress bar in UI
+    virtual void SetProgress( TInt aProgress );
         
+    virtual TInt Progress() const; 
+        
+    virtual void SetTotal( TInt aTotal );
+        
+    virtual TInt Total() const; 
+               
     /**
      * @see MIAUpdateNode:::NodeType
      */
@@ -337,9 +336,10 @@
     TDependencyCheckStatus              iDependencyCheckStatus;
     TInt                                iLeafDistance;
     TInt                                iDepth;
-    TBool                               iDownloading;
-    TBool                               iInstalling;
-
+    TUIUpdateState                      iUiUpdateState;
+    TInt                                iProgress;
+    TInt                                iTotal;
+    
     // These arrays do not own the nodes.
     RPointerArray< CIAUpdateNode >      iDependants;
     RPointerArray< CIAUpdateNode >      iExcessDependencyNodes;
--- a/iaupdate/IAD/engine/controller/src/iaupdateinstalloperation.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/engine/controller/src/iaupdateinstalloperation.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -205,8 +205,10 @@
         {
         // Install interface was available.
         // So, start installing with silent install operation.
-        SwiUI::TInstallOptions options(
-            IAUpdateUtils::SilentInstallOptionsL( Node() ) );
+        // Get silent install parameters 
+        Usif::COpaqueNamedParams * options = Usif::COpaqueNamedParams::NewLC();
+
+        IAUpdateUtils::UsifSilentInstallOptionsL ( options );
         
         operation = install->SilentInstallL( *this, options );
 
@@ -216,7 +218,7 @@
             IAUPDATE_TRACE("[IAUPDATE] ERROR Could not create the operation.");
             User::Leave( KErrGeneral );
             }
-        
+        CleanupStack::Pop( options );
         CleanupStack::PopAndDestroy( install );
         }
     else
--- a/iaupdate/IAD/engine/controller/src/iaupdateloader.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/engine/controller/src/iaupdateloader.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2007-2010 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"
@@ -504,18 +504,20 @@
         IAUPDATE_TRACE_1("[IAUPDATE] Container child: %d", i);
 
         MNcdNode* node( aParentContainer.ChildL( i ) );
-        CleanupReleasePushL( *node );
-
-        MNcdNodeContainer* container(
-            node->QueryInterfaceLC< MNcdNodeContainer >() );
-        if ( container )
+        if ( node )
             {
-            IAUPDATE_TRACE("[IAUPDATE] Container child had container interface");
-            LoadContainerL( *container );
-            CleanupStack::PopAndDestroy( container );                
+            CleanupReleasePushL( *node );
+
+            MNcdNodeContainer* container(
+            node->QueryInterfaceLC< MNcdNodeContainer >() );
+            if ( container )
+                {
+                IAUPDATE_TRACE("[IAUPDATE] Container child had container interface");
+                LoadContainerL( *container );
+                CleanupStack::PopAndDestroy( container );                
+                }
+            CleanupStack::PopAndDestroy( node );
             }
-
-        CleanupStack::PopAndDestroy( node );
         }
 
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateLoader::LoadChildContainersL() end");
@@ -636,55 +638,55 @@
     for ( TInt i = 0; i < childCount; ++i )
         {
         MNcdNode* node( aContainer.ChildL( i ) );
-        CleanupReleasePushL( *node );
+        if ( node )
+            {
+            CleanupReleasePushL( *node );
 
-        MNcdNodeContainer* container( 
-            node->QueryInterfaceLC< MNcdNodeContainer >() );
-        if ( container )
-            {
-            IAUPDATE_TRACE_1("[IAUPDATE] Container child: %d had container interface", i);
-
-            switch ( aPreviousOperationType )
+            MNcdNodeContainer* container( 
+               node->QueryInterfaceLC< MNcdNodeContainer >() );
+            if ( container )
                 {
-                case TIAUpdateOperationInfo::ELoadRoot:
-                    IAUPDATE_TRACE("[IAUPDATE] Load children of the root child");
-                    // When root is loaded, also its children are loaded
-                    // and they have now their child count. So, no need to
-                    // reload children of the root. Load their children
-                    // directly now.
-                    LoadChildrenL( *container );
-                    break;
-                    
-                case TIAUpdateOperationInfo::ELoadChildren:
-                    IAUPDATE_TRACE("[IAUPDATE] Load children of a container");
-                    // Notice, that now we need to first load the child count
-                    // for the child containers. So, even if children were 
-                    // already updated by LoadChildrenL, a new request for
-                    // containers needs . Otherwise, the child count 
-                    // will not be up-to-date. When the child containers are 
-                    // loaded, the flow will continue to load the children.
-                    LoadContainerL( *container );
-                    break;
+                IAUPDATE_TRACE_1("[IAUPDATE] Container child: %d had container interface", i);
+                switch ( aPreviousOperationType )
+                    {
+                    case TIAUpdateOperationInfo::ELoadRoot:
+                        IAUPDATE_TRACE("[IAUPDATE] Load children of the root child");
+                        // When root is loaded, also its children are loaded
+                        // and they have now their child count. So, no need to
+                        // reload children of the root. Load their children
+                        // directly now.
+                        LoadChildrenL( *container );
+                        break;
+                            
+                    case TIAUpdateOperationInfo::ELoadChildren:
+                        IAUPDATE_TRACE("[IAUPDATE] Load children of a container");
+                        // Notice, that now we need to first load the child count
+                        // for the child containers. So, even if children were 
+                        // already updated by LoadChildrenL, a new request for
+                        // containers needs . Otherwise, the child count 
+                        // will not be up-to-date. When the child containers are 
+                        // loaded, the flow will continue to load the children.
+                        LoadContainerL( *container );
+                        break;
 
-                case TIAUpdateOperationInfo::ELoadAllChildren:
-                    IAUPDATE_TRACE("[IAUPDATE] Load all children of a container");
-                    // Notice, here we will try to skip the loading of the child
-                    // count of the container. So, all the children are tried to
-                    // be loaded directly even if the child count may not be
-                    // up-to-date.
-                    LoadAllChildrenL( *container );
-                    break;
-                    
-                default:
-                    IAUPDATE_TRACE("[IAUPDATE] ERROR: Wrong operation type");
-                    User::Leave( KErrArgument );
-                    break;
+                    case TIAUpdateOperationInfo::ELoadAllChildren:
+                        IAUPDATE_TRACE("[IAUPDATE] Load all children of a container");
+                        // Notice, here we will try to skip the loading of the child
+                        // count of the container. So, all the children are tried to
+                        // be loaded directly even if the child count may not be
+                        // up-to-date.
+                        LoadAllChildrenL( *container );
+                        break;
+                            
+                    default:
+                        IAUPDATE_TRACE("[IAUPDATE] ERROR: Wrong operation type");
+                        User::Leave( KErrArgument );
+                        break;
+                    }
+                CleanupStack::PopAndDestroy( container );                
                 }
-
-            CleanupStack::PopAndDestroy( container );                
+            CleanupStack::PopAndDestroy( node );
             }
-
-        CleanupStack::PopAndDestroy( node );
         }
 
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateLoader::LoadChildrenOfChildrenL() end");
--- a/iaupdate/IAD/engine/controller/src/iaupdatenodeimpl.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/engine/controller/src/iaupdatenodeimpl.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -365,47 +365,69 @@
     return iDepth;
     }
 
+
 // ---------------------------------------------------------------------------
-// CIAUpdateNode::Downloading()
+// CIAUpdateNode::SetUiState()
 // 
 // ---------------------------------------------------------------------------
 //
-TBool CIAUpdateNode::Downloading() const
+void CIAUpdateNode::SetUiState( MIAUpdateNode::TUIUpdateState aState )
     {
-    return iDownloading;
+    iUiUpdateState = aState;
     }
 
 // ---------------------------------------------------------------------------
-// CIAUpdateNode::Installing()
+// CIAUpdateNode::UiState()
+// 
+// ---------------------------------------------------------------------------
+//
+MIAUpdateNode::TUIUpdateState CIAUpdateNode::UiState() const
+    {
+    return iUiUpdateState;
+    }
+
+// ---------------------------------------------------------------------------
+// CIAUpdateNode::SetProgress
 // 
 // ---------------------------------------------------------------------------
 //
-TBool CIAUpdateNode::Installing() const
+void CIAUpdateNode::SetProgress( TInt aProgress )
     {
-    return iInstalling;
+    iProgress = aProgress; 
     }
- 
+
 // ---------------------------------------------------------------------------
-// CIAUpdateNode::SetDownloading()
+// CIAUpdateNode::Progress
 // 
 // ---------------------------------------------------------------------------
 //
-void CIAUpdateNode::SetDownloading( TBool aDownloading )
+TInt CIAUpdateNode::Progress() const
     {
-    iDownloading = aDownloading;
+    return iProgress;
     }
 
 // ---------------------------------------------------------------------------
-// CIAUpdateNode::SetInstalling()
+// CIAUpdateNode::SetTotal
 // 
 // ---------------------------------------------------------------------------
 //
-void CIAUpdateNode::SetInstalling( TBool aInstalling )
+void CIAUpdateNode::SetTotal( TInt aTotal )
     {
-    iInstalling = aInstalling;
+    iTotal = aTotal; 
     }
 
 // ---------------------------------------------------------------------------
+// CIAUpdateNode::Total
+// 
+// ---------------------------------------------------------------------------
+//
+TInt CIAUpdateNode::Total() const
+    {    
+    return iTotal;
+    }
+    
+
+// ---------------------------------------------------------------------------
 // CIAUpdateNode::NodeType
 // 
 // ---------------------------------------------------------------------------
--- a/iaupdate/IAD/engine/controller/src/iaupdateutils.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/engine/controller/src/iaupdateutils.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -39,7 +39,8 @@
 #include <ncdpurchaseoption.h>
 
 #include <catalogsutils.h>
-#include <WidgetRegistryClient.h>
+//#include <WidgetRegistryClient.h>
+#include <usif/scr/scr.h>
 
 //Constants
 const TText KVersionSeparator( '.' );
@@ -303,6 +304,47 @@
 
 EXPORT_C TBool IAUpdateUtils::IsWidgetInstalledL(const TDesC& aIdentifier, TIAUpdateVersion& aVersion )
     {
+    
+    TBool retVal = EFalse;
+    
+    // Connect to registry
+    Usif::RSoftwareComponentRegistry scrSession;  
+    CleanupClosePushL( scrSession );
+    User::LeaveIfError( scrSession.Connect());
+       
+    // // Get widget component id by identifier
+    Usif::TComponentId compId = 0;
+    TRAPD( err, compId = 
+           scrSession.GetComponentIdL( aIdentifier, Usif::KSoftwareTypeWidget ));
+    
+    if ( err == KErrNotFound )
+        {
+        retVal = EFalse;
+        }
+    else if  (err != KErrNone )
+        {
+        User::Leave( err );
+        }
+    else
+        {
+        // Widget found
+        retVal = ETrue;
+        
+        // Get entry 
+        Usif::CComponentEntry* entry = Usif::CComponentEntry::NewLC();
+        retVal = scrSession.GetComponentL(compId, *entry);
+        
+        // Convert version
+        DesToVersionL ( entry->Version(), aVersion.iMajor, aVersion.iMinor, aVersion.iBuild  );
+    
+        CleanupStack::PopAndDestroy(entry);
+        }
+    
+    CleanupStack::PopAndDestroy( &scrSession ); 
+    
+    return retVal;
+    
+    /*
     RWidgetRegistryClientSession widgetRegistry;
 
     User::LeaveIfError( widgetRegistry.Connect() );
@@ -339,6 +381,7 @@
     CleanupStack::PopAndDestroy( &widgetInfoArr );
     CleanupStack::PopAndDestroy( &widgetRegistry);
     return EFalse;
+    */
       
      
     }
@@ -461,79 +504,60 @@
     return exeFound;
     }
 
-
 // ---------------------------------------------------------------------------
-// IAUpdateUtils::SilentInstallOptionsL
+// IAUpdateUtils::UsifSilentInstallOptionsL
 // 
 // ---------------------------------------------------------------------------
-//
-SwiUI::TInstallOptions IAUpdateUtils::SilentInstallOptionsL(
-    const CIAUpdateBaseNode& aNode )
+
+void  IAUpdateUtils::UsifSilentInstallOptionsL( 
+        Usif::COpaqueNamedParams * aOptions )
     {
-    IAUPDATE_TRACE("[IAUPDATE] IAUpdateUtils::SilentInstallOptionsL() begin");
-    SwiUI::TInstallOptions options;
+
+    aOptions->AddIntL( Usif::KSifInParam_InstallSilently, ETrue );
 
-    // Upgrades are allowed        
-    options.iUpgrade = SwiUI::EPolicyAllowed;
-
+    // Upgrades are allowed 
+    aOptions->AddIntL( Usif::KSifInParam_AllowUpgrade, Usif::EAllowed );
+    
     // Install all if optional packets exist.
-    options.iOptionalItems = SwiUI::EPolicyAllowed;
-
+    aOptions->AddIntL( Usif::KSifInParam_InstallOptionalItems, Usif::EAllowed );
+    
     // Prevent online cert revocation check.
-    options.iOCSP = SwiUI::EPolicyNotAllowed;
+    aOptions->AddIntL( Usif::KSifInParam_PerformOCSP, Usif::ENotAllowed );
     
     // See iOCSP setting above
-    options.iIgnoreOCSPWarnings = SwiUI::EPolicyAllowed;
-
+    aOptions->AddIntL( Usif::KSifInParam_IgnoreOCSPWarnings, Usif::EAllowed );
+    
     // Do not allow installation of uncertified packages.
-    options.iUntrusted = SwiUI::EPolicyNotAllowed;
-
-    // If filetexts are included in SIS package. Then, show them.
-    options.iPackageInfo = SwiUI::EPolicyUserConfirm;
+    aOptions->AddIntL( Usif::KSifInParam_AllowUntrusted, Usif::ENotAllowed );
+    
+    // If filetexts are included in SIS package, show them.
+    aOptions->AddIntL( Usif::KSifInParam_PackageInfo, Usif::EAllowed );
     
     // Automatically grant user capabilities.
-    // See also iUntrusted above.
-    options.iCapabilities = SwiUI::EPolicyAllowed;
-
+    // See also KSifInParam_AllowUntrusted above.
+    aOptions->AddIntL( Usif::KSifInParam_GrantCapabilities, Usif::EAllowed );
+    
     // Open application will be closed.
-    options.iKillApp = SwiUI::EPolicyAllowed;
+    aOptions->AddIntL( Usif::KSifInParam_AllowAppShutdown, Usif::EAllowed );
     
     // Files can be overwritten.
-    options.iOverwrite = SwiUI::EPolicyAllowed;
+    aOptions->AddIntL( Usif::KSifInParam_AllowOverwrite, Usif::EAllowed  );
+    
+    // Incompatible allowed
+    aOptions->AddIntL( Usif::KSifInParam_AllowIncompatible, Usif::EAllowed  );
     
     // This only affects Java applications.
-    options.iDownload = SwiUI::EPolicyAllowed;
+    aOptions->AddIntL( Usif::KSifInParam_AllowDownload, Usif::EAllowed  );
     
     // Where to save.
-    IAUPDATE_TRACE("[IAUPDATE] IAUpdateUtils::SilentInstallOptionsL() before DriveToInstallL");
-    TDriveUnit driveUnit;
-    if ( aNode.Mime().Compare( IAUpdateProtocolConsts::KMimeWidget ) == 0 )
-        {
-        driveUnit = IAUpdateUtils::DriveToInstallWidgetL( aNode.Identifier() );
-        }
-    else
-        {
-        driveUnit = IAUpdateUtils::DriveToInstallL( aNode.Uid(), aNode.OwnContentSizeL() );
-        }
-     IAUPDATE_TRACE("[IAUPDATE] IAUpdateUtils::SilentInstallOptionsL() after DriveToInstallL");
-    
-    TDriveName driveName = driveUnit.Name();
-    IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateUtils::SilentInstallOptionsL() driveName: %S", &driveName );
-    options.iDrive = driveName[0];
+    //aOptions->AddIntL( Usif::KSifInParam_Drive, EDriveC );
     
     // Choose the phone language.
-    options.iLang = User::Language();
-    
-    // If language is asked, then use the current phone language.
-    options.iUsePhoneLang = ETrue;
+    TLanguage lang = User::Language();
+    //aOptions->AddIntL( Usif::KSifInParam_Languages, lang ); // User::Language() );
     
-    // Does not affect SISX. This is for Java.
-    options.iUpgradeData = SwiUI::EPolicyAllowed;
-    IAUPDATE_TRACE("[IAUPDATE] IAUpdateUtils::SilentInstallOptionsL() end");
-    return options;
+    //aOptions->AddIntL( Usif::KSifInParam_Drive, IAUpdateUtils::DriveToInstallL( aUid, aSize ) );
     }
-
-
 // -----------------------------------------------------------------------------
 // IAUpdateUtils::InstalledDriveL
 // 
@@ -653,6 +677,11 @@
                                            TDriveUnit& aLocationDrive )
     {
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateUtils::InstalledDriveWidgetL() begin");
+    aLocationDrive = EDriveC;
+    
+    //HLa: Widget registry remove
+    
+    /*
     TFileName widgetPath;
     aWidgetRegistry.GetWidgetPath( aUid, widgetPath );
     aLocationDrive = widgetPath.Mid( 0, 2 );
@@ -674,6 +703,8 @@
             IAUPDATE_TRACE("[IAUPDATE] IAUpdateUtils::InstalledDriveWidgetL() Physically removable drive not present, install to C:");
             }
         }
+    */
+    
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateUtils::InstalledDriveWidgetL() begin");
     }
 
@@ -762,7 +793,12 @@
     {
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateUtils::DriveToInstallWidgetL() begin");
     IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateUtils::DriveToInstallWidgetL() identifier: %S", &aIdentifier );
+    
+
     TDriveUnit targetDriveUnit( EDriveC );
+    
+    //HLa: Widget registry remove
+    /*
     RWidgetRegistryClientSession widgetRegistry;
 
     User::LeaveIfError( widgetRegistry.Connect() );
@@ -796,8 +832,11 @@
         
     CleanupStack::PopAndDestroy( &widgetInfoArr );
     CleanupStack::PopAndDestroy( &widgetRegistry);
+    */
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateUtils::DriveToInstallWidgetL() end");
+
     return targetDriveUnit;
+
     }
 
 
--- a/iaupdate/IAD/engine/group/iaupdateengine.mmp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/engine/group/iaupdateengine.mmp	Thu Jul 22 16:35:01 2010 +0100
@@ -114,7 +114,7 @@
 LIBRARY         platformenv.lib
 LIBRARY         platformver.lib     // System version info
 LIBRARY         etel3rdparty.lib
-LIBRARY         swinstcli.lib
+//LIBRARY         swinstcli.lib
 LIBRARY         apmime.lib
 LIBRARY         ecom.lib            // For the NCD Engine ECOM session closing.
 LIBRARY         sysversioninfo.lib
@@ -125,7 +125,9 @@
 LIBRARY         iaupdaterfiles.lib
 
 // widget registry API library
-LIBRARY         widgetregistryclient.lib
+LIBRARY         sif.lib // SIF installer
+LIBRARY         scrclient.lib  //Registry client
+//LIBRARY         widgetregistryclient.lib
 
 // NCD Engine
 LIBRARY         ncdengine_20019119.lib
--- a/iaupdate/IAD/engine/inc/iaupdatenode.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/engine/inc/iaupdatenode.h	Thu Jul 22 16:35:01 2010 +0100
@@ -78,6 +78,20 @@
        
         };
 
+    /**
+    * For UI during update process
+    **/
+    
+    enum TUIUpdateState
+        {
+        ENormal,
+        EDownloading,
+        EInstalling,
+        EUpdated,
+        EFailed,
+        EDownloaded        
+        };
+    
 
     /**
      * @return TPackageType The type of this node content.
@@ -169,20 +183,20 @@
      */
     virtual TInt Depth() const = 0;
 
-    /**
-     * Informs UI that downloading is ongoing
-     **/
-    virtual TBool Downloading() const = 0;
-
-    /**
-    * Informs UI that installing is ongoing
-    **/
-    virtual TBool Installing() const = 0;
+    virtual void SetUiState( TUIUpdateState aState ) = 0;
+    
+    virtual TUIUpdateState UiState() const = 0;
+    
+    // for progress bar in UI
+    virtual void SetProgress( TInt aProgress ) = 0;
     
-    virtual void SetDownloading( TBool aDownloading ) = 0;
-
-    virtual void SetInstalling( TBool aInstalling ) = 0;
+    virtual TInt Progress() const = 0; 
+    
+    virtual void SetTotal( TInt aTotal ) = 0;
     
+    virtual TInt Total() const = 0; 
+    
+       
 
 protected:
 
--- a/iaupdate/IAD/engine/inc/iaupdateutils.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/engine/inc/iaupdateutils.h	Thu Jul 22 16:35:01 2010 +0100
@@ -25,6 +25,7 @@
 
 // For silent installation
 #include <SWInstDefs.h>
+#include <usif/sif/sif.h>
 #include <swi/sisregistryentry.h>
 
 class TIAUpdateVersion;
@@ -128,7 +129,13 @@
 SwiUI::TInstallOptions SilentInstallOptionsL( const CIAUpdateBaseNode& aNode );
                                                      
 
-
+/**
+ * Creates options for silent install.
+ * Uses DriveToInstallL to etermine target drive to install.
+ * 
+ * @param aOptions  Silent install options
+ */
+void  UsifSilentInstallOptionsL( Usif::COpaqueNamedParams * aOptions );
 
 /**
  * Finds drive where a package is currently installed
--- a/iaupdate/IAD/firmwareupdate/inc/iaupdatefwfotamodel.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/firmwareupdate/inc/iaupdatefwfotamodel.h	Thu Jul 22 16:35:01 2010 +0100
@@ -23,6 +23,7 @@
 
 //  INCLUDES
 #include <fotaengine.h>
+#include <badesca.h>
 
 // FORWARD DECLARATIONS
 
@@ -51,16 +52,6 @@
     public: // New functions
         
         /**
-        * Retrieves the human readable name of the profile.
-        * @since Series 60 3.1
-        * @param aProfileId Profile identifier
-        * @param aProfileId Human readable name of the profile, or KNullDesC if not found.
-        * @return None
-        */
-        void GetProfileNameL( const TInt aProfileId,
-                                    HBufC* aProfileName ) const;
-
-        /**
         * Retrieves the default fota profile identifier from
         * the central repository.
         * @since Series 60 3.1
--- a/iaupdate/IAD/firmwareupdate/inc/iaupdatefwsynchandler.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/firmwareupdate/inc/iaupdatefwsynchandler.h	Thu Jul 22 16:35:01 2010 +0100
@@ -23,7 +23,7 @@
 // INCLUDES
 #include <e32base.h>
 #include <SyncMLObservers.h>
-#include <cmmanagerext.h>
+#include <cmmanager.h>
 
 #include "iaupdatefwsyncutil.h"
 #include "iaupdatefwsyncprofile.h"
@@ -272,8 +272,8 @@
     private:
         
         TUint32 SelectConnectionMethodL();
-        TUint32 GetBestIAPInInternetSNAPL( RCmManagerExt& aCmManagerExt  );
-        TUint32 GetBestIAPInThisSNAPL( RCmManagerExt& aCmManagerExt, TUint32 aSNAPID  );
+        TUint32 GetBestIAPInInternetSNAPL( RCmManager& aCmManager );
+        TUint32 GetBestIAPInThisSNAPL( RCmManager& aCmManager, TUint32 aSNAPID  );
 
     private:
 		// session with sync server
--- a/iaupdate/IAD/firmwareupdate/src/iaupdatefwfotamodel.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/firmwareupdate/src/iaupdatefwfotamodel.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -57,37 +57,6 @@
 
 
 // -----------------------------------------------------------------------------
-// CIAUpdateFWFotaModel::GetProfileName
-// Changes aProfileName to KNullDesC if the profile identifier is
-// not found.
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateFWFotaModel::GetProfileNameL( const TInt   aProfileId,
-                                              HBufC* aProfileName ) const
-    {
-    FLOG( "[IAUPDATEFW] CIAUpdateFWFotaModel::GetProfileNameL() - not implemented" );
-
-/*KNST
-    TInt index( 0 );
-    aProfileName->Des().Copy( KNullDesC );
-    
-    iDocument->RefreshProfileListL( ETrue ); // Include hidden profile
-    CArrayFixFlat<TNSmlDMProfileItem>* profileList = iDocument->ProfileList( index );
-    
-    for ( index = 0; index < profileList->Count(); index++ )
-        {
-        if ( ( *profileList )[index].iProfileId == aProfileId )
-            {
-            aProfileName->Des().Copy( ( *profileList )[index].iProfileName );
-            }
-        }
-*/
-    FTRACE( FPrint( _L(
-        "[IAUPDATEFW] CIAUpdateFWFotaModel::GetProfileNameL(): aProfileId = %d, ProfileName = \"%S\"" ),
-         aProfileId, aProfileName ) );
-    }
-
-// -----------------------------------------------------------------------------
 // CIAUpdateFWFotaModel::DefaultFotaProfileIdL
 // -----------------------------------------------------------------------------
 //
--- a/iaupdate/IAD/firmwareupdate/src/iaupdatefwsynchandler.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/firmwareupdate/src/iaupdatefwsynchandler.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -28,14 +28,15 @@
 #include <rconnmon.h>
 #include <es_enum.h>
 
-#include <cmconnectionmethodext.h>
+#include <cmconnectionmethod.h>
 #include <cmconnectionmethoddef.h>
 #include <cmpluginpacketdatadef.h>
-#include <cmconnectionmethoddef.h>
-#include <cmconnectionmethodext.h>
-#include <cmdestinationext.h>
+
+#include <cmdestination.h>
 #include <cmmanagerdef.h>
 
+#include <uikon.hrh>
+
 #include "iaupdateconnectionmethod.h"
 #include "iaupdateprivatecrkeys.h"
 #include "iaupdatefwfotamodel.h"
@@ -425,16 +426,16 @@
     CleanupStack::PopAndDestroy( cenrep ); 
     cenrep = NULL;
 
-    RCmManagerExt cmManagerExt;
-    cmManagerExt.OpenL();
-    CleanupClosePushL( cmManagerExt );
+    RCmManager cmManager;
+    cmManager.OpenL();
+    CleanupClosePushL( cmManager );
     
     if ( connMethodId == -1 )
         {
         //check what is the default connection by users     
         
         TCmDefConnValue DCSetting;
-        cmManagerExt.ReadDefConnL( DCSetting );
+        cmManager.ReadDefConnL( DCSetting );
        
         
         switch ( DCSetting.iType )
@@ -443,13 +444,13 @@
             case ECmDefConnAskOnce:
                 {
                 //go with the best IAP under internet snap
-                connectionMethodId = GetBestIAPInInternetSNAPL( cmManagerExt );
+                connectionMethodId = GetBestIAPInInternetSNAPL( cmManager );
                 break;
                 }
             case ECmDefConnDestination:
                 {
                 //go with the best IAP under this snap
-                connectionMethodId = GetBestIAPInThisSNAPL( cmManagerExt, DCSetting.iId );
+                connectionMethodId = GetBestIAPInThisSNAPL( cmManager, DCSetting.iId );
                 break;
                 }
             case ECmDefConnConnectionMethod:
@@ -463,16 +464,16 @@
     else if ( connMethodId == 0 )
         {
         //no choice from user, we go with the best IAP under Internent SNAP
-        connectionMethodId = GetBestIAPInInternetSNAPL( cmManagerExt );
+        connectionMethodId = GetBestIAPInInternetSNAPL( cmManager );
         }
     else
         {
 
         // It was some SNAP value
-        connectionMethodId = GetBestIAPInThisSNAPL( cmManagerExt, connMethodId );
+        connectionMethodId = GetBestIAPInThisSNAPL( cmManager, connMethodId );
         }
 
-    CleanupStack::PopAndDestroy( &cmManagerExt ); 
+    CleanupStack::PopAndDestroy( &cmManager ); 
     
     return connectionMethodId;
               
@@ -483,15 +484,15 @@
 // CIAUpdateFWSyncHandler::GetBestIAPInInternetSNAPL
 // -----------------------------------------------------------------------------
 //
-TUint32 CIAUpdateFWSyncHandler::GetBestIAPInInternetSNAPL( RCmManagerExt& aCmManagerExt  )
+TUint32 CIAUpdateFWSyncHandler::GetBestIAPInInternetSNAPL( RCmManager& aCmManager )
     {
     //select IAP from Internet SNAP
     RArray<TUint32> destIdArray;
-    aCmManagerExt.AllDestinationsL( destIdArray );
+    aCmManager.AllDestinationsL( destIdArray );
     TUint32 InternetSNAPID = 0;
     for ( TInt i = 0; i< destIdArray.Count(); i++ )
         {
-        RCmDestinationExt dest = aCmManagerExt.DestinationL( destIdArray[i] );
+        RCmDestination dest = aCmManager.DestinationL( destIdArray[i] );
         CleanupClosePushL( dest );
                                      
         if ( dest.MetadataL( CMManager::ESnapMetadataInternet ) )
@@ -504,7 +505,7 @@
          }
     destIdArray.Reset();
     
-    return GetBestIAPInThisSNAPL( aCmManagerExt, InternetSNAPID );
+    return GetBestIAPInThisSNAPL( aCmManager, InternetSNAPID );
     }
 
 
@@ -513,7 +514,7 @@
 // CIAUpdateFWSyncHandler::GetBestIAPInThisSNAPL
 // -----------------------------------------------------------------------------
 //
-TUint32 CIAUpdateFWSyncHandler::GetBestIAPInThisSNAPL( RCmManagerExt& aCmManagerExt, TUint32 aSNAPID  )
+TUint32 CIAUpdateFWSyncHandler::GetBestIAPInThisSNAPL( RCmManager& aCmManager, TUint32 aSNAPID  )
     {
     //get all usable IAPs
     TConnMonIapInfoBuf iapInfo;
@@ -529,13 +530,13 @@
     
     CleanupStack::PopAndDestroy( &connMon ); 
     
-    RCmDestinationExt dest = aCmManagerExt.DestinationL( aSNAPID );
+    RCmDestination dest = aCmManager.DestinationL( aSNAPID );
     CleanupClosePushL( dest );
     
     // Check whether the SNAP contains any IAP.
     for  (TInt i = 0; i < dest.ConnectionMethodCount(); i++ )
         {
-        RCmConnectionMethodExt cm =  dest.ConnectionMethodL( i );
+        RCmConnectionMethod cm =  dest.ConnectionMethodL( i );
         CleanupClosePushL( cm );
         
         TUint32 iapid= cm.GetIntAttributeL( CMManager::ECmIapId );
--- a/iaupdate/IAD/firmwareupdate/src/iaupdatefwupdatehandler.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/firmwareupdate/src/iaupdatefwupdatehandler.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -136,24 +136,7 @@
         {
         case ENSU:
             {          
-            /*HBufC* text1 = StringLoader::LoadLC( R_IAUPDATE_INFO_NSU_1 );  
-            HBufC* text2 = StringLoader::LoadLC( R_IAUPDATE_INFO_NSU_2 );
-            
-            HBufC* text = HBufC::NewLC( text1->Length() +
-                                        text2->Length() );
-                
-            text->Des() += *text1;
-            text->Des() += *text2;
-
-            HBufC* heading = StringLoader::LoadLC( R_IAUPDATE_NEW_SW_TITLE );
-     
-            ShowDialogL( *text, *heading );
-            
-            CleanupStack::PopAndDestroy( heading ); //text, heading
-            CleanupStack::PopAndDestroy( text );
-            CleanupStack::PopAndDestroy( text2 );
-            CleanupStack::PopAndDestroy( text1 );*/
-          
+                      
             break;
             }
         case EFOTA:
@@ -172,7 +155,7 @@
                 if ( ( fotamodelstate != RFotaEngineSession::EDownloadComplete ) && ( fotamodelstate != RFotaEngineSession::EStartingUpdate ) )
                     {
 		                //if download is suspended, try to resume it.
-		                if ( fotamodelstate == RFotaEngineSession::EDownloadProgressingWithResume)
+		                if ( fotamodelstate == RFotaEngineSession::EDownloadProgressing)
 		                    {
 		                    TInt result = iFotaModel->TryResumeFwUpdDownload();
 						            FLOG_NUM( "[IAUPDATEFW] TryResumeFwUpdDownload result  = %d", result );   
@@ -229,14 +212,7 @@
 //
 void CIAUpdateFWUpdateHandler::ShowDialogL(TDesC& /*aText*/, TDesC& /*aHeading*/ )
     {  
-    //CAknMessageQueryDialog* dlg = CAknMessageQueryDialog::NewL( aText );
-
-    //dlg->PrepareLC( R_IAUPDATE_MESSAGE_QUERY );
-
-    //CAknPopupHeadingPane* headingPane = dlg->Heading();
-    //headingPane->SetTextL( aHeading );
-	    
-    //TInt ret = dlg->RunLD();
+    
     }
         
 
--- a/iaupdate/IAD/ui/iaupdate.pro	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/iaupdate.pro	Thu Jul 22 16:35:01 2010 +0100
@@ -45,12 +45,10 @@
     iaupdateapplication.cpp \
     iaupdatemainwindow.cpp \
     iaupdatemainview.cpp \
-    iaupdatehistoryview.cpp \
     iaupdateengine.cpp \
     iaupdateagreement.cpp \
     iaupdateautomaticcheck.cpp \
     iaupdatedeputils.cpp \ 
-    iaupdatefirsttimedatefile.cpp \
     iaupdatefirsttimeinfo.cpp \
     iaupdategloballockhandler.cpp \
     iaupdateinstallationlistener.cpp \
@@ -67,12 +65,14 @@
     iaupdatewaitdialog.cpp \
     iaupdatenodeid.cpp \
     iaupdatetools.cpp \
-    iaupdateresultsdialog.cpp
+    iaupdatesettingdialog.cpp \
+    iaupdateresultsdialog.cpp \
+    iaupdatedialogutil.cpp
+
     
 
 HEADERS = iaupdateapplication.h \
     iaupdatemainwindow.h \
-    iaupdatehistoryview.h \
     iaupdatemainview.h \
     iaupdateengine.h \
     iaupdatewaitdialog.h \
@@ -81,7 +81,6 @@
     iaupdateautomaticcheck.h \
     iaupdatedeputils.h \
     iaupdatefileconsts.h \
-    iaupdatefirsttimedatefile.h \
     iaupdatefirsttimeinfo.h \
     iaupdategloballockhandler.h \
     iaupdateinstallationlistener.h \
@@ -107,7 +106,9 @@
     iaupdateserviceprovider.h \
     iaupdatenodeid.h \
     iaupdatetools.h \
-    iaupdateresultsdialog.h 
+    iaupdatesettingdialog.h \
+    iaupdateresultsdialog.h \ 
+    iaupdatedialogutil.h
 
 
 LIBS += -lbafl
@@ -131,6 +132,7 @@
 LIBS += -lapparc
 LIBS += -lapgrfx
 LIBS += -lstarterclient
+LIBS += -lcmapplsettingsui
 
 
 
--- a/iaupdate/IAD/ui/iaupdate_mainview.docml	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/iaupdate_mainview.docml	Thu Jul 22 16:35:01 2010 +0100
@@ -15,8 +15,8 @@
                 <sizehint height="16.41791091514448un" type="PREFERRED" width="38.80597125397785un"/>
             </widget>
             <zvalue value="0.0"/>
-            <layout type="grid">
-                <griditem column="0" itemname="listWidget" row="0"/>
+            <layout orientation="Vertical" type="linear">
+                 <linearitem itemname="listWidget"/>
             </layout>
         </widget>
         <widget name="viewMenu" role="HbView:menu" type="HbMenu">
--- a/iaupdate/IAD/ui/inc/iaupdate.hrh	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/inc/iaupdate.hrh	Thu Jul 22 16:35:01 2010 +0100
@@ -14,35 +14,13 @@
 * Description:    
 *
 */
-
-
-
 #ifndef __IAUPDATE_HRH__
 #define __IAUPDATE_HRH__
 
-/** iaupdate enumerate command codes */
-enum TIAUpdateCommandId
-    {
-    EIAUpdateCmdDummy = 0x6000,
-    EIAUpdateCmdStartUpdate,
-    EIAUpdateCmdUpdateWithPC,
-    EIAUpdateCmdUpdateDetails,
-    EIAUpdateCmdMarkedUpdateDetails,
-    EIAUpdateCmdUpdateHistory,
-    EIAUpdateCmdSettings,
-    EIAUpdateCmdDisclaimer,
-    EIAUpdateCmdHistoryViewExit,
-    EIAUpdateSoftkeyNow,
-    EIAUpdateSoftkeyLater
-    };
-    
+
 
-/** IAUpdate views */
-enum TIAUpdateViewId 
-    {
-    EIAUpdateMainViewId = 0,
-    EIAUpdateHistoryViewId
-    };
+
+
 
 enum TIAUpdateSettingDialog 
     {
--- a/iaupdate/IAD/ui/inc/iaupdateagreement.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/inc/iaupdateagreement.h	Thu Jul 22 16:35:01 2010 +0100
@@ -62,12 +62,7 @@
     * @return True value if agreement accepted 
     */
     TBool AcceptAgreementL();
-    
-    /**
-    * Shows Nokia agreement of Application Update 
-    */
-    void ShowAgreementL();
-    
+        
     /**
     * Is Nokia agreement of Application Update accepted by an user
     *
@@ -89,13 +84,7 @@
      */
     void ConstructL();
     
-    /**
-    * Shows agreement dialog
-    * 
-     */
-    HbAction* ShowDialogL( HbAction *primaryAction, HbAction *secondaryAction );
-    
-    
+       
 private: //data
     
     };
--- a/iaupdate/IAD/ui/inc/iaupdateapplication.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/inc/iaupdateapplication.h	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -20,7 +20,7 @@
 #define IAUPDATEAPPLICATION_H_
 
 #include <QSharedPointer>
-#include <HbApplication.h>
+#include <hbapplication.h>
 
 // forward declarations
 class IAUpdateEngine;
--- a/iaupdate/IAD/ui/inc/iaupdateautomaticcheck.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/inc/iaupdateautomaticcheck.h	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 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"
@@ -22,13 +22,17 @@
 
 // INCLUDES
 #include <e32base.h>
+#include "iaupdatedialogobserver.h"
 
+class HbAction;
+class IAUpdateDialogUtil;
 // CLASS DECLARATION
 /**
 *
 */
 
-class CIAUpdateAutomaticCheck : public CBase
+class CIAUpdateAutomaticCheck : public CBase,
+                                public IAUpdateDialogObserver
     {
 public:
 
@@ -59,7 +63,7 @@
     * @return True value if automatic update connections are allowed, EFalse if not allowed.
     *         Returns always true if this function is called after first time
     */
-    TBool AcceptAutomaticCheckL();
+    void AcceptAutomaticCheckL();
     
     TBool AutoUpdateCheckEnabledL();
         
@@ -79,10 +83,15 @@
     * Enables automatic updates cheks
     */
     void EnableAutoUpdateCheckL( TBool aEnable );
+
+private: // From IAUpdateDialogObserver     
+         
+     void dialogFinished(HbAction *action);       
     
         
 private: //data
-    
+    IAUpdateDialogUtil *mDialogUtil;
+    HbAction *mPrimaryAction;
     };
 
 
--- a/iaupdate/IAD/ui/inc/iaupdatedeputils.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/inc/iaupdatedeputils.h	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -25,7 +25,6 @@
 
 // FORWARD DECLARATIONS
 class MIAUpdateNode;
-class MIAUpdateAnyNode;
 
 // CLASS DECLARATION
 /**
@@ -43,7 +42,7 @@
     * @param aDependencyNodes List of dependencies (to be marked). 
     */ 
     static void GetDependenciesL( const MIAUpdateNode& aNode, 
-                                  const RPointerArray<MIAUpdateAnyNode>& aAllNodes, 
+                                  const RPointerArray<MIAUpdateNode>& aAllNodes, 
                                   RPointerArray<MIAUpdateNode>& aDependencyNodes );
      
     /**
@@ -54,7 +53,7 @@
     * @param aDependencyNodes List of dependendants (to be unmarked). 
     */
     static void GetDependantsL( const MIAUpdateNode& aNode, 
-                                const RPointerArray<MIAUpdateAnyNode>& aAllNodes, 
+                                const RPointerArray<MIAUpdateNode>& aAllNodes, 
                                 RPointerArray<MIAUpdateNode>& aDependantNodes );
     
     };
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/ui/inc/iaupdatedialogobserver.h	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2010 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:   This file contains the header file of the 
+*                IAUpdateDialogObserver class.
+*
+*/
+
+
+
+#ifndef IAUPDATEDIALOGOBSERVER_H
+#define IAUPDATEDIALOGOBSERVER_H
+
+//  INCLUDES
+
+class HbAction;
+
+
+
+class IAUpdateDialogObserver
+{
+    public:
+   
+    
+    virtual void dialogFinished(HbAction *action) = 0;   
+};
+
+
+#endif // IAUPDATEDIALOGOBSERVER_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/ui/inc/iaupdatedialogutil.h	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2010 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:   This file contains the header file of the IAUpdateDialogUtil class 
+*
+*/
+
+
+
+#ifndef IAUPDATEDIALOGUTIL_H
+#define IAUPDATEDIALOGUTIL_H
+
+#include <QtCore/qmetaobject.h>
+#include <QObject>
+#include <HbAction>
+
+class IAUpdateDialogObserver;
+
+
+class IAUpdateDialogUtil : public QObject
+{
+    Q_OBJECT
+    
+    public:
+            
+    IAUpdateDialogUtil(QObject *parent, IAUpdateDialogObserver *observer = NULL);
+    ~IAUpdateDialogUtil();
+
+    void showInformation(const QString &text, HbAction *primaryAction);
+    
+    void showQuestion(const QString &text, HbAction *primaryAction, HbAction *secondaryAction);
+    
+    void showAgreement(HbAction *primaryAction, HbAction *secondaryAction = NULL);  
+    
+    public slots:
+
+    void finished(HbAction *action);
+    
+    
+    private:
+    
+        
+    private:
+    
+    IAUpdateDialogObserver* mObserver; //not owned
+    
+};
+
+#endif  // IAUPDATEDIALOGUTIL_H
+            
+// End of File
--- a/iaupdate/IAD/ui/inc/iaupdateengine.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/inc/iaupdateengine.h	Thu Jul 22 16:35:01 2010 +0100
@@ -30,11 +30,14 @@
 class CIAUpdateFWUpdateHandler;
 class CIAUpdateParameters;
 class CIAUpdateGlobalLockHandler;
+class CIAUpdateAutomaticCheck;
 class MIAUpdateNode;
 class MIAUpdateFwNode;
 class CEikonEnv;
-class RCmManagerExt;
+class RCmManager;
 class CIdle;
+class HbAction;
+class IAUpdateResultsDialog;
 
 class IAUpdateEngine : public QObject,
                        public MIAUpdateUiControllerObserver
@@ -45,7 +48,7 @@
     IAUpdateEngine(QObject *parent = 0);
     ~IAUpdateEngine();
     
-    void StartedByLauncherL( TBool aRefreshFromNetworkDenied );
+    void StartedByLauncherL( bool aRefreshFromNetworkDenied );
      
      /**
       * When the update check operation is started through
@@ -57,7 +60,7 @@
       */
      void CheckUpdatesRequestL( int wgid, 
                                 CIAUpdateParameters* aFilterParams, 
-                                TBool aForcedRefresh );
+                                bool aForcedRefresh );
 
      /**
       * When the show update operation is started through
@@ -78,31 +81,30 @@
       * completed.
       * @param aUid  Uid of the caller of the request
       */
-     void ShowUpdateQueryRequestL( int wgid, TUint aUid );
+     void ShowUpdateQueryRequestL( int wgid, uint aUid );
      
      
-     void StartUpdate( TBool aFirmwareUpdate );
+     void StartUpdate( bool aFirmwareUpdate );
      /**
       * Set this application visible/unvisible
       * @param aVisible If EFalse application is put background and is hidden in FSW 
       */
-      void SetVisibleL( TBool aVisible );
+      void SetVisibleL( bool aVisible );
       
       /**
       * Set window group id of client application 
       *
       * @param aWgId Window group id
       */
-      void SetClientWgId( TInt aWgId );
+      void SetClientWgId( int aWgId );
           
       /**
       * Is client application in background
       *
       * @param True value if client application is in background
       */
-      TInt ClientInBackgroundL() const;
+      bool ClientInBackgroundL() const;
     
-      //void refresh(int error);
 signals:
     void toMainView();
     
@@ -114,10 +116,11 @@
                  const RPointerArray<MIAUpdateFwNode>& fwNodes,
                  int error);
     
-    void toHistoryView();
 
 public slots:    
     void handleAllClientsClosed();    
+
+    void dialogFinished(HbAction* action);
   
 
 private: // From MIAUpdateUiControllerObserver   
@@ -147,6 +150,13 @@
     * @param aError Error code
     */      
     void HandleLeaveErrorWithoutLeave( TInt aError );
+    
+    /**
+    Called when UI to be redrawn during update process
+    *
+    * @param aError Error code
+    */
+    void RefreshUI();
             
     /**
     * Called when async update list refresh is completed
@@ -168,19 +178,16 @@
     * Show results dialog of update
     */ 
     void ShowResultsDialogL();
-        
-    /**
-    * Starts CIdle. Results dialog is shown in callback function. 
-    */ 
-    void ShowResultsDialogDeferredL();
     
     
+    void ShowRebootDialogL();
+           
     /**
     * Informs an observer that its async request is completed 
     *
     * @param aError  Error code 
     */ 
-    void InformRequestObserver( TInt aError );
+    void InformRequestObserver( int aError );
     
     /**
      * Sets the default connection method used for network access.
@@ -194,47 +201,37 @@
      * @note Leaves with KErrNotFound if connection method was not
      * set in the repocitory.
      */
-    void SetDefaultConnectionMethodL( TBool aTotalSilent );   
+    void SetDefaultConnectionMethodL( bool aTotalSilent );   
     
      /**
      * Choose a usable IAP from all SNAPs
      *
-     * @param aCmManagerExt handle of connection manager
+     * @param aCmManager handle of connection manager
      */  
-    TUint32 GetBestIAPInAllSNAPsL( RCmManagerExt& aCmManagerExt  );
+    uint GetBestIAPInAllSNAPsL( RCmManager& aCmManager );
         
      /**
      * Choose a usable IAP from Internet SNAP
      *
-     * @param aCmManagerExt handle of connection manager
+     * @param aCmManager handle of connection manager
      */
-    TUint32 GetBestIAPInInternetSNAPL( RCmManagerExt& aCmManagerExt  );
+    uint GetBestIAPInInternetSNAPL( RCmManager& aCmManager );
 
      /**
      * Choose the best IAP under the given SNAP
      *
-     * @param aCmManagerExt handle of connection manager
+     * @param aCmManager handle of connection manager
      * @param aSNAP SNAP ID
      */  
-     TUint32 GetBestIAPInThisSNAPL( RCmManagerExt& aCmManagerExt, TUint32 aSNAP = 0);
+     uint GetBestIAPInThisSNAPL( RCmManager& aCmManager, uint aSNAP = 0);
      
      /**
      * Shows update query dialog (now/later) 
      */ 
      void ShowUpdateQueryL();
 
-     void HideApplicationInFSWL( TBool aHide ) const;
-     
-     /**
-     * CIdle callback function, that shows status dialog
-     * To be used to guarantee that possible old status dialog is totally 
-     * removed by AVKON before showing new one  
-     *
-     * @param aPtr  Pointer to this instance
-     */ 
-     static TInt ShowResultsDialogCallbackL( TAny* aPtr );
-     
-     
+     void HideApplicationInFSWL( bool aHide ) const;
+               
      /**
      * CIdle callback function, that shows update query dialog
      * To be used because a client to be informed immediately that its 
@@ -250,31 +247,44 @@
      * @param aPtr  Pointer to this instance
      */
      static TInt AutomaticCheckCallbackL( TAny* aPtr );
-         
+     
+     bool DoPossibleApplicationClose();
+ 
+   
+
+private:
      
+    enum DialogState
+        {
+        NoDialog,
+        Results,
+        RebootQuery,
+        ShowUpdateQuery
+        };
+     
+    IAUpdateServiceProvider *mServiceProvider;
+    IAUpdateResultsDialog* mResultsDialog;
     
-public: //temp
-//private:
-    IAUpdateServiceProvider *mServiceProvider;
-    
-private:
     CIAUpdateUiController* iController;
     CIAUpdateFWUpdateHandler* iFwUpdateHandler;
     CIAUpdateGlobalLockHandler* iGlobalLockHandler;
+    CIAUpdateAutomaticCheck* iAutomaticCheck;
     CEikonEnv* iEikEnv; //not owned
     CIdle* iIdle;
     CIdle* iIdleAutCheck;
     
-    IAUpdateUiDefines::TIAUpdateUiRequestType iRequestType;
-    TBool iUpdateNow;
+    
+    IAUpdateUiDefines::TIAUpdateUiRequestType mRequestType;
+    bool mUpdateNow;
     RArray<TUint32> iDestIdArray;
-    TBool iRequestIssued;
-    TBool iStartedFromApplication;
-    TBool iUiRefreshAllowed;
-    TUint iUpdatequeryUid;
-    TInt iWgId;
-  
-    
+    bool mRequestIssued;
+    bool mStartedFromApplication;
+    bool mUiRefreshAllowed;
+    uint mUpdatequeryUid;
+    int mWgId;
+    DialogState mDialogState;
+    HbAction *mPrimaryAction;
+    HbAction *mSecondaryAction;
     };
 
 #endif /* IAUPDATEENGINE_H_ */
--- a/iaupdate/IAD/ui/inc/iaupdatefirsttimedatefile.h	Tue Jun 15 13:36:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-/*
-* Copyright (c) 2008 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:   Header file of CIAUpdateFirstTimeDateFile class
-*
-*/
-
-
-
-
-
-
-#ifndef IA_UPDATE_FIRSTTIMEDATE_FILE_H
-#define IA_UPDATE_FIRSTTIMEDATE_FILE_H
-
-#include <e32std.h>
-#include <s32strm.h>
-#include <e32cmn.h>
-#include <f32file.h>
-#include <e32const.h>
-
-
-/**
- *
- */
-class CIAUpdateFirstTimeDateFile : public CBase
-    {
-
-public:
-
-    static CIAUpdateFirstTimeDateFile* NewL( const TDesC& aFile );
-
-    static CIAUpdateFirstTimeDateFile* NewLC( const TDesC& aFile );
-    
-    
-    ~CIAUpdateFirstTimeDateFile();
-
-
-    TBool ReadDataL();
-
-    void WriteDataL();
-    
-    const TTime& FirstTime() const;
-    
-    void SetCurrentFirstTime();
-     
-
-private:
-
-    // Prevent these if not implemented
-    CIAUpdateFirstTimeDateFile( const CIAUpdateFirstTimeDateFile& aObject );
-    CIAUpdateFirstTimeDateFile& operator =( const CIAUpdateFirstTimeDateFile& aObject );
-
-
-    CIAUpdateFirstTimeDateFile();
-    
-    virtual void ConstructL( const TDesC& aFile );
-
-
-    void InternalizeL( RReadStream& aStream );
-
-    void ExternalizeL( RWriteStream& aStream );
-
-
-private: // data
-
-	// file server session
-	RFs iFsSession;
-	
-	// file path
-	TFileName iPath;
-
-
-    // Time when IAD started first time
-    TTime iFirstTime;
-
-    };
-		
-#endif // IA_UPDATE_FIRSTTIMEDATE_FILE_H
-
--- a/iaupdate/IAD/ui/inc/iaupdatefirsttimeinfo.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/inc/iaupdatefirsttimeinfo.h	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 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"
@@ -62,22 +62,12 @@
     * Set Nokia agreement as accepted by an user
     */
     void SetAgreementAcceptedL();
-    
-    /**
-    * Set Nokia agreement as asked (prompted) to an user
-    */
-    void SetAgreementAskedL();
-        
+          
     /**
     * Set automatic update checks as asked (prompted) to an user
     */
     void SetAutomaticUpdatesAskedL();
-    
-    /**
-    * Time stamp of first check updates form application is stored
-    */
-    void SetFirstTimeIfNotSetL();
-    
+            
     /**
     * Is Nokia agreement of Application Update accepted by an user
     *
@@ -86,27 +76,13 @@
     TBool AgreementAcceptedL();
     
     /**
-    * Is Nokia agreement of Application Update already asked 
-    *
-    * @return True value if agreement already asked 
-    */
-    TBool AgreementAskedL();
-    
-    /**
     * Is activation for automatic update cheks from network already asked 
     *
     * @return True value if agreement already asked 
     */
     TBool AutomaticUpdateChecksAskedL();  
         
-    /**
-    * There is a delay (eg. 2 weeks) after first check updates request from an application
-    * when update check is not performed. This method checks is update check delayed. 
-    *
-    * @return True value if agreement accepted 
-    */
-    TBool FirstTimeDelayL();
-
+ 
 private:
 
     /**
@@ -135,8 +111,6 @@
 	
 	TBool iAgreementAccepted;
 	
-	TBool iAgreementAsked;
-	
 	TBool iAutomaticUpdateChecksAsked;   
    
     };
--- a/iaupdate/IAD/ui/inc/iaupdatehistoryview.h	Tue Jun 15 13:36:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-/*
-* 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:   This file contains the header file of the IAUpdateHistoryView
-*                class 
-*
-*/
-
-#ifndef IAUPDATEHISTORYVIEW_H_
-#define IAUPDATEHISTORYVIEW_H_
-
-#include <HbView.h>
-
-class IAUpdateHistoryView : public HbView
-    {
-public:
-    IAUpdateHistoryView();
-    virtual ~IAUpdateHistoryView();
-    };
-
-#endif /* IAUPDATEHISTORYVIEW_H_ */
--- a/iaupdate/IAD/ui/inc/iaupdatemainview.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/inc/iaupdatemainview.h	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -19,7 +19,7 @@
 #ifndef IAUPDATEMAINVIEW_H_
 #define IAUPDATEMAINVIEW_H_
 
-#include <HbView.h>
+#include <hbview.h>
 #include <QItemSelection> 
 
 #include "iaupdatenode.h"
@@ -28,7 +28,13 @@
 
 
 class HbListWidget;
+class HbAction;
+class HbAbstractViewItem;
+class HbGroupBox;
+class HbDataForm;
 class IAUpdateEngine;
+class IAUpdateDialogUtil;
+class TIAUpdateVersion;
 
 
 class IAUpdateMainView : public HbView
@@ -42,6 +48,9 @@
     void refresh(const RPointerArray<MIAUpdateNode> &nodes,
                  const RPointerArray<MIAUpdateFwNode> &fwNodes,
                  int error);
+signals:
+    void toSettingView();
+    
 public slots:
     void handleStartUpdate();
  
@@ -49,21 +58,65 @@
  
     void handleDisclaimer();
     
-    void handleSelectionChanged(QItemSelection);
+    void handleDetails(HbAbstractViewItem *, const QPointF &);
+    
+    void handleFotaDetails(HbAbstractViewItem *, const QPointF &); 
+    
+    void handleSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
+    
+    void handleFwSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
+    
+    void dialogFinished(HbAction* action);
     
 private:
     
-    void getSelectedNodes(RPointerArray<MIAUpdateAnyNode> &selectedNodes) const;
+    bool fotaSelected() const;
     void markListItem(bool mark, int index);
-    bool getMandatoryNodes(RPointerArray<MIAUpdateAnyNode> &mandNodes) const;
-    void showUpdateCannotOmitDialog() const; 
-    bool showDependenciesFoundDialog(QString &text) const;
+    void markFotaItem(bool mark);
+    bool getMandatoryNodes(RPointerArray<MIAUpdateNode> &mandNodes) const;
+    void showUpdateCannotOmitDialog(); 
+    void showDependenciesFoundDialog(QString &text);
+    void updateSelectionsToNodeArray(MIAUpdateNode &node, bool mark);
     void updateSelectionsToList();
+    MIAUpdateNode* getApplicationNode(int index) const;
+    void showDetails(MIAUpdateAnyNode& node);
+    void constructDetailsText(MIAUpdateAnyNode &node, QString &text);
+    void versionText(const TIAUpdateVersion &version, QString &versionText);
+    void fileSizeText(int fileSize, QString &text);
+    void setImportance(MIAUpdateAnyNode *node, QString &importanceDescription);
+    void removeCurrentContentLayout();
+    void refreshFirmwareUpdates(const RPointerArray<MIAUpdateFwNode> &fwNodes);
+    void refreshFotaUpdate(MIAUpdateFwNode& fwNode);
+    void refreshNsuUpdate();
+    void refreshApplicationUpdates(const RPointerArray<MIAUpdateNode> &nodes);
+    void updateSelectionInfoInDock();
     
 private:
+    enum DialogState
+        {
+        NoDialog,
+        Dependencies,
+        CannotOmit,
+        Details
+        };
+     
     IAUpdateEngine *mEngine;
+    IAUpdateDialogUtil *mDialogUtil;
+    HbWidget *mContent;
     HbListWidget *mListView;
-    RPointerArray<MIAUpdateAnyNode> mAllNodes;
+    HbListWidget *mFwListView;
+    HbGroupBox *mApplicationUpdatesGroupBox;
+    HbGroupBox *mFwNSUGroupBox;
+    HbDataForm *mContentDataForm;
+    HbGroupBox *mSelections;
+    RPointerArray<MIAUpdateNode> mNodes;
+    RPointerArray<MIAUpdateFwNode> mFwNodes;
+    DialogState mDialogState; 
+    HbAction *mPrimaryAction;
+    MIAUpdateNode *mNode; 
+    bool mMark;
+    bool mSelectionUpdate;
+    bool mSelectionConnect;
 
 };
 
--- a/iaupdate/IAD/ui/inc/iaupdatemainwindow.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/inc/iaupdatemainwindow.h	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -19,40 +19,43 @@
 #ifndef IAUPDATEMAINWINDOW_H_
 #define IAUPDATEMAINWINDOW_H_
 
-#include <qobject>
+#include <QObject>
 #include <hbmainwindow.h>
 
 // Forward declarations
 class IAUpdateMainView;
-class IAUpdateHistoryView;
 class HbDocumentLoader;
 class MIAUpdateNode;
 class MIAUpdateFwNode;
 class IAUpdateEngine;  
+class CIAUpdateSettingDialog;
 
 class IAUpdateMainWindow : public HbMainWindow
-    {
+{
     Q_OBJECT
     
 public:
     IAUpdateMainWindow(IAUpdateEngine *engine);
     virtual ~IAUpdateMainWindow();
+    
+    IAUpdateMainView*  GetMainView();
+    CIAUpdateSettingDialog* GetSettingView();
 
 public slots:
     void toMainView();
     void refreshMainView(const RPointerArray<MIAUpdateNode>& nodes,
                          const RPointerArray<MIAUpdateFwNode>& fwNodes,
                          int error);
-    void toHistoryView();
+    void toSettingView();
 
 private:
     void addMainView(IAUpdateEngine *engine);
-    void addHistoryView();
+    void addSettingView();
     
 private:
     IAUpdateMainView *mMainView;
-    IAUpdateHistoryView *mHistoryView;
+    CIAUpdateSettingDialog *mSettingView;
     
-    };
+};
 
 #endif /* IAUPDATEMAINWINDOW */
--- a/iaupdate/IAD/ui/inc/iaupdatenodefilter.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/inc/iaupdatenodefilter.h	Thu Jul 22 16:35:01 2010 +0100
@@ -93,6 +93,16 @@
     void SetDependenciesSelectedL( MIAUpdateNode& aNode,
                         const RPointerArray<MIAUpdateNode>& aAllNodes);
     
+    void StoreNodeListL( const RPointerArray< MIAUpdateNode >& aNodes);  
+    
+    void RestoreNodeListL( RPointerArray< MIAUpdateNode >& aNodes) const;
+    
+    void SortSelectedNodesFirstL( const RPointerArray<MIAUpdateNode>& aSelectedNodes, 
+                                 RPointerArray< MIAUpdateNode >& aNodes );
+    
+    void SortThisNodeFirstL( const MIAUpdateNode* aFirstNode, RPointerArray< MIAUpdateNode >& aNodes);
+
+    
 private:
 
     CIAUpdateNodeFilter();
@@ -135,6 +145,8 @@
     TBool iDmSupportAsked;
     
     TBool iDmSupport;
+    
+    RPointerArray< MIAUpdateNode > iStoredNodes;
 
     };
 
--- a/iaupdate/IAD/ui/inc/iaupdateresultsdialog.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/inc/iaupdateresultsdialog.h	Thu Jul 22 16:35:01 2010 +0100
@@ -33,7 +33,7 @@
     IAUpdateResultsDialog(QObject *parent = 0);
     ~IAUpdateResultsDialog();
     
-    void showResults(const TIAUpdateResultsInfo &param);
+    void showResults( const TIAUpdateResultsInfo &param, QObject* receiver, const char* member );
    
 private:
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/ui/inc/iaupdatesettingdialog.h	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2010-2011 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:   CIAUpdateSettingDialog
+*
+*/
+
+#ifndef ACTION_H_
+#define ACTION_H_
+
+#include <hbview.h>
+#include <hblineedit.h>
+#include <hblistwidget.h>
+#include <hblabel.h>
+#include <hbdataform.h>
+#include <hbdataformmodel.h>
+
+// Access point selection
+#include <cmmanager.h>
+
+// Destination query dialog
+#include "cmapplsettingsui.h"
+
+class CIAUpdateSettingDialog : public HbView
+{
+    Q_OBJECT
+
+public:
+    explicit CIAUpdateSettingDialog(QGraphicsItem *parent=0);
+    virtual ~CIAUpdateSettingDialog();
+    
+public slots:
+    
+private slots:
+     void toggleChange(QModelIndex startIn, QModelIndex endIn);
+     void showResults(uint retval);
+     void showPreviousView(); 
+     void activated(const QModelIndex& index);
+     
+signals:
+         void toMainView();
+    
+private:
+     
+     void queryDestination();
+     
+     void saveSettingsL();
+     
+     void initializeView();
+     
+     uint getInternetSnapIdL();
+     
+     void getDestinationNameL( uint aItemUid, QString& aItemName );
+     
+     void initializeFieldsL();
+     
+    // Form & model    
+    HbDataForm* mSettingsForm;
+    HbDataFormModel *mModel;
+    
+    
+    // settings ui
+    CmApplSettingsUi* mApplSett;
+    CmApplSettingsUi::SettingSelection mSelection;
+
+    // Form items
+    HbDataFormModelItem *mAutoUpdateItem;
+    HbDataFormModelItem *mDestinationItem;
+    
+    // currently selected destination
+    QString mCurrentDest;
+    
+    // NW connection flags
+    bool mSetByNwQuery; // destination set by query / user
+    bool mConnected;    // already connected to query ?
+    bool mInitialized;  // connection initialized ?
+    
+    //TInt mAccessPointId;
+    
+    // Connection manager
+    RCmManager mCmManager;
+    
+    // for back key catching
+    HbAction*                   mBackKey;
+    
+    
+
+};
+
+#endif /* ACTION_H_ */
--- a/iaupdate/IAD/ui/inc/iaupdateuicontroller.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/inc/iaupdateuicontroller.h	Thu Jul 22 16:35:01 2010 +0100
@@ -28,6 +28,7 @@
 #include "iaupdatecontrollerobserver.h"
 #include "iaupdatenodeobserver.h"
 #include "iaupdatewaitdialogobserver.h"
+#include "iaupdatedialogobserver.h"
 #include "iaupdatestarterobserver.h"
 #include "iaupdateroaminghandlerobserver.h"
 #include "iaupdaterefreshobserver.h"
@@ -48,10 +49,12 @@
 class MIAUpdateHistory;
 class MIAUpdateFwNode;
 class IAUpdateWaitDialog;
+class IAUpdateDialogUtil;
 
 class QString;
 class CIAUpdateNodeId;
 class CEikonEnv;
+class HbAction;
 
 
 // CLASS DECLARATION
@@ -66,7 +69,8 @@
     public MIAUpdateWaitDialogObserver,
     public MIAUpdateStarterObserver,
     public MIAUpdateRoamingHandlerObserver,
-    public MIAUpdateRefreshObserver
+    public MIAUpdateRefreshObserver,
+    public IAUpdateDialogObserver
     {
            
 public: //new functions
@@ -238,6 +242,13 @@
     TBool ForcedRefresh() const;
       
     void SetForcedRefresh( TBool aForcedRefresh );
+    
+    /**
+     *  Set node list to normal state after update. 
+     */
+    void RefreshNodeList();
+    
+    
     /**
      * Is client role "testing"
      *
@@ -330,6 +341,10 @@
      * This is called when the dialog is  closed.
      */
      void HandleWaitDialogCancel();   
+     
+private: // From IAUpdateDialogObserver     
+         
+     void dialogFinished(HbAction *action);   
     
 
 private: // From MIAUpdateRefreshObserver   
@@ -354,6 +369,8 @@
 
 
 private: // new functions
+    
+    void AgreementHandledL();
 
     /**
      * Called when refreshing updates list is completed.
@@ -546,6 +563,14 @@
         ESelfUpdating
         };
 
+    enum TDialogState
+        {
+        ENoDialog,
+        EAgreement,
+        EInsufficientMemory  
+        };
+    
+    
     MIAUpdateUiControllerObserver& iObserver;
 
     MIAUpdateController* iController;
@@ -559,6 +584,8 @@
     RPointerArray<CIAUpdateNodeId> iPreviousSelections;
     
     RPointerArray<MIAUpdateNode> iServicePackNodes;
+    
+    IAUpdateDialogUtil *mDialogUtil;  
  
     IAUpdateWaitDialog *mWaitDialog;
     
@@ -586,6 +613,8 @@
     
     TState iState;
     
+    TDialogState iDialogState;
+    
     TBool iClosingAllowedByClient;
     
     CIAUpdateUiConfigData* iConfigData;
@@ -605,6 +634,8 @@
     TBool iForcedRefresh;
         
     TBool iTestRole;
+    
+    HbAction *mPrimaryAction;
 
     };
 
--- a/iaupdate/IAD/ui/inc/iaupdateuicontrollerobserver.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/inc/iaupdateuicontrollerobserver.h	Thu Jul 22 16:35:01 2010 +0100
@@ -49,6 +49,13 @@
     virtual void HandleLeaveErrorWithoutLeave( TInt aError ) = 0;
     
     /**
+     Called when UI to be redrawn during update process
+     *
+     * @param aError Error code
+    */
+    virtual void RefreshUI() = 0;
+    
+    /**
     * Called when async update list refresh is completed
     *
     * @param aError Error code
--- a/iaupdate/IAD/ui/inc/iaupdatewaitdialogobserver.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/inc/iaupdatewaitdialogobserver.h	Thu Jul 22 16:35:01 2010 +0100
@@ -18,8 +18,8 @@
 
 
 
-#ifndef IAUPDATEDIALOGS_H
-#define IAUPDATEDIALOGS_H
+#ifndef IAUPDATE_WAITDIALOG_OBSERVER_H
+#define IAUPDATE_WAITDIALOG_OBSERVER_H
 
 //  INCLUDES
 #include <e32base.h>
@@ -42,6 +42,6 @@
     };
 
 
-#endif // IAUPDATEDIALOGS_H
+#endif // IAUPDATE_WAITDIALOG_OBSERVER_H
             
 // End of File
--- a/iaupdate/IAD/ui/src/iaupdateagreement.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/src/iaupdateagreement.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -19,7 +19,6 @@
 
 //INCLUDES
 #include <hbaction.h>
-#include <hbdialog.h>
 #include <hbtextitem.h>
 #include <centralrepository.h>
 
@@ -102,23 +101,12 @@
         User::LeaveIfError( cenrep->Get( KIAUpdateAutoUpdateCheck, 
                                          autoUpdateCheckValue ) );
         CleanupStack::PopAndDestroy( cenrep );
-        autoUpdateCheckValue = EIAUpdateSettingValueDisable; //temp to test dialog
         if ( autoUpdateCheckValue == EIAUpdateSettingValueDisableWhenRoaming ||
              autoUpdateCheckValue ==  EIAUpdateSettingValueEnable  ) 
             {
             accepted = ETrue;
             firstTimeInfo->SetAgreementAcceptedL();
             }
-        else  
-            {
-     	    HbAction *primaryAction = new HbAction("Accept");
-     	    HbAction *secondaryAction = new HbAction("Decline");
-     	    if ( ShowDialogL( primaryAction, secondaryAction ) == primaryAction)
-     	        {
-     	        accepted = ETrue;
-     	        firstTimeInfo->SetAgreementAcceptedL();
-                }
-            }
         }
     CleanupStack::PopAndDestroy( firstTimeInfo );
     return accepted;
@@ -138,20 +126,6 @@
 
 
 
-
-
-// ---------------------------------------------------------------------------
-// CIAUpdateAgreement::ShowAgreementL
-// 
-// ---------------------------------------------------------------------------
-//
-void CIAUpdateAgreement::ShowAgreementL()
-    {
-    HbAction *primaryAction = new HbAction("OK");
-    ShowDialogL( primaryAction, NULL );	
-    delete primaryAction;
-    }
-
 // ---------------------------------------------------------------------------
 // CIAUpdateAgreement::AgreementAcceptedL
 // 
@@ -165,36 +139,7 @@
 	return ret;
     }
     
-// ---------------------------------------------------------------------------
-// CIAUpdateAgreement::ShowDialogL
-// 
-// ---------------------------------------------------------------------------
-//
-HbAction* CIAUpdateAgreement::ShowDialogL( HbAction *primaryAction, HbAction *secondaryAction )
-    {
-    HbDialog agreementDialog;
-    HbTextItem *headingText = new HbTextItem(&agreementDialog);
-    headingText->setFontSpec(HbFontSpec(HbFontSpec::Title));
-    headingText->setText("Disclaimer");
-    agreementDialog.setHeadingWidget(headingText);
-    
-   
-    HbTextItem *text = new HbTextItem(&agreementDialog);
-    text->setFontSpec(HbFontSpec(HbFontSpec::PrimarySmall));
-    text->setText("This application allows you to download and use applications and services provided by Nokia or third parties. Service Terms and Privacy Policy will apply. Nokia will not assume any liability or responsibility for the availability or third party applications or services. Before using the third party application or service, read the applicable terms of use.\n\nUse of this application involves transmission of data. Contact your network service provider for information about data transmission charges.\n\n(c) 2007-2010 Nokia. All rights reserved.");
-    agreementDialog.setContentWidget(text);
-    
-    agreementDialog.setPrimaryAction(primaryAction);
-    
-    if ( secondaryAction )
-        {
-        agreementDialog.setSecondaryAction(secondaryAction);
-        }
-    agreementDialog.setTimeout(HbPopup::NoTimeout);
-    agreementDialog.show();
-    //return agreementDialog.exec(); 
-    return primaryAction;
-    }        
+
     
     /*HBufC* text_1 = StringLoader::LoadLC( R_IAUPDATE_AGREEMENT_DIALOG_TEXT_1 );
     HBufC* text_2 = StringLoader::LoadLC( R_IAUPDATE_AGREEMENT_DIALOG_TEXT_2 );
--- a/iaupdate/IAD/ui/src/iaupdateapplication.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/src/iaupdateapplication.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -19,6 +19,8 @@
 #include "iaupdateapplication.h"
 #include "iaupdatemainwindow.h"
 #include "iaupdateengine.h"
+#include "iaupdatemainview.h"
+#include "iaupdatesettingdialog.h"
 
 IAUpdateApplication::IAUpdateApplication(  int argc, char* argv[] ) :
     HbApplication( argc, argv ),
@@ -26,12 +28,21 @@
     mMainWindow (new IAUpdateMainWindow(mEngine))
     {
     
+    // get mainview 
+    IAUpdateMainView* mainView = mMainWindow->GetMainView();
+    
+    // get settig view
+    CIAUpdateSettingDialog* settingView = mMainWindow->GetSettingView();
+    
     // Connect view change signals to the view change slots
-    connect(&(*mEngine), SIGNAL(toMainView()), &(*mMainWindow), SLOT(toMainView()));
+    //connect(&(*mEngine), SIGNAL(toMainView()), &(*mMainWindow), SLOT(toMainView()));
+    connect(&(*settingView), SIGNAL(toMainView()), &(*mMainWindow), SLOT(toMainView()));
+    connect(&(*mainView), SIGNAL(toSettingView()), &(*mMainWindow), SLOT(toSettingView()));
     connect(&(*mEngine), SIGNAL(refresh(const RPointerArray<MIAUpdateNode>&, const RPointerArray<MIAUpdateFwNode>&,int)),
             &(*mMainWindow), SLOT(refreshMainView(const RPointerArray<MIAUpdateNode>&, const RPointerArray<MIAUpdateFwNode>&,int)));
     }
 
 IAUpdateApplication::~IAUpdateApplication()
-    {
-    }
+{
+    delete mEngine;    
+}
--- a/iaupdate/IAD/ui/src/iaupdateautomaticcheck.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/src/iaupdateautomaticcheck.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -24,10 +24,9 @@
 #include "iaupdatefirsttimeinfo.h"
 #include "iaupdate.hrh"
 #include "iaupdateprivatecrkeys.h"
+#include "iaupdatedialogutil.h"
 
-//#include <avkon.hrh>
 #include <centralrepository.h> 
-#include <hbmessagebox.h>
 #include <hbaction.h>
 
 
@@ -81,6 +80,10 @@
 //
 CIAUpdateAutomaticCheck::~CIAUpdateAutomaticCheck()
     {
+    if ( mDialogUtil )
+        {
+        delete mDialogUtil;
+        }
     }
 
 
@@ -89,9 +92,8 @@
 // 
 // ---------------------------------------------------------------------------
 //
-TBool CIAUpdateAutomaticCheck::AcceptAutomaticCheckL()
+void CIAUpdateAutomaticCheck::AcceptAutomaticCheckL()
     {
-    TBool acceptChecks = ETrue;
 	CIAUpdateFirstTimeInfo* firstTimeInfo = CIAUpdateFirstTimeInfo::NewLC();
 	if ( !firstTimeInfo->AutomaticUpdateChecksAskedL() )
 	    {
@@ -102,24 +104,21 @@
 	        }
 	    else
 	        {
-	        HbMessageBox messageBox(HbMessageBox::MessageTypeQuestion); 
-	        messageBox.setText(QString("Turn on setting for Automatic update checks?"));
-	        HbAction yesAction("Yes");
-	        HbAction noAction("No");
-	        messageBox.setPrimaryAction(&yesAction);
-	        messageBox.setSecondaryAction(&noAction);
-	        messageBox.setTimeout(HbPopup::NoTimeout);
-	        messageBox.show();
-	        //HbAction *selectedAction = messageBox.exec();
-	        firstTimeInfo->SetAutomaticUpdatesAskedL();
-	        //if ( selectedAction == messageBox.primaryAction() )
-	        //    {
-                //EnableAutoUpdateCheckL( ETrue ); // TEMP
-            //    }
-	        }
+	        if ( !mDialogUtil )
+	            {
+	        	mDialogUtil = new IAUpdateDialogUtil(NULL, this);
+	            }
+	        if ( mDialogUtil )
+	            {
+	            mPrimaryAction = NULL;
+	            mPrimaryAction = new HbAction("Yes");
+	            HbAction *secondaryAction = NULL;
+	            secondaryAction = new HbAction("No");
+	            mDialogUtil->showQuestion(QString("Turn on setting for Automatic update checks?"), mPrimaryAction, secondaryAction);
+	            }
+ 	        }
 	    }
 	CleanupStack::PopAndDestroy( firstTimeInfo ); 
-    return acceptChecks;
     }
 
 // ---------------------------------------------------------------------------
@@ -173,5 +172,19 @@
     CleanupStack::PopAndDestroy( cenrep );
     }
 
-    
+// ---------------------------------------------------------------------------
+// CIAUpdateAutomaticCheck::dialogFinished
+// 
+// ---------------------------------------------------------------------------
+//
+void CIAUpdateAutomaticCheck::dialogFinished(HbAction *action)
+    {
+    if ( action == mPrimaryAction )
+        {
+        EnableAutoUpdateCheckL( ETrue ); 
+        }
+    CIAUpdateFirstTimeInfo* firstTimeInfo = CIAUpdateFirstTimeInfo::NewLC();
+    firstTimeInfo->SetAutomaticUpdatesAskedL();
+    CleanupStack::PopAndDestroy( firstTimeInfo );
+    }
 // End of File  
--- a/iaupdate/IAD/ui/src/iaupdatedeputils.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/src/iaupdatedeputils.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -21,7 +21,6 @@
 // INCLUDES
 #include "iaupdatedeputils.h"
 #include "iaupdatebasenode.h"
-#include "iaupdateanynode.h"
 #include "iaupdatenode.h"
 
 
@@ -31,7 +30,7 @@
 // ---------------------------------------------------------------------------
 //
 void IAUpdateDepUtils::GetDependenciesL( const MIAUpdateNode& aNode,
-                                         const RPointerArray<MIAUpdateAnyNode>& aAllNodes,  
+                                         const RPointerArray<MIAUpdateNode>& aAllNodes,  
                                          RPointerArray<MIAUpdateNode>& aDependencyNodes ) 
     {
     RPointerArray<MIAUpdateNode> dependencies;
@@ -81,7 +80,7 @@
 // ---------------------------------------------------------------------------
 //    
 void IAUpdateDepUtils::GetDependantsL( const MIAUpdateNode& aNode, 
-                                       const RPointerArray<MIAUpdateAnyNode>& aAllNodes,  
+                                       const RPointerArray<MIAUpdateNode>& aAllNodes,  
                                        RPointerArray<MIAUpdateNode>& aDependantNodes ) 
     {
     RPointerArray<MIAUpdateNode> dependants;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/ui/src/iaupdatedialogutil.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,124 @@
+/*
+* Copyright (c) 2010 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:   This module contains the implementation of IAUpdateDialogUtil class 
+*                member functions.
+*
+*/
+#include <hblabel.h>
+#include <hbmessagebox.h>
+
+#include "iaupdatedialogutil.h"
+#include "iaupdatedialogobserver.h"
+#include "iaupdatedebug.h"
+
+
+
+IAUpdateDialogUtil::IAUpdateDialogUtil(QObject *parent, IAUpdateDialogObserver *observer)
+: QObject(parent),
+  mObserver(observer)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateDialogUtil::IAUpdateDialogUtil()");
+}
+
+IAUpdateDialogUtil::~IAUpdateDialogUtil()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateDialogUtil::~IAUpdateDialogUtil()");
+}
+
+
+void IAUpdateDialogUtil::showInformation(const QString &text, HbAction *primaryAction)
+{    
+    HbMessageBox *messageBox = new HbMessageBox(HbMessageBox::MessageTypeInformation); 
+    messageBox->setText(text);
+    int actionCount = messageBox->actions().count();
+    for (int i=actionCount-1; i >= 0; i--)
+    { 
+        messageBox->removeAction(messageBox->actions().at(i));
+    }
+    if (primaryAction)
+    {    
+        messageBox->addAction(primaryAction);
+    }  
+    messageBox->setTimeout(HbPopup::NoTimeout); 
+    messageBox->setAttribute(Qt::WA_DeleteOnClose);
+    messageBox->open(this,SLOT(finished(HbAction*)));
+}
+
+
+void IAUpdateDialogUtil::showQuestion(const QString &text, HbAction *primaryAction, HbAction *secondaryAction)
+{
+    HbMessageBox *messageBox = new HbMessageBox(HbMessageBox::MessageTypeQuestion); 
+    messageBox->setIconVisible(false);
+    messageBox->setText(text);
+    int actionCount = messageBox->actions().count();
+    for (int i=actionCount-1; i >= 0; i--)
+    { 
+        messageBox->removeAction(messageBox->actions().at(i));
+    }
+    if (primaryAction)
+    {    
+        messageBox->addAction(primaryAction);
+    }
+    if (secondaryAction)
+    {    
+        messageBox->addAction(secondaryAction);
+    } 
+    messageBox->setTimeout(HbPopup::NoTimeout); 
+    messageBox->setAttribute(Qt::WA_DeleteOnClose);
+    messageBox->open(this,SLOT(finished(HbAction*)));
+}
+
+
+void IAUpdateDialogUtil::showAgreement(HbAction *primaryAction, HbAction *secondaryAction)
+{
+    HbMessageBox *agreementDialog = new HbMessageBox(HbMessageBox::MessageTypeQuestion); 
+    HbLabel *label = new HbLabel(agreementDialog);
+    label->setHtml(QString("Disclaimer"));
+    agreementDialog->setHeadingWidget(label);
+    agreementDialog->setIconVisible(false);
+    agreementDialog->setText("This application allows you to download and use applications and services provided by Nokia or third parties. Service Terms and Privacy Policy will apply. Nokia will not assume any liability or responsibility for the availability or third party applications or services. Before using the third party application or service, read the applicable terms of use.<br /><br />Use of this application involves transmission of data. Contact your network service provider for information about data transmission charges.<br /><br />(c) 2007-2010 Nokia. All rights reserved.");
+
+    int actionCount = agreementDialog->actions().count();
+    for (int i=actionCount-1; i >= 0; i--)
+    { 
+        agreementDialog->removeAction(agreementDialog->actions().at(i));
+    }
+    if (primaryAction)
+    {    
+        agreementDialog->addAction(primaryAction);
+    }    
+    if (secondaryAction)
+    {
+        agreementDialog->addAction(secondaryAction);
+    }
+    agreementDialog->setTimeout(HbPopup::NoTimeout);
+    agreementDialog->setAttribute(Qt::WA_DeleteOnClose);
+    agreementDialog->open(this,SLOT(finished(HbAction*)));
+}
+
+
+
+void IAUpdateDialogUtil::finished(HbAction *action)
+{
+    if (mObserver)
+    {
+        mObserver->dialogFinished(action);
+    }
+}
+
+
+
+
+
+
--- a/iaupdate/IAD/ui/src/iaupdateengine.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/src/iaupdateengine.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,28 +1,28 @@
 /*
-* Copyright (c) 2009-2010 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:   This module contains the implementation of IAUpdateEngine
-*                class member functions.
-*
-*/
+ * Copyright (c) 2009-2010 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:   This module contains the implementation of IAUpdateEngine
+ *                class member functions.
+ *
+ */
 
 #include <qapplication.h>
 #include <hbmessagebox.h>
 #include <hbaction.h>
 #include <eikenv.h>
 #include <centralrepository.h>
-#include <cmmanagerext.h>
-#include <cmdestinationext.h>
+#include <cmmanager.h>
+#include <cmdestination.h>
 #include <rconnmon.h>
 #include <apgwgnam.h>
 #include <starterclient.h>
@@ -43,34 +43,37 @@
 #include "iaupdateresultsdialog.h"
 #include "iaupdatedebug.h"
 
-
-IAUpdateEngine::IAUpdateEngine(QObject *parent)
-     : QObject(parent),
-      iController(NULL),
-      iFwUpdateHandler(NULL),
-      iGlobalLockHandler(NULL),
-      iIdle(NULL),
-      iIdleAutCheck(NULL),
-      iUpdateNow(EFalse),
-      iRequestIssued(EFalse),
-      iStartedFromApplication(EFalse),
-      iUiRefreshAllowed(ETrue),
-      iUpdatequeryUid(0)
-{
+IAUpdateEngine::IAUpdateEngine(QObject *parent) :
+    QObject(parent)
+    {
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::IAUpdateEngine() begin");
+    iController = NULL;
+    iFwUpdateHandler = NULL;
+    iGlobalLockHandler = NULL;
+    iAutomaticCheck = NULL;
+    iIdle = NULL;
+    iIdleAutCheck = NULL;
     iEikEnv = CEikonEnv::Static();
+    mUpdateNow = false;
+    mRequestIssued = false;
+    mStartedFromApplication = false;
+    mUiRefreshAllowed = true;
+    mWgId = 0;
+    mUpdatequeryUid = 0;
+    mDialogState = NoDialog;
+    mResultsDialog = NULL;
     mServiceProvider = NULL;
-    mServiceProvider = new IAUpdateServiceProvider( *this );
-    connect(mServiceProvider, SIGNAL(clientDisconnected()), this, SLOT(handleAllClientsClosed()));
+    mServiceProvider = new IAUpdateServiceProvider(*this);
+    connect(mServiceProvider, SIGNAL(clientDisconnected()), this,
+            SLOT(handleAllClientsClosed()));
     TRAP_IGNORE( iController = CIAUpdateUiController::NewL( *this ));
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::IAUpdateEngine() end");
-}
-
+    }
 
 IAUpdateEngine::~IAUpdateEngine()
-{
+    {
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::~IAUpdateEngine() begin");
-    InformRequestObserver( KErrCancel );
+    InformRequestObserver(KErrCancel);
     if (iIdle)
         {
         delete iIdle;
@@ -83,36 +86,39 @@
         {
         delete iGlobalLockHandler;
         }
-    if ( iController )
+    if (iAutomaticCheck)
+        {
+        delete iAutomaticCheck;
+        }
+    if (iController)
         {
         delete iController;
         }
-    if ( iFwUpdateHandler )
+    if (iFwUpdateHandler)
         {
         delete iFwUpdateHandler;
         }
-    if ( mServiceProvider )
+    if (mServiceProvider)
         {
         delete mServiceProvider;
         }
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::~IAUpdateEngine() end");
-}
+    }
 
 // -----------------------------------------------------------------------------
 // IAUpdateEngine::StartedByLauncherL
 // 
 // -----------------------------------------------------------------------------
 //
-void IAUpdateEngine::StartedByLauncherL( TBool aRefreshFromNetworkDenied )
+void IAUpdateEngine::StartedByLauncherL(bool aRefreshFromNetworkDenied)
     {
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::StartedByLauncherL() begin");
-    iRequestIssued = ETrue;
-    iRequestType = IAUpdateUiDefines::ENoRequest;
-    iController->SetRequestType( iRequestType );
-    SetVisibleL( ETrue );
+    mRequestIssued = true;
+    mRequestType = IAUpdateUiDefines::ENoRequest;
+    iController->SetRequestType(mRequestType);
+    SetVisibleL(true);
     CIAUpdateParameters* params = iController->ParamsReadAndRemoveFileL();
-    iController->CheckUpdatesDeferredL( params, aRefreshFromNetworkDenied );
-    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::StartedByLauncherL() end");
+    iController->CheckUpdatesDeferredL(params, aRefreshFromNetworkDenied);
     }
 
 // -----------------------------------------------------------------------------
@@ -120,33 +126,32 @@
 // 
 // -----------------------------------------------------------------------------
 //
-void IAUpdateEngine::CheckUpdatesRequestL( int wgid, 
-                                           CIAUpdateParameters* aFilterParams,
-                                           TBool aForcedRefresh )
-                                           
+void IAUpdateEngine::CheckUpdatesRequestL(int wgid,
+        CIAUpdateParameters* aFilterParams, bool aForcedRefresh)
+
     {
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::CheckUpdatesRequestL() begin");
-    SetClientWgId( wgid );
-    iRequestIssued = ETrue;
-    iStartedFromApplication  = ETrue;
-    CleanupStack::PushL( aFilterParams );
-    if ( wgid > 0 )
+    SetClientWgId(wgid);
+    mRequestIssued = true;
+    mStartedFromApplication = true;
+    CleanupStack::PushL(aFilterParams);
+    if (wgid > 0)
         {
-        HideApplicationInFSWL( ETrue );
+        HideApplicationInFSWL(true);
         }
-    CleanupStack::Pop( aFilterParams );
-    
-    if ( !aFilterParams->ShowProgress() )
+    CleanupStack::Pop(aFilterParams);
+
+    if (!aFilterParams->ShowProgress())
         {
-        iEikEnv->RootWin().SetOrdinalPosition( -1, ECoeWinPriorityNeverAtFront ); 
+        iEikEnv->RootWin().SetOrdinalPosition(-1, ECoeWinPriorityNeverAtFront);
         }
-           
-    iRequestType = IAUpdateUiDefines::ECheckUpdates; 
-    iController->SetRequestType( iRequestType );
-    iController->SetForcedRefresh( aForcedRefresh );
-    
-    iController->CheckUpdatesDeferredL( aFilterParams, EFalse ); 
-    
+
+    mRequestType = IAUpdateUiDefines::ECheckUpdates;
+    iController->SetRequestType(mRequestType);
+    iController->SetForcedRefresh(aForcedRefresh);
+
+    iController->CheckUpdatesDeferredL(aFilterParams, false);
+
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::CheckUpdatesRequestL() end");
     }
 
@@ -155,46 +160,47 @@
 // 
 // -----------------------------------------------------------------------------
 // 
-void IAUpdateEngine::ShowUpdatesRequestL( int wgid, CIAUpdateParameters* aFilterParams )
+void IAUpdateEngine::ShowUpdatesRequestL(int wgid,
+        CIAUpdateParameters* aFilterParams)
     {
-    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ShowUpdatesRequestL() begin"); 
-    SetClientWgId( wgid );
-    iRequestIssued = ETrue;
-//    delete iBackgroundTimer;
-//    iBackgroundTimer = NULL;
-    iStartedFromApplication  = ETrue;
-    CleanupStack::PushL( aFilterParams );
-    if ( wgid > 0 )
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ShowUpdatesRequestL() begin");
+    SetClientWgId(wgid);
+    mRequestIssued = true;
+    //    delete iBackgroundTimer;
+    //    iBackgroundTimer = NULL;
+    mStartedFromApplication = true;
+    CleanupStack::PushL(aFilterParams);
+    if (wgid > 0)
         {
-        HideApplicationInFSWL( ETrue );
+        HideApplicationInFSWL(true);
         }
-   
-    //StatusPane()->MakeVisible( ETrue );
-    iEikEnv->RootWin().SetOrdinalPosition( 0, ECoeWinPriorityNormal );
-    
+
+    //StatusPane()->MakeVisible( true );
+    iEikEnv->RootWin().SetOrdinalPosition(0, ECoeWinPriorityNormal);
+
     //iRequestObserver = &aObserver;
-    iRequestType = IAUpdateUiDefines::EShowUpdates;
-    iController->SetRequestType( iRequestType );
-     
+    mRequestType = IAUpdateUiDefines::EShowUpdates;
+    iController->SetRequestType(mRequestType);
 
     //if ( !iMainView )
     //    {
     //    iMainView  = CIAUpdateMainView::NewL( ClientRect() ); 
     //    AddViewL( iMainView );
     //    }
-    
-      
+
+
     // by pushing object to cleanup stack its destructor is called if leave happens
     // so global lock issued by this instance can be released in destructor of CIAUpdateGlobalLockHandler
-    CIAUpdateGlobalLockHandler* globalLockHandler = CIAUpdateGlobalLockHandler::NewLC();
-    if ( !globalLockHandler->InUseByAnotherInstanceL() )
+    CIAUpdateGlobalLockHandler* globalLockHandler =
+            CIAUpdateGlobalLockHandler::NewLC();
+    if (!globalLockHandler->InUseByAnotherInstanceL())
         {
-        globalLockHandler->SetToInUseForAnotherInstancesL( ETrue );
-        CleanupStack::Pop( globalLockHandler );
-        CleanupStack::Pop( aFilterParams );
-        CleanupStack::PushL( globalLockHandler );
-        iController->CheckUpdatesDeferredL( aFilterParams, EFalse );
-        CleanupStack::Pop( globalLockHandler ); 
+        globalLockHandler->SetToInUseForAnotherInstancesL(true);
+        CleanupStack::Pop(globalLockHandler);
+        CleanupStack::Pop(aFilterParams);
+        CleanupStack::PushL(globalLockHandler);
+        iController->CheckUpdatesDeferredL(aFilterParams, false);
+        CleanupStack::Pop(globalLockHandler);
         delete iGlobalLockHandler;
         iGlobalLockHandler = globalLockHandler;
         //now possible deletion of iGlobalLockHandler in leave situation is handled
@@ -202,42 +208,38 @@
         }
     else
         {
-        CleanupStack::PopAndDestroy( globalLockHandler );
-        CleanupStack::PopAndDestroy( aFilterParams );
+        CleanupStack::PopAndDestroy(globalLockHandler);
+        CleanupStack::PopAndDestroy(aFilterParams);
         // locked by another IAD instance, nothing else to do than just complete client's request.  
-        InformRequestObserver( KErrNone );
-        }  
+        InformRequestObserver(KErrNone);
+        }
 
-    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ShowUpdatesRequestL() end"); 
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ShowUpdatesRequestL() end");
     }
-    
 
 // -----------------------------------------------------------------------------
 // IAUpdateEngine::ShowUpdateQueryRequestL
 // 
 // -----------------------------------------------------------------------------
 //     
-void IAUpdateEngine::ShowUpdateQueryRequestL( int wgid, TUint aUid )
+void IAUpdateEngine::ShowUpdateQueryRequestL(int wgid, uint aUid)
     {
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ShowUpdateQueryRequestL begin");
-    SetClientWgId( wgid );
-    iRequestIssued = ETrue;
-    iStartedFromApplication  = ETrue;
-    iUpdatequeryUid = aUid;
-    iUpdateNow = EFalse;
-    if ( wgid > 0 )
+    SetClientWgId(wgid);
+    mRequestIssued = true;
+    mStartedFromApplication = true;
+    mUpdatequeryUid = aUid;
+    mUpdateNow = false;
+    if (wgid > 0)
         {
-        HideApplicationInFSWL( ETrue );
+        HideApplicationInFSWL(true);
         }
-    
-    //iRequestObserver = &aObserver;
-    iRequestType = IAUpdateUiDefines::EUpdateQuery;
-    
-    
+    mRequestType = IAUpdateUiDefines::EUpdateQuery;
+
     delete iIdle;
     iIdle = NULL;
-    iIdle = CIdle::NewL( CActive::EPriorityIdle ); 
-    iIdle->Start( TCallBack( UpdateQueryCallbackL, this ) ); 
+    iIdle = CIdle::NewL(CActive::EPriorityIdle);
+    iIdle->Start(TCallBack(UpdateQueryCallbackL, this));
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ShowUpdateQueryRequestL end")
     }
 
@@ -246,16 +248,16 @@
 // 
 // -----------------------------------------------------------------------------
 //
-void IAUpdateEngine::StartUpdate( TBool aFirmwareUpdate )
+void IAUpdateEngine::StartUpdate(bool aFirmwareUpdate)
     {
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::StartUpdate() begin");
-    if ( aFirmwareUpdate )
+    if (aFirmwareUpdate)
         {
-        if ( !iFwUpdateHandler )
+        if (!iFwUpdateHandler)
             {
             TRAP_IGNORE( CIAUpdateFWUpdateHandler::NewL() );
             }
-        if ( iFwUpdateHandler )
+        if (iFwUpdateHandler)
             {
             iFwUpdateHandler->FirmWareUpdatewithFOTA();
             }
@@ -264,15 +266,16 @@
         {
         // by pushing object to cleanup stack it's destructor is called if leave happens
         // so global lock issued by this instance can be released in destructor of CIAUpdateGlobalLockHandler
-        CIAUpdateGlobalLockHandler* globalLockHandler = CIAUpdateGlobalLockHandler::NewLC();
-        if ( !globalLockHandler->InUseByAnotherInstanceL() )
+        CIAUpdateGlobalLockHandler* globalLockHandler =
+                CIAUpdateGlobalLockHandler::NewLC();
+        if (!globalLockHandler->InUseByAnotherInstanceL())
             {
-            globalLockHandler->SetToInUseForAnotherInstancesL( ETrue );
+            globalLockHandler->SetToInUseForAnotherInstancesL(true);
             // No need to be totally silent since the updating is started
             // by user.
-            SetDefaultConnectionMethodL( EFalse );
+            SetDefaultConnectionMethodL(false);
             iController->StartUpdateL();
-            CleanupStack::Pop( globalLockHandler ); 
+            CleanupStack::Pop(globalLockHandler);
             delete iGlobalLockHandler;
             iGlobalLockHandler = globalLockHandler;
             //now possible deletion of iGlobalLockHandler in leave situation is handled
@@ -280,39 +283,38 @@
             }
         else
             {
-            CleanupStack::PopAndDestroy( globalLockHandler );   
+            CleanupStack::PopAndDestroy(globalLockHandler);
             }
         }
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::StartUpdate() end");
     }
 
-
 // -----------------------------------------------------------------------------
 // IAUpdateEngine::SetVisibleL
 // 
 // -----------------------------------------------------------------------------
 //  
-void IAUpdateEngine::SetVisibleL( TBool aVisible )
+void IAUpdateEngine::SetVisibleL(bool /*aVisible*/)
     {
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::SetVisibleL() begin");
-    IAUPDATE_TRACE_1("[IAUPDATE] visible: %d", aVisible );
+    //IAUPDATE_TRACE_1("[IAUPDATE] visible: %d", aVisible );
     /*if ( aVisible )
-        {
-        if ( iEikonEnv->RootWin().OrdinalPosition() != 0 || iEikonEnv->RootWin().OrdinalPriority() != ECoeWinPriorityNormal )
-            {
-            iEikonEnv->RootWin().SetOrdinalPosition( 0, ECoeWinPriorityNormal );
-            }
-        
-        StatusPane()->MakeVisible( ETrue );
-        iMainView  = CIAUpdateMainView::NewL( ClientRect() ); 
-        AddViewL( iMainView );
-        ActivateLocalViewL( TUid::Uid( EIAUpdateMainViewId ) );
-        }
-    else
-        {
-        iEikonEnv->RootWin().SetOrdinalPosition( -1, ECoeWinPriorityNeverAtFront );
-        StatusPane()->MakeVisible( EFalse );
-        }*/
+     {
+     if ( iEikonEnv->RootWin().OrdinalPosition() != 0 || iEikonEnv->RootWin().OrdinalPriority() != ECoeWinPriorityNormal )
+     {
+     iEikonEnv->RootWin().SetOrdinalPosition( 0, ECoeWinPriorityNormal );
+     }
+     
+     StatusPane()->MakeVisible( ETrue );
+     iMainView  = CIAUpdateMainView::NewL( ClientRect() ); 
+     AddViewL( iMainView );
+     ActivateLocalViewL( TUid::Uid( EIAUpdateMainViewId ) );
+     }
+     else
+     {
+     iEikonEnv->RootWin().SetOrdinalPosition( -1, ECoeWinPriorityNeverAtFront );
+     StatusPane()->MakeVisible( EFalse );
+     }*/
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::SetVisibleL() end");
     }
 
@@ -321,10 +323,10 @@
 // 
 // -----------------------------------------------------------------------------
 // 
-void IAUpdateEngine::SetClientWgId( TInt aWgId )
+void IAUpdateEngine::SetClientWgId(int aWgId)
     {
     IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateEngine::SetClientWgId() wgId %d", aWgId );
-    iWgId = aWgId;
+    mWgId = aWgId;
     }
 
 // -----------------------------------------------------------------------------
@@ -332,64 +334,130 @@
 // 
 // -----------------------------------------------------------------------------
 // 
-TInt IAUpdateEngine::ClientInBackgroundL() const
+bool IAUpdateEngine::ClientInBackgroundL() const
     {
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ClientInBackgroundL() begin");
-    TBool inBackground = EFalse;
-    if ( iWgId > 0 )
+    bool inBackground = false;
+    if (mWgId > 0)
         {
-        CArrayFixFlat<TInt>*  wgArray = new( ELeave ) CArrayFixFlat<TInt>(10);  
-        CleanupStack::PushL( wgArray );
-        User::LeaveIfError( iEikEnv->WsSession().WindowGroupList( 0, wgArray ) );  
-        TInt ownWgId = iEikEnv->RootWin().Identifier();
-        if ( ( wgArray->At( 0 ) != ownWgId ) && ( wgArray->At( 0 ) != iWgId  ) )
+        CArrayFixFlat<int>* wgArray = new (ELeave) CArrayFixFlat<int> (10);
+        CleanupStack::PushL(wgArray);
+        User::LeaveIfError(iEikEnv->WsSession().WindowGroupList(0, wgArray));
+        int ownWgId = iEikEnv->RootWin().Identifier();
+        if ((wgArray->At(0) != ownWgId) && (wgArray->At(0) != mWgId))
             {
-            inBackground = ETrue;
+            inBackground = true;
             }
-        CleanupStack::PopAndDestroy( wgArray );  
+        CleanupStack::PopAndDestroy(wgArray);
         }
     IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateEngine::ClientInBackgroundL() inBackground: %d", inBackground );
-    return inBackground;  
+    return inBackground;
     }
 
-
 // -----------------------------------------------------------------------------
 // IAUpdateEngine::handleAllClientsClosed()
 // 
 // -----------------------------------------------------------------------------
 //
 void IAUpdateEngine::handleAllClientsClosed()
-{
-    qApp->quit(); 
-}
+    {
+    qApp->quit();
+    }
+
+// -----------------------------------------------------------------------------
+// IAUpdateEngine::dialogFinished
+// Called when dialog is finished.
+// -----------------------------------------------------------------------------
+//
+void IAUpdateEngine::dialogFinished(HbAction *action)
+    {
+    DialogState dialogState = mDialogState;
+    mDialogState = NoDialog;
 
+    switch (dialogState)
+        {
+        case Results:
+            mUiRefreshAllowed = true;
+            if (iController->ResultsInfo().iRebootAfterInstall)
+                {
+                ShowRebootDialogL();
+                }
+            else
+                {
+                if (!DoPossibleApplicationClose())
+                    {
+                    iController->RefreshNodeList();
+                    RefreshUI();
+                    }
+                }
+            break;
+        case RebootQuery:
+            if (action == mPrimaryAction)
+                {
+                RStarterSession startersession;
+                if (startersession.Connect() == KErrNone)
+                    {
+                    startersession.Reset(RStarterSession::EUnknownReset);
+                    startersession.Close();
+                    }
+                }
+            else
+                {
+                if (!DoPossibleApplicationClose())
+                    {
+                    iController->RefreshNodeList();
+                    RefreshUI();
+                    }
+                }
+            break;
+        case ShowUpdateQuery:
+            if (action == mPrimaryAction)
+                {
+                IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::dialogFinished() Now");
+                mUpdateNow = true;
+                }
+            else if (action == mSecondaryAction)
+                {
+                IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::dialogFinished() Later");
+                CIAUpdateQueryHistory* updateQueryHistory =
+                        CIAUpdateQueryHistory::NewL();
+                CleanupStack::PushL(updateQueryHistory);
+                updateQueryHistory->SetTimeL(mUpdatequeryUid);
+                CleanupStack::PopAndDestroy(updateQueryHistory);
+                }
+            InformRequestObserver(KErrNone);
+            break;
+        default:
+            break;
+        }
+    }
 
 // -----------------------------------------------------------------------------
 // IAUpdateEngine::StartupComplete
 // 
 // -----------------------------------------------------------------------------
 //    
-void IAUpdateEngine::StartupComplete( TInt aError )
+void IAUpdateEngine::StartupComplete(TInt aError)
     {
-    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::StartupComplete() begin"); 
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::StartupComplete() begin");
     IAUPDATE_TRACE_1("[IAUPDATE] error code: %d", aError);
-    
-    if( aError != KErrNone ) 
-        {  
-        HandleLeaveErrorWithoutLeave( aError );
+
+    if (aError != KErrNone)
+        {
+        HandleLeaveErrorWithoutLeave(aError);
         }
     else
         {
         TRAPD( err, StartupCompleteL() );
-        if( err != KErrNone ) 
-           {  
-           HandleLeaveErrorWithoutLeave( err );
-           }
+        if (err != KErrNone)
+            {
+            HandleLeaveErrorWithoutLeave(err);
+            }
         }
- 
-    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::StartupComplete() end");    
+
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::StartupComplete() end");
     }
-    
+
 // -----------------------------------------------------------------------------
 // IAUpdateEngine::StartupCompleteL
 // 
@@ -397,166 +465,164 @@
 //    
 void IAUpdateEngine::StartupCompleteL()
     {
-    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::StartupCompleteL() begin"); 
-    
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::StartupCompleteL() begin");
+
     delete iGlobalLockHandler;
     iGlobalLockHandler = NULL;
     iGlobalLockHandler = CIAUpdateGlobalLockHandler::NewL();
-    if ( !iGlobalLockHandler->InUseByAnotherInstanceL() )
+    if (!iGlobalLockHandler->InUseByAnotherInstanceL())
         {
-        TBool totalSilent( EFalse );
-        if ( iRequestType == IAUpdateUiDefines::ECheckUpdates )
+        bool totalSilent(false);
+        if (mRequestType == IAUpdateUiDefines::ECheckUpdates)
             {
-            if ( iController->Filter() )
+            if (iController->Filter())
                 {
-                if ( iController->Filter()->FilterParams() )
+                if (iController->Filter()->FilterParams())
                     {
-                    if ( iController->Filter()->FilterParams()->Refresh() )
+                    if (iController->Filter()->FilterParams()->Refresh())
                         {
-                        if ( !iController->ForcedRefresh() )
+                        if (!iController->ForcedRefresh())
                             {
                             //from bgchecker, make it silent
-                            totalSilent = ETrue;
+                            totalSilent = true;
                             }
                         }
                     }
                 }
             }
-        SetDefaultConnectionMethodL( totalSilent );
-        iGlobalLockHandler->SetToInUseForAnotherInstancesL( ETrue );
-        iController->StartRefreshL();  
+        SetDefaultConnectionMethodL(totalSilent);
+        iGlobalLockHandler->SetToInUseForAnotherInstancesL(true);
+        iController->StartRefreshL();
         }
     else
         {
-        RefreshCompleteL( ETrue, KErrServerBusy );
-        }    
- 
-       
-    
-    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::StartupCompleteL() end");    
+        RefreshCompleteL(true, KErrServerBusy);
+        }
+
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::StartupCompleteL() end");
     }
 
- 
 // -----------------------------------------------------------------------------
 // IAUpdateEngine::HandleLeaveErrorL
 // 
 // -----------------------------------------------------------------------------
 //        
-void IAUpdateEngine::HandleLeaveErrorL( TInt aError )
+void IAUpdateEngine::HandleLeaveErrorL(TInt aError)
     {
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::HandleLeaveErrorL() begin");
     //removal of iGlobalLockHandler releases possible global operation lock to other IAD instances
     delete iGlobalLockHandler;
     iGlobalLockHandler = NULL;
     // client request is completed before leave in case of leave error
-    if ( aError != KErrNone ) 
-        {   
-        InformRequestObserver( aError );
-        User::Leave( aError );
+    if (aError != KErrNone)
+        {
+        InformRequestObserver(aError);
+        User::Leave(aError);
         }
-    
+
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::HandleLeaveErrorL() end");
     }
 
-
 // -----------------------------------------------------------------------------
 // IAUpdateEngine::HandleLeaveErrorWithoutLeave
 // 
 // -----------------------------------------------------------------------------
 //  
-void IAUpdateEngine::HandleLeaveErrorWithoutLeave( TInt aError )
+void IAUpdateEngine::HandleLeaveErrorWithoutLeave(TInt aError)
     {
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::HandleLeaveErrorWithoutLeave() begin");
     //removal of iGlobalLockHandler releases possible global operation lock to other IAD instances
     delete iGlobalLockHandler;
     iGlobalLockHandler = NULL;
-    if ( aError != KErrNone ) 
+    if (aError != KErrNone)
         {
-        InformRequestObserver( aError );
+        InformRequestObserver(aError);
         }
-    if ( aError == KErrDiskFull )
+    if (aError == KErrDiskFull)
         {
         //TRAP_IGNORE( ShowGlobalErrorNoteL( aError ) );
         }
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::HandleLeaveErrorWithoutLeave end");
     }
 
+// -----------------------------------------------------------------------------
+// IAUpdateEngine::RefreshUI
+// 
+// -----------------------------------------------------------------------------
+// 
+void IAUpdateEngine::RefreshUI()
+    {
+    emit refresh(iController->Nodes(), iController->FwNodes(), KErrNone);
+    }
 
 // -----------------------------------------------------------------------------
 // IAUpdateEngine::RefreshCompleteL
 // 
 // -----------------------------------------------------------------------------
 //      
-void IAUpdateEngine::RefreshCompleteL( TBool /*aWithViewActivation*/, TInt aError )
+void IAUpdateEngine::RefreshCompleteL(TBool /*aWithViewActivation*/,
+        TInt aError)
     {
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::RefreshCompleteL() begin");
     IAUPDATE_TRACE_1("[IAUPDATE] error code: %d", aError );
     //removal of iGlobalLockHandler releases possible global operation lock to other IAD instances
     delete iGlobalLockHandler;
-    iGlobalLockHandler = NULL;   
-   
-    if ( iRequestType == IAUpdateUiDefines::ECheckUpdates )
+    iGlobalLockHandler = NULL;
+
+    if (mRequestType == IAUpdateUiDefines::ECheckUpdates)
         {
-        InformRequestObserver( aError );
+        InformRequestObserver(aError);
         }
-    else 
-        {    
-        emit refresh( iController->Nodes(), iController->FwNodes(), aError );   
+    else
+        {
+        emit refresh(iController->Nodes(), iController->FwNodes(), aError);
         //if ( aWithViewActivation)
-          //  {
-          //  ActivateLocalViewL( TUid::Uid( EIAUpdateMainViewId ) );
-          //  }
+        //  {
+        //  ActivateLocalViewL( TUid::Uid( EIAUpdateMainViewId ) );
+        //  }
         CIAUpdateAgreement* agreement = CIAUpdateAgreement::NewLC();
-        TBool agreementAccepted = agreement->AgreementAcceptedL();
-        if ( iController->ForcedRefresh() )    
+        bool agreementAccepted = agreement->AgreementAcceptedL();
+        if (iController->ForcedRefresh())
             {
-            if ( !agreementAccepted )
+            if (!agreementAccepted)
                 {
                 agreement->SetAgreementAcceptedL();
                 }
             }
-        CleanupStack::PopAndDestroy( agreement );
+        CleanupStack::PopAndDestroy(agreement);
         // By calling CIdle possible waiting dialog can be closed before
         // automatic check where a new dialog may be launched
         delete iIdleAutCheck;
         iIdleAutCheck = NULL;
-        iIdleAutCheck = CIdle::NewL( CActive::EPriorityIdle ); 
-        iIdleAutCheck->Start( TCallBack( AutomaticCheckCallbackL, this ) );
-        } 
- 
-  
-    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::RefreshCompleteL() end");        
+        iIdleAutCheck = CIdle::NewL(CActive::EPriorityIdle);
+        iIdleAutCheck->Start(TCallBack(AutomaticCheckCallbackL, this));
+        }
+
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::RefreshCompleteL() end");
     }
 
-
-
-
 // -----------------------------------------------------------------------------
 // IAUpdateEngine::UpdateCompleteL
 // 
 // -----------------------------------------------------------------------------
 //     
-void IAUpdateEngine::UpdateCompleteL( TInt aError )    
+void IAUpdateEngine::UpdateCompleteL(TInt aError)
     {
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::UpdateCompleteL begin");
     IAUPDATE_TRACE_1("[IAUPDATE] error code: %d", aError );
     //removal of iGlobalLockHandler releases possible global operation lock to other IAD instances
     delete iGlobalLockHandler;
-    iGlobalLockHandler = NULL;  
-    if ( iRequestType != IAUpdateUiDefines::ENoRequest )
+    iGlobalLockHandler = NULL;
+    if (mRequestType != IAUpdateUiDefines::ENoRequest)
         {
-        InformRequestObserver( aError );
+        InformRequestObserver(aError);
         }
-    
-    emit refresh( iController->Nodes(), iController->FwNodes(), KErrNone );
-         
-    ShowResultsDialogDeferredL();
-                
+
+    ShowResultsDialogL();
+
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::UpdateCompleteL end");
     }
 
-
-
 // -----------------------------------------------------------------------------
 // IAUpdateEngine::ShowResultsDialogL
 // 
@@ -565,148 +631,123 @@
 void IAUpdateEngine::ShowResultsDialogL()
     {
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ShowResultsDialogL() begin");
-                
-    iUiRefreshAllowed = ETrue;
-    IAUpdateResultsDialog resultsDialog;
-    resultsDialog.showResults(iController->ResultsInfo());
-    
-    //TODO: How to recognise when application is closing 
-    if ( iController->ResultsInfo().iRebootAfterInstall )
-        {
-        HbMessageBox messageBox(HbMessageBox::MessageTypeQuestion); 
-        messageBox.setText(QString("Phone restart needed. Restart now?"));
-        HbAction okAction("Ok");
-        HbAction cancelAction("Cancel");
-        messageBox.setPrimaryAction(&okAction);
-        messageBox.setSecondaryAction(&cancelAction);
-        messageBox.setTimeout(HbPopup::NoTimeout);
-        messageBox.show();
-        /*HbAction *selectedAction = messageBox.exec();
-        if (selectedAction == messageBox.primaryAction())
-            {
-            RStarterSession startersession;
-            if( startersession.Connect() == KErrNone )
-                {
-                startersession.Reset( RStarterSession::EUnknownReset );
-                startersession.Close();
-                return;
-                }
-            }*/
-        }
-    if ( iStartedFromApplication && 
-        iController->ResultsInfo().iCountCancelled == 0 &&
-        iController->ResultsInfo().iCountFailed == 0 )
-        {
-        qApp->quit();
-        }
-    
-    IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateEngine::ShowResultsDialogL() nodes count: %d", iController->Nodes().Count() );
-    IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateEngine::ShowResultsDialogL() fw nodes: %d", iController->FwNodes().Count() );
-    //exit from result view if there are no update left
-    if ( iController->Nodes().Count() == 0 && iController->FwNodes().Count() == 0 )
-        {
-        qApp->quit();
-        }
-    
+
+    mUiRefreshAllowed = false;
+    mResultsDialog = new IAUpdateResultsDialog(this);
+    mResultsDialog->showResults(iController->ResultsInfo(), this,
+            SLOT(dialogFinished(HbAction*)));
+    mDialogState = Results;
+
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ShowResultsDialogL() end");
     }
 
 // -----------------------------------------------------------------------------
-// IAUpdateEngin::ShowResultsDialogDeferredL
+// IAUpdateEngine::ShowRebootDialogL
 // 
 // -----------------------------------------------------------------------------
-//       
-void IAUpdateEngine::ShowResultsDialogDeferredL()
+//
+void IAUpdateEngine::ShowRebootDialogL()
     {
-    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ShowResultsDialogDeferredL() begin");
-    delete iIdle;
-    iIdle = NULL;
-    iIdle = CIdle::NewL( CActive::EPriorityIdle ); 
-    iIdle->Start( TCallBack( ShowResultsDialogCallbackL, this ) ); 
-    iUiRefreshAllowed = EFalse;
-    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ShowResultsDialogDeferredL() end");
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ShowRebootDialogL() begin");
+
+    HbMessageBox *messageBox = new HbMessageBox(
+            HbMessageBox::MessageTypeQuestion);
+    messageBox->setText(QString("Phone restart needed. Restart now?"));
+    int actionCount = messageBox->actions().count();
+    for (int i = actionCount - 1; i >= 0; i--)
+        {
+        messageBox->removeAction(messageBox->actions().at(i));
+        }
+    mPrimaryAction = NULL;
+    mPrimaryAction = new HbAction("Ok");
+    HbAction *secondaryAction = NULL;
+    secondaryAction = new HbAction("Cancel");
+
+    messageBox->addAction(mPrimaryAction);
+    messageBox->addAction(secondaryAction);
+    messageBox->setTimeout(HbPopup::NoTimeout);
+    messageBox->setAttribute(Qt::WA_DeleteOnClose);
+    messageBox->open(this, SLOT(dialogFinished(HbAction*)));
+    mDialogState = RebootQuery;
+
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ShowRebootDialogL() end");
     }
- 
-
-
-
-
-
-
-
 
 // -----------------------------------------------------------------------------
 // IAUpdateEngine::InformRequestObserver
 // 
 // -----------------------------------------------------------------------------
 //      
-void IAUpdateEngine::InformRequestObserver( TInt aError )
+void IAUpdateEngine::InformRequestObserver(int aError)
     {
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::InformRequestObserver() begin");
-        
+
     //if ( iRequestObserver )
-    if ( iRequestIssued )    
+    if (mRequestIssued)
         {
-        if ( iController->ClosingAllowedByClient() )
+        if (iController->ClosingAllowedByClient())
             {
-            if ( iRequestType != IAUpdateUiDefines::ENoRequest )
+            if (mRequestType != IAUpdateUiDefines::ENoRequest)
                 {
-//                if ( iRequestType == IAUpdateUiDefines::EUpdateQuery && iUpdateNow )
-//                    {
-//                  if ( !iBackgroundTimer )
-//                        {
-//                        iBackgroundTimer = CIAUpdateUITimer::NewL( *this, CIAUpdateUITimer::EBackgroundDelay );
-//                        }
-//                 if ( !iBackgroundTimer->IsActive() )
-//                        {
-//                        iBackgroundTimer->After( 500000 );
-//                        }
-//                    }
-//                 else
-//                    {
-                      iEikEnv->RootWin().SetOrdinalPosition( -1, ECoeWinPriorityNeverAtFront );
-//                    }
+                //                if ( iRequestType == IAUpdateUiDefines::EUpdateQuery && iUpdateNow )
+                //                    {
+                //                  if ( !iBackgroundTimer )
+                //                        {
+                //                        iBackgroundTimer = CIAUpdateUITimer::NewL( *this, CIAUpdateUITimer::EBackgroundDelay );
+                //                        }
+                //                 if ( !iBackgroundTimer->IsActive() )
+                //                        {
+                //                        iBackgroundTimer->After( 500000 );
+                //                        }
+                //                    }
+                //                 else
+                //                    {
+                iEikEnv->RootWin().SetOrdinalPosition(-1,
+                        ECoeWinPriorityNeverAtFront);
+                //                    }
                 }
             }
-        
-        switch ( iRequestType )
+
+        switch (mRequestType)
             {
             case IAUpdateUiDefines::ENoRequest:
                 {
-                mServiceProvider->completeLauncherLaunch( aError );
+                mServiceProvider->completeLauncherLaunch(aError);
                 break;
                 }
             case IAUpdateUiDefines::ECheckUpdates:
                 {
-                mServiceProvider->completeCheckUpdates( iController->CountOfAvailableUpdates(), aError );
+                mServiceProvider->completeCheckUpdates(
+                        iController->CountOfAvailableUpdates(), aError);
                 break;
                 }
             case IAUpdateUiDefines::EShowUpdates:
                 {
-                CIAUpdateResult* result( NULL );
+                CIAUpdateResult* result(NULL);
                 TRAPD( error, result = CIAUpdateResult::NewL() )
-                if ( result )
+                if (result)
                     {
-                    TIAUpdateResultsInfo resultsInfo( iController->ResultsInfo() );
-                    IAUPDATE_TRACE_3("[IAUPDATE] IAUpdateEngine::InformRequestObserver succeed: %d failed: %d  cancelled: %d", 
-                                                  resultsInfo.iCountSuccessfull, 
-                                                  resultsInfo.iCountFailed, 
-                                                  resultsInfo.iCountCancelled );
-                    result->SetSuccessCount( resultsInfo.iCountSuccessfull );
-                    result->SetFailCount( resultsInfo.iCountFailed );
-                    result->SetCancelCount( resultsInfo.iCountCancelled );    
-                    mServiceProvider->completeShowUpdates( result, aError );
+                    TIAUpdateResultsInfo resultsInfo(
+                            iController->ResultsInfo());
+                    IAUPDATE_TRACE_3("[IAUPDATE] IAUpdateEngine::InformRequestObserver succeed: %d failed: %d  cancelled: %d",
+                            resultsInfo.iCountSuccessfull,
+                            resultsInfo.iCountFailed,
+                            resultsInfo.iCountCancelled );
+                    result->SetSuccessCount(resultsInfo.iCountSuccessfull);
+                    result->SetFailCount(resultsInfo.iCountFailed);
+                    result->SetCancelCount(resultsInfo.iCountCancelled);
+                    mServiceProvider->completeShowUpdates(result, aError);
                     // Ownership of result is transferred here.
                     }
                 else
                     {
-                    mServiceProvider->completeShowUpdates( NULL, error );
+                    mServiceProvider->completeShowUpdates(NULL, error);
                     }
                 break;
                 }
             case IAUpdateUiDefines::EUpdateQuery:
                 {
-                mServiceProvider->completeUpdateQuery( iUpdateNow, aError );
+                mServiceProvider->completeUpdateQuery(mUpdateNow, aError);
                 break;
                 }
             default:
@@ -715,329 +756,317 @@
                 }
             }
 
-        //iRequestObserver = NULL; 
-        iRequestIssued = EFalse;
+        mRequestIssued = false;
         }
-        
+
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::InformRequestObserver() end");
     }
 
-
 // ---------------------------------------------------------------------------
 // IAUpdateEngine::SetDefaultConnectionMethodL
 // Sets the connection method for the update network connection.
 // ---------------------------------------------------------------------------
 //
-void IAUpdateEngine::SetDefaultConnectionMethodL( TBool aTotalSilent )
+void IAUpdateEngine::SetDefaultConnectionMethodL(bool aTotalSilent)
     {
-    if ( aTotalSilent )
+    if (aTotalSilent)
         {
         // from back ground checker, choose the IAP to make the internet access silent
         IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::SetDefaultConnectionMethodL() begin");
 
-           TUint32 connectionMethodId( 0 );
-           TInt connMethodId( 0 );
+        uint connectionMethodId(0);
+        int connMethodId(0);
+
+        // Let's first check whether cenrep contains SNAP id other than zero
+        CRepository* cenrep(CRepository::NewLC(KCRUidIAUpdateSettings));
+        User::LeaveIfError(cenrep->Get(KIAUpdateAccessPoint, connMethodId));
+        CleanupStack::PopAndDestroy(cenrep);
+        cenrep = NULL;
 
-           // Let's first check whether cenrep contains SNAP id other than zero
-           CRepository* cenrep( CRepository::NewLC( KCRUidIAUpdateSettings ) );
-           User::LeaveIfError(  
-               cenrep->Get( KIAUpdateAccessPoint, connMethodId ) );
-           CleanupStack::PopAndDestroy( cenrep ); 
-           cenrep = NULL;
+        RCmManager cmManager;
+        cmManager.OpenL();
+        CleanupClosePushL(cmManager);
+
+        if (connMethodId == -1)
+            {
+            IAUPDATE_TRACE("[IAUPDATE] user chooses default connection, use IAP logic");
+
+            //check what is the default connection by users     
+
+            TCmDefConnValue DCSetting;
+            cmManager.ReadDefConnL(DCSetting);
 
-           RCmManagerExt cmManagerExt;
-           cmManagerExt.OpenL();
-           CleanupClosePushL( cmManagerExt );
-           
-           if ( connMethodId == -1 )
-               {
-               IAUPDATE_TRACE("[IAUPDATE] user chooses default connection, use IAP logic");
-               
-               //check what is the default connection by users     
-               
-               TCmDefConnValue DCSetting;
-               cmManagerExt.ReadDefConnL( DCSetting );
-              
-               
-               switch ( DCSetting.iType )
-                   {
-                   case ECmDefConnAlwaysAsk:
-                   case ECmDefConnAskOnce:
-                       {
-                       //go with the best IAP under internet snap
-                       connectionMethodId = GetBestIAPInAllSNAPsL( cmManagerExt );
-                       break;
-                       }
-                   case ECmDefConnDestination:
-                       {
-                       //go with the best IAP under this snap
-                       connectionMethodId = GetBestIAPInThisSNAPL( cmManagerExt, DCSetting.iId );
-                       break;
-                       }
-                   case ECmDefConnConnectionMethod:
-                       {
-                       //go with the best IAP under this snap
-                       connectionMethodId = DCSetting.iId;
-                       break;
-                       }
-                   }
-               }
-           else if ( connMethodId == 0 )
-               {
-               //no choice from user, we go with the best IAP under Internent SNAP
-               connectionMethodId = GetBestIAPInAllSNAPsL( cmManagerExt );
-               }
-           else
-               {
-               IAUPDATE_TRACE("[IAUPDATE] use chooses a snap");
-               // It was some SNAP value
-               connectionMethodId = GetBestIAPInThisSNAPL( cmManagerExt, connMethodId );
-               }
+            switch (DCSetting.iType)
+                {
+                case ECmDefConnAlwaysAsk:
+                case ECmDefConnAskOnce:
+                    {
+                    //go with the best IAP under internet snap
+                    connectionMethodId = GetBestIAPInAllSNAPsL(cmManager);
+                    break;
+                    }
+                case ECmDefConnDestination:
+                    {
+                    //go with the best IAP under this snap
+                    connectionMethodId = GetBestIAPInThisSNAPL(cmManager,
+                            DCSetting.iId);
+                    break;
+                    }
+                case ECmDefConnConnectionMethod:
+                    {
+                    //go with the best IAP under this snap
+                    connectionMethodId = DCSetting.iId;
+                    break;
+                    }
+                }
+            }
+        else if (connMethodId == 0)
+            {
+            //no choice from user, we go with the best IAP under Internent SNAP
+            connectionMethodId = GetBestIAPInAllSNAPsL(cmManager);
+            }
+        else
+            {
+            IAUPDATE_TRACE("[IAUPDATE] use chooses a snap");
+            // It was some SNAP value
+            connectionMethodId = GetBestIAPInThisSNAPL(cmManager,
+                    connMethodId);
+            }
 
-           CleanupStack::PopAndDestroy( &cmManagerExt ); 
-           
-           if ( connectionMethodId != 0 )
-               {
-               TIAUpdateConnectionMethod connectionMethod( 
-                   connectionMethodId, 
-                   TIAUpdateConnectionMethod::EConnectionMethodTypeAccessPoint );
+        CleanupStack::PopAndDestroy(&cmManager);
+
+        if (connectionMethodId != 0)
+            {
+            TIAUpdateConnectionMethod
+                    connectionMethod(
+                            connectionMethodId,
+                            TIAUpdateConnectionMethod::EConnectionMethodTypeAccessPoint);
 
-               iController->SetDefaultConnectionMethodL( connectionMethod );
-               }
-           else
-               {
-               //In the totally silent case, if no usable IAP, we complete the check update with 0 updates.
-               //the bgchecker will try again later after 1 month. 
-               //The LEAVE will be catched up later and complete the request from background checker.
-               User::LeaveIfError( KErrNotFound );
-               
-               //the following code will pop up dialog to ask from user, just for proto
-              /* connectionMethodId = 0;               
-               TIAUpdateConnectionMethod connectionMethod( 
-                   connectionMethodId, TIAUpdateConnectionMethod::EConnectionMethodTypeDefault );
-
-               iController->SetDefaultConnectionMethodL( connectionMethod );*/
-               }
-           
-
-
-           IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::SetDefaultConnectionMethodL() end");
+            iController->SetDefaultConnectionMethodL(connectionMethod);
+            }
+        else
+            {
+            //In the totally silent case, if no usable IAP, we complete the check update with 0 updates.
+            //the bgchecker will try again later after 1 month. 
+            //The LEAVE will be catched up later and complete the request from background checker.
+            User::LeaveIfError(KErrNotFound);
+            }
+        IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::SetDefaultConnectionMethodL() end");
         }
     else
         {
         // from grid, use the old logic
         IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::SetDefaultConnectionMethodL() begin");
-                  TUint32 connectionMethodId( 0 );
-                  TInt connMethodId( 0 );
+        uint connectionMethodId(0);
+        int connMethodId(0);
+
+        // Set initial value to always ask
+        int connectionMethodType(
+                TIAUpdateConnectionMethod::EConnectionMethodTypeAlwaysAsk);
+        bool needSaving(false);
 
-                  // Set initial value to always ask
-                  TInt connectionMethodType( TIAUpdateConnectionMethod::EConnectionMethodTypeAlwaysAsk );
-                  TBool needSaving(EFalse);
+        // Let's first check whether cenrep contains SNAP id other than zero
+        CRepository* cenrep(CRepository::NewLC(KCRUidIAUpdateSettings));
+        User::LeaveIfError(cenrep->Get(KIAUpdateAccessPoint, connMethodId));
+        CleanupStack::PopAndDestroy(cenrep);
+        cenrep = NULL;
+
+        if (connMethodId == -1)
+            {
+            IAUPDATE_TRACE("[IAUPDATE] user chooses default connection, use IAP logic");
 
-                  // Let's first check whether cenrep contains SNAP id other than zero
-                  CRepository* cenrep( CRepository::NewLC( KCRUidIAUpdateSettings ) );
-                  User::LeaveIfError(  
-                      cenrep->Get( KIAUpdateAccessPoint, connMethodId ) );
-                  CleanupStack::PopAndDestroy( cenrep ); 
-                  cenrep = NULL;
-                    
-                  if ( connMethodId == -1 )
-                      {
-                      IAUPDATE_TRACE("[IAUPDATE] user chooses default connection, use IAP logic");
-                                            
-                      connectionMethodId = 0;
-                      connectionMethodType = TIAUpdateConnectionMethod::EConnectionMethodTypeDefault;
-                      }
-                  else if ( connMethodId == 0 )
-                      {
-                      
-                      IAUPDATE_TRACE("[IAUPDATE] use chooses nothing, use internal IAP logic");
-                      //if nothing is set by user, use our new logic
-                      //SetDefaultConnectionMethod2L();
-                      //return;
-                      // CenRep didn't contain any SNAP id. Let's try Internet SNAP then.
-                          
-                      RCmManagerExt cmManagerExt;
-                      cmManagerExt.OpenL();
-                      CleanupClosePushL( cmManagerExt );
-                      iDestIdArray.Reset();
-                      cmManagerExt.AllDestinationsL( iDestIdArray );
+            connectionMethodId = 0;
+            connectionMethodType
+                    = TIAUpdateConnectionMethod::EConnectionMethodTypeDefault;
+            }
+        else if (connMethodId == 0)
+            {
+            IAUPDATE_TRACE("[IAUPDATE] use chooses nothing, use internal IAP logic");
+            //if nothing is set by user, use our new logic
+            //SetDefaultConnectionMethod2L();
+            //return;
+            // CenRep didn't contain any SNAP id. Let's try Internet SNAP then.
+
+            RCmManager cmManager;
+            cmManager.OpenL();
+            CleanupClosePushL(cmManager);
+            iDestIdArray.Reset();
+            cmManager.AllDestinationsL(iDestIdArray);
+
+            for (int i = 0; i < iDestIdArray.Count(); i++)
+                {
+                RCmDestination dest = cmManager.DestinationL(iDestIdArray[i]);
+                CleanupClosePushL(dest);
 
-                      for ( TInt i = 0; i< iDestIdArray.Count(); i++ )
-                          {
-                          RCmDestinationExt dest = cmManagerExt.DestinationL( iDestIdArray[i] );
-                          CleanupClosePushL( dest );
-                           
-                          if ( dest.MetadataL( CMManager::ESnapMetadataInternet ) )
-                              {
-                              // Check whether Internet SNAP contains any IAP.
-                              if ( dest.ConnectionMethodCount() > 0 )
-                                  {
-                                  connectionMethodId = iDestIdArray[i];
-                                  needSaving = ETrue;
-                                  IAUPDATE_TRACE_1("[IAUPDATE] connectionMethodId: %d", connectionMethodId );
-                                  }
-                              CleanupStack::PopAndDestroy( &dest ); 
-                              break;
-                              }
-                               
-                          CleanupStack::PopAndDestroy( &dest ); 
-                          }
-                      iDestIdArray.Reset();
-                      CleanupStack::PopAndDestroy( &cmManagerExt ); 
-                      }
-                  else
-                      {
-                      IAUPDATE_TRACE("[IAUPDATE] use chooses a snap");
-                      // It was some SNAP value
-                      connectionMethodId = connMethodId;
-                      }
-                  
-                  if ( connectionMethodId > 0)
-                      {
-                      // We have now some valid SNAP id, either from CenRep or Internet SNAP
-                      connectionMethodType = TIAUpdateConnectionMethod::EConnectionMethodTypeDestination;
-                      // Save to cenrep if needed
-                      if ( needSaving )
-                          {
-                          cenrep = CRepository::NewLC( KCRUidIAUpdateSettings );
-                          TInt err = cenrep->StartTransaction( CRepository::EReadWriteTransaction );
-                          User::LeaveIfError( err );
-                          cenrep->CleanupCancelTransactionPushL();
-                          
-                          connMethodId = connectionMethodId;
-                          err = cenrep->Set( KIAUpdateAccessPoint, connMethodId );
-                          User::LeaveIfError( err );
-                          TUint32 ignore = KErrNone;
-                          User::LeaveIfError( cenrep->CommitTransaction( ignore ) );
-                          CleanupStack::PopAndDestroy(); // CleanupCancelTransactionPushL()
-                          CleanupStack::PopAndDestroy( cenrep );            
-                          }
-                      }
+                if (dest.MetadataL(CMManager::ESnapMetadataInternet))
+                    {
+                    // Check whether Internet SNAP contains any IAP.
+                    if (dest.ConnectionMethodCount() > 0)
+                        {
+                        connectionMethodId = iDestIdArray[i];
+                        needSaving = true;
+                        IAUPDATE_TRACE_1("[IAUPDATE] connectionMethodId: %d", connectionMethodId );
+                        }
+                    CleanupStack::PopAndDestroy(&dest);
+                    break;
+                    }
+
+                CleanupStack::PopAndDestroy(&dest);
+                }
+            iDestIdArray.Reset();
+            CleanupStack::PopAndDestroy(&cmManager);
+            }
+        else
+            {
+            IAUPDATE_TRACE("[IAUPDATE] use chooses a snap");
+            // It was some SNAP value
+            connectionMethodId = connMethodId;
+            }
 
-                  TIAUpdateConnectionMethod connectionMethod( 
-                      connectionMethodId, 
-                      static_cast< TIAUpdateConnectionMethod::TConnectionMethodType >( connectionMethodType ) );
-
-                  iController->SetDefaultConnectionMethodL( connectionMethod );
+        if (connectionMethodId > 0)
+            {
+            // We have now some valid SNAP id, either from CenRep or Internet SNAP
+            connectionMethodType
+                    = TIAUpdateConnectionMethod::EConnectionMethodTypeDestination;
+            // Save to cenrep if needed
+            if (needSaving)
+                {
+                cenrep = CRepository::NewLC(KCRUidIAUpdateSettings);
+                int err = cenrep->StartTransaction(
+                        CRepository::EReadWriteTransaction);
+                User::LeaveIfError(err);
+                cenrep->CleanupCancelTransactionPushL();
 
-                  IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::SetDefaultConnectionMethodL() end");
-        }
+                connMethodId = connectionMethodId;
+                err = cenrep->Set(KIAUpdateAccessPoint, connMethodId);
+                User::LeaveIfError(err);
+                TUint32 ignore = KErrNone;
+                User::LeaveIfError(cenrep->CommitTransaction(ignore));
+                CleanupStack::PopAndDestroy(); // CleanupCancelTransactionPushL()
+                CleanupStack::PopAndDestroy(cenrep);
+                }
+            }
 
+        TIAUpdateConnectionMethod
+                connectionMethod(
+                        connectionMethodId,
+                        static_cast<TIAUpdateConnectionMethod::TConnectionMethodType> (connectionMethodType));
+
+        iController->SetDefaultConnectionMethodL(connectionMethod);
+
+        IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::SetDefaultConnectionMethodL() end");
+        }
     }
 
-
 // ---------------------------------------------------------------------------
 // IAUpdateEngine::GetBestIAPInAllSNAPsL
 // Sets the best IAP from all snaps
 // ---------------------------------------------------------------------------
 //
-TUint32 IAUpdateEngine::GetBestIAPInAllSNAPsL( RCmManagerExt& aCmManagerExt  )
-    { 
+uint IAUpdateEngine::GetBestIAPInAllSNAPsL(RCmManager& aCmManager)
+    {
     //go with internet SNAP first.
-    TUint32 IAPID = 0;
-    IAPID = GetBestIAPInInternetSNAPL( aCmManagerExt );
-    
-    if ( IAPID )
+    uint IAPID = 0;
+    IAPID = GetBestIAPInInternetSNAPL(aCmManager);
+
+    if (IAPID)
         {
         return IAPID;
         }
-    
+
     //select IAP from rest of the SNAPs
     iDestIdArray.Reset();
-    aCmManagerExt.AllDestinationsL( iDestIdArray );
-    
-    for ( TInt i = 0; i< iDestIdArray.Count(); i++ )
+    aCmManager.AllDestinationsL(iDestIdArray);
+
+    for (int i = 0; i < iDestIdArray.Count(); i++)
         {
-        TUint32 SNAPID = iDestIdArray[i];                   
-        IAPID = GetBestIAPInThisSNAPL( aCmManagerExt, SNAPID );
-        if ( IAPID )
+        uint SNAPID = iDestIdArray[i];
+        IAPID = GetBestIAPInThisSNAPL(aCmManager, SNAPID);
+        if (IAPID)
             {
             break;
             }
-         }
+        }
     iDestIdArray.Reset();
     return IAPID;
     }
 
-
-
 // ---------------------------------------------------------------------------
 // IAUpdateEngine::GetBestIAPInInternetSNAPL
 // Sets the best IAP from internet snap
 // ---------------------------------------------------------------------------
 //
-TUint32 IAUpdateEngine::GetBestIAPInInternetSNAPL( RCmManagerExt& aCmManagerExt  )
+uint IAUpdateEngine::GetBestIAPInInternetSNAPL(RCmManager& aCmManager)
     {
     //select IAP from Internet SNAP
     iDestIdArray.Reset();
-    aCmManagerExt.AllDestinationsL( iDestIdArray );
-    TUint32 InternetSNAPID = 0;
-    for ( TInt i = 0; i< iDestIdArray.Count(); i++ )
+    aCmManager.AllDestinationsL(iDestIdArray);
+    uint InternetSNAPID = 0;
+    for (int i = 0; i < iDestIdArray.Count(); i++)
         {
-        RCmDestinationExt dest = aCmManagerExt.DestinationL( iDestIdArray[i] );
-        CleanupClosePushL( dest );
-                                     
-        if ( dest.MetadataL( CMManager::ESnapMetadataInternet ) )
+        RCmDestination dest = aCmManager.DestinationL(iDestIdArray[i]);
+        CleanupClosePushL(dest);
+
+        if (dest.MetadataL(CMManager::ESnapMetadataInternet))
             {
             InternetSNAPID = iDestIdArray[i];
-            CleanupStack::PopAndDestroy( &dest ); 
+            CleanupStack::PopAndDestroy(&dest);
             break;
-            }                     
-         CleanupStack::PopAndDestroy( &dest ); 
-         }
+            }
+        CleanupStack::PopAndDestroy(&dest);
+        }
     iDestIdArray.Reset();
-    
-    return GetBestIAPInThisSNAPL( aCmManagerExt, InternetSNAPID );
+
+    return GetBestIAPInThisSNAPL(aCmManager, InternetSNAPID);
     }
 
-
-
 // ---------------------------------------------------------------------------
 // IAUpdateEngine::GetBestIAPInThisSNAPL
 // Sets the best IAP from the given snap
 // ---------------------------------------------------------------------------
 //
-TUint32 IAUpdateEngine::GetBestIAPInThisSNAPL( RCmManagerExt& aCmManagerExt, TUint32 aSNAPID  )
+uint IAUpdateEngine::GetBestIAPInThisSNAPL(RCmManager& aCmManager,
+        uint aSNAPID)
     {
     //get all usable IAPs
     TConnMonIapInfoBuf iapInfo;
     TRequestStatus status;
-                       
+
     RConnectionMonitor connMon;
     connMon.ConnectL();
-    CleanupClosePushL( connMon );
-    
-    connMon.GetPckgAttribute( EBearerIdAll, 0, KIapAvailability,iapInfo, status );
-    User::WaitForRequest( status );
-    User::LeaveIfError( status.Int() );
-    
-    CleanupStack::PopAndDestroy( &connMon ); 
-    
-    RCmDestinationExt dest = aCmManagerExt.DestinationL( aSNAPID );
-    CleanupClosePushL( dest );
-    
+    CleanupClosePushL(connMon);
+
+    connMon.GetPckgAttribute(EBearerIdAll, 0, KIapAvailability, iapInfo,
+            status);
+    User::WaitForRequest(status);
+    User::LeaveIfError(status.Int());
+
+    CleanupStack::PopAndDestroy(&connMon);
+
+    RCmDestination dest = aCmManager.DestinationL(aSNAPID);
+    CleanupClosePushL(dest);
+
     // Check whether the SNAP contains any IAP.
-    for  (TInt i = 0; i < dest.ConnectionMethodCount(); i++ )
+    for (int i = 0; i < dest.ConnectionMethodCount(); i++)
         {
-        RCmConnectionMethodExt cm =  dest.ConnectionMethodL( i );
-        CleanupClosePushL( cm );
-        
-        TUint32 iapid= cm.GetIntAttributeL( CMManager::ECmIapId );
-        
-        for ( TInt i = 0; i < iapInfo().iCount; i++ )
+        RCmConnectionMethod cm = dest.ConnectionMethodL(i);
+        CleanupClosePushL(cm);
+
+        uint iapid = cm.GetIntAttributeL(CMManager::ECmIapId);
+
+        for (int i = 0; i < iapInfo().iCount; i++)
             {
-            if ( iapInfo().iIap[i].iIapId == iapid )
+            if (iapInfo().iIap[i].iIapId == iapid)
                 {
-                CleanupStack::PopAndDestroy( 2 ); //cm & dest;
+                CleanupStack::PopAndDestroy(2); //cm & dest;
                 return iapid;
                 }
-            }    
-                                                                                 
-        CleanupStack::PopAndDestroy( &cm );
+            }
+
+        CleanupStack::PopAndDestroy(&cm);
         }
-    
-    CleanupStack::PopAndDestroy( &dest ); 
+
+    CleanupStack::PopAndDestroy(&dest);
     return 0;
     }
 
@@ -1052,92 +1081,78 @@
     CIAUpdateQueryHistory* updateQueryHistory = CIAUpdateQueryHistory::NewL();
     // Get the delay information from the controller that has read it from
     // the config file.
-    updateQueryHistory->SetDelay( iController->ConfigData().QueryHistoryDelayHours() );
-    CleanupStack::PushL( updateQueryHistory );
-    if ( !updateQueryHistory->IsDelayedL( iUpdatequeryUid ) )
+    updateQueryHistory->SetDelay(
+            iController->ConfigData().QueryHistoryDelayHours());
+    CleanupStack::PushL(updateQueryHistory);
+    bool isDelayed(updateQueryHistory->IsDelayedL(mUpdatequeryUid));
+    CleanupStack::PopAndDestroy(updateQueryHistory);
+    if (!isDelayed)
         {
-        if ( ClientInBackgroundL() )
+        if (ClientInBackgroundL())
             {
-            iEikEnv->RootWin().SetOrdinalPosition( -1, ECoeWinPriorityNormal );
+            iEikEnv->RootWin().SetOrdinalPosition(-1, ECoeWinPriorityNormal);
             }
         else
             {
-            iEikEnv->RootWin().SetOrdinalPosition( 0, ECoeWinPriorityNormal );    
+            iEikEnv->RootWin().SetOrdinalPosition(0, ECoeWinPriorityNormal);
+            }
+
+        HbMessageBox *messageBox = new HbMessageBox(
+                HbMessageBox::MessageTypeQuestion);
+        messageBox->setText(QString(
+                "Application update is available from Nokia. Update?"));
+        int actionCount = messageBox->actions().count();
+        for (int i = actionCount - 1; i >= 0; i--)
+            {
+            messageBox->removeAction(messageBox->actions().at(i));
             }
- 
-        HbMessageBox messageBox(HbMessageBox::MessageTypeQuestion); 
-        messageBox.setText(QString("Application update is available from Nokia. Update?"));
-        HbAction nowAction("Now");
-        HbAction laterAction("Later");
-        messageBox.setPrimaryAction(&nowAction);
-        messageBox.setSecondaryAction(&laterAction);
-        messageBox.setTimeout(HbPopup::NoTimeout);
-        messageBox.show();
-        iUpdateNow = ETrue;
-        //HbAction *selectedAction = messageBox.exec();
-        
-        /*if (selectedAction == messageBox.primaryAction())
-            {
-            IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ShowUpdateQueryL() Now");
-            iUpdateNow = ETrue;
-            }
-        else if (selectedAction == messageBox.secondaryAction())
-            {
-            IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ShowUpdateQueryL() Later");
-            updateQueryHistory->SetTimeL( iUpdatequeryUid );
-            }*/
+        mPrimaryAction = NULL;
+        mPrimaryAction = new HbAction("Now");
+        mSecondaryAction = NULL;
+        mSecondaryAction = new HbAction("Later");
+        messageBox->addAction(mPrimaryAction);
+        messageBox->addAction(mSecondaryAction);
+        messageBox->setTimeout(HbPopup::NoTimeout);
+        messageBox->setAttribute(Qt::WA_DeleteOnClose);
+        messageBox->open(this, SLOT(dialogFinished(HbAction*)));
+        mDialogState = ShowUpdateQuery;
         }
-    CleanupStack::PopAndDestroy( updateQueryHistory );
-    InformRequestObserver( KErrNone );  
+    else
+        {
+        InformRequestObserver(KErrNone);
+        }
+
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ShowUpdateQueryL() end");
     }
 
-
-
 // -----------------------------------------------------------------------------
 // IAUpdateEngine::HideApplicationInFSWL
 // 
 // -----------------------------------------------------------------------------
 //  
-void IAUpdateEngine::HideApplicationInFSWL( TBool aHide ) const
+void IAUpdateEngine::HideApplicationInFSWL(bool aHide) const
     {
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::HideApplicationInFSW() begin");
     IAUPDATE_TRACE_1("[IAUPDATE] hide: %d", aHide );
-    TInt id = iEikEnv->RootWin().Identifier();
+    int id = iEikEnv->RootWin().Identifier();
 
-    CApaWindowGroupName* wgName = CApaWindowGroupName::NewLC( 
-            iEikEnv->WsSession(), id );
-    
-    wgName->SetHidden( aHide );
-    wgName->SetWindowGroupName( iEikEnv->RootWin() );    
-    CleanupStack::PopAndDestroy( wgName ); 
+    CApaWindowGroupName* wgName = CApaWindowGroupName::NewLC(
+            iEikEnv->WsSession(), id);
+
+    wgName->SetHidden(aHide);
+    wgName->SetWindowGroupName(iEikEnv->RootWin());
+    CleanupStack::PopAndDestroy(wgName);
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::HideApplicationInFSW() end");
     }
 
 // ---------------------------------------------------------------------------
-// IAUpdateEngine::ShowResultsDialogCallbackL
-// ---------------------------------------------------------------------------
-//
-TInt IAUpdateEngine::ShowResultsDialogCallbackL( TAny* aPtr )
-    {
-    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ShowResultsDialogCallbackL() begin");
-    IAUpdateEngine* engine = static_cast<IAUpdateEngine*>( aPtr );
-    //TRAPD( err, engine->ShowResultsDialogL() );
-    TRAP_IGNORE( engine->ShowResultsDialogL() );
-    //appUI->HandleLeaveErrorL( err );
-    IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::ShowResultsDialogCallbackL() end");
-    return KErrNone;
-    }
-
-
-// ---------------------------------------------------------------------------
 // IAUpdateEngine::UpdateQueryCallbackL
 // ---------------------------------------------------------------------------
 //
-TInt IAUpdateEngine::UpdateQueryCallbackL( TAny* aPtr )
+TInt IAUpdateEngine::UpdateQueryCallbackL(TAny* aPtr)
     {
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::UpdateQueryCallbackL() begin");
-    IAUpdateEngine* engine = static_cast<IAUpdateEngine*>( aPtr ); 
+    IAUpdateEngine* engine = static_cast<IAUpdateEngine*> (aPtr);
     //TRAPD( err, engine->ShowUpdateQueryL() );
     TRAP_IGNORE( engine->ShowUpdateQueryL() );
     //if ( err != KErrNone )
@@ -1146,40 +1161,63 @@
     //    }
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::UpdateQueryCallbackL() end");
     return KErrNone;
-    }    
+    }
 
 // ---------------------------------------------------------------------------
 // IAUpdateEngine::AutomaticCheckCallbackL
 // ---------------------------------------------------------------------------
 //    
-    
-TInt IAUpdateEngine::AutomaticCheckCallbackL( TAny* aPtr )    
+
+TInt IAUpdateEngine::AutomaticCheckCallbackL(TAny* aPtr)
     {
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::AutomaticCheckCallbackL() begin");
-    IAUpdateEngine* engine= static_cast<IAUpdateEngine*>( aPtr ); 
-    
-    TInt err = KErrNone;
-    CIAUpdateAutomaticCheck* automaticCheck = NULL;
-    TRAP( err, automaticCheck = CIAUpdateAutomaticCheck::NewL() ); 
-    if ( err != KErrNone )
+    IAUpdateEngine* engine = static_cast<IAUpdateEngine*> (aPtr);
+
+    int err = KErrNone;
+    if (!engine->iAutomaticCheck)
         {
-        engine->HandleLeaveErrorL( err );
+        TRAP( err, engine->iAutomaticCheck = CIAUpdateAutomaticCheck::NewL() );
+        }
+    if (err != KErrNone)
+        {
+        engine->HandleLeaveErrorL(err);
         }
     else
         {
-        CleanupStack::PushL( automaticCheck );
-        TRAP( err, automaticCheck->AcceptAutomaticCheckL() );
-        if ( err != KErrNone )
+        TRAP( err, engine->iAutomaticCheck->AcceptAutomaticCheckL() );
+        if (err != KErrNone)
             {
-            engine->HandleLeaveErrorL( err );
-            }   
-        } 
-    
-    CleanupStack::PopAndDestroy( automaticCheck );
-    
+            engine->HandleLeaveErrorL(err);
+            }
+        }
+
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateEngine::AutomaticCheckCallbackL() end");
     return KErrNone;
     }
 
+// ---------------------------------------------------------------------------
+// IAUpdateEngine::DoPossibleApplicationClose()
+// ---------------------------------------------------------------------------
+//  
+bool IAUpdateEngine::DoPossibleApplicationClose()
+    {
+    //exit from result view if there are no update left
+    bool toBeClosed = false;
+    if (iController->Nodes().Count() == 0 && iController->FwNodes().Count()
+            == 0)
+        {
+        toBeClosed = true;
+        }
+    else if (mStartedFromApplication
+            && iController->ResultsInfo().iCountCancelled == 0
+            && iController->ResultsInfo().iCountFailed == 0)
+        {
+        toBeClosed = true;
+        }
+    if (toBeClosed)
+        {
+        qApp->quit();
+        }
+    return toBeClosed;
+    }
 
-
--- a/iaupdate/IAD/ui/src/iaupdatefirsttimedatefile.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,222 +0,0 @@
-/*
-* Copyright (c) 2007-2008 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:   This module contains the implementation of CIAUpdateFirstTimeDateFile 
-*                class  member functions.
-*
-*/
-
-
-
-
-#include <bautils.h>
-#include <s32file.h>
-#include <sysutil.h>
-
-#include "iaupdatefirsttimedatefile.h"
-
-
-const TInt KDrive( EDriveC );
-const TInt KSizeOfFile( 8 );
-    
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFirstTimeDateFile::NewL
-//
-// -----------------------------------------------------------------------------
-//
-CIAUpdateFirstTimeDateFile* CIAUpdateFirstTimeDateFile::NewL( 
-    const TDesC& aFile )
-    {
-    CIAUpdateFirstTimeDateFile* self =
-        CIAUpdateFirstTimeDateFile::NewLC( aFile );
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFirstTimeDateFile::NewLC
-//
-// -----------------------------------------------------------------------------
-//
-CIAUpdateFirstTimeDateFile* CIAUpdateFirstTimeDateFile::NewLC( 
-    const TDesC& aFile )
-    {
-    CIAUpdateFirstTimeDateFile* self =
-        new( ELeave) CIAUpdateFirstTimeDateFile();
-    CleanupStack::PushL( self );
-    self->ConstructL( aFile );
-    return self;    
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFirstTimeDateFile::CIAUpdateFirstTimeDateFile
-//
-// -----------------------------------------------------------------------------
-//
-CIAUpdateFirstTimeDateFile::CIAUpdateFirstTimeDateFile()
-: CBase(),
-  iFirstTime( 0 )
-    {
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFirstTimeDateFile::ConstructL
-//
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateFirstTimeDateFile::ConstructL( const TDesC& aFile )
-    {
-    User::LeaveIfError( iFsSession.Connect() );
-    User::LeaveIfError( 
-        iFsSession.SetSessionToPrivate( KDrive ) );
-    
-    User::LeaveIfError( iFsSession.SessionPath( iPath ) );
-    BaflUtils::EnsurePathExistsL( iFsSession, iPath );
-    iPath.Append( aFile );
-    
-    // Read data from the file if the file exists.
-    // Otherwise, let default values remain.
-    ReadDataL(); 
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFirstTimeDateFile::~CIAUpdateFirstTimeDateFile
-//
-// -----------------------------------------------------------------------------
-//
-CIAUpdateFirstTimeDateFile::~CIAUpdateFirstTimeDateFile()
-    {
-    iFsSession.Close();
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFirstTimeDateFile::ReadDataL
-//
-// -----------------------------------------------------------------------------
-//
-TBool CIAUpdateFirstTimeDateFile::ReadDataL()
-	{
-	RFile file;
-    TInt err = file.Open( iFsSession, iPath, EFileRead|EFileShareAny );
-    if ( err == KErrNotFound )
-    	{
-    	// File did not exist. 
-    	// So, nothing to do here anymore.
-    	return EFalse;
-    	}
-    User::LeaveIfError( err );
-    	
-    CleanupClosePushL( file );
-    
-    RFileReadStream stream( file, 0 );
-    CleanupClosePushL( stream );
-
-    InternalizeL( stream );
-
-    CleanupStack::PopAndDestroy( &stream );
-    CleanupStack::PopAndDestroy( &file );
-
-    return ETrue;
-	}
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFirstTimeDateFile::WriteDataL
-//
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateFirstTimeDateFile::WriteDataL()
-	{
-	TDriveUnit driveUnit( KDrive );
-	if ( SysUtil::DiskSpaceBelowCriticalLevelL( 
-	        &iFsSession, KSizeOfFile, driveUnit ) )
-	    {
-		User::Leave( KErrDiskFull );
-	    }
-	
-	RFile file;
-    User::LeaveIfError( 
-        file.Replace( iFsSession, iPath, EFileWrite|EFileShareAny ) );
-    CleanupClosePushL( file );
-    
-    RFileWriteStream stream( file, 0 );
-    CleanupClosePushL( stream );
-
-    ExternalizeL( stream );
-    
-    stream.CommitL();
-    
-    CleanupStack::PopAndDestroy( &stream );
-    CleanupStack::PopAndDestroy( &file );
-	}
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFirstTimeDateFile::FirstTime
-//
-// -----------------------------------------------------------------------------
-//
-const TTime& CIAUpdateFirstTimeDateFile::FirstTime() const
-    {
-    return iFirstTime;
-    }
-    
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFirstTimeDateFile::SetCurrentFirstTime
-//
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateFirstTimeDateFile::SetCurrentFirstTime()
-    {
-    TTime universalTime;
-    universalTime.UniversalTime();
-    iFirstTime = universalTime;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFirstTimeDateFile::InternalizeL
-//
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateFirstTimeDateFile::InternalizeL( RReadStream& aStream )
-	{
-	// If you make changes here, 
-	// remember to update ExternalizeL accordingly!!!
-
-	TInt64 firstTime( 0 );
-	aStream >> firstTime;
-    iFirstTime = firstTime;
- 	}
-
-
-// -----------------------------------------------------------------------------
-// CIAUpdateFirstTimeDateFile::ExternalizeL
-//
-// -----------------------------------------------------------------------------
-//
-void CIAUpdateFirstTimeDateFile::ExternalizeL( RWriteStream& aStream )
-	{
-	// If you make changes here, 
-	// remember to update InternalizeL accordingly!!!
-
-	TInt64 firstTime( FirstTime().Int64() );
-	aStream << firstTime;
-	}
--- a/iaupdate/IAD/ui/src/iaupdatefirsttimeinfo.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/src/iaupdatefirsttimeinfo.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 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"
@@ -20,7 +20,6 @@
 
 //INCLUDES
 #include "iaupdatefirsttimeinfo.h"
-#include "iaupdatefirsttimedatefile.h"
 
 #include <bautils.h>  // bafl.lib 
 #include <s32file.h>  // estor.lib
@@ -108,19 +107,8 @@
     iAgreementAccepted = ETrue;
     WriteDataL();
     }
-    
-// ---------------------------------------------------------------------------
-// CIAUpdateFirstTimeInfo::SetAgreementAskedL
-// Set Nokia agreement as asked (prompted) to an user
-// ---------------------------------------------------------------------------
-//
-void CIAUpdateFirstTimeInfo::SetAgreementAskedL()
-    {
-    ReadDataL();
-    iAgreementAsked = ETrue;
-    WriteDataL();
-    }
-        
+  
+       
 // ---------------------------------------------------------------------------
 // CIAUpdateFirstTimeInfo::SetAutomaticUpdatesAskedL
 // Set automatic update checks as prompted to an use
@@ -132,26 +120,6 @@
 	iAutomaticUpdateChecksAsked = ETrue;
     WriteDataL();
     }
-    
-// ---------------------------------------------------------------------------
-// CIAUpdateFirstTimeInfo::SetFirstTimeIfNotSetL
-// 
-// ---------------------------------------------------------------------------
-//
-void CIAUpdateFirstTimeInfo::SetFirstTimeIfNotSetL()
-    {
-	if ( !AutomaticUpdateChecksAskedL() )
-	    {
-		CIAUpdateFirstTimeDateFile* firstTimeDateFile = 
-		      CIAUpdateFirstTimeDateFile::NewLC( KIAUpdateFirstTimeDateFile );
-		if ( firstTimeDateFile->FirstTime().Int64() == 0 )
-		    {
-			firstTimeDateFile->SetCurrentFirstTime();
-			firstTimeDateFile->WriteDataL();
-		    }
-		CleanupStack::PopAndDestroy( firstTimeDateFile );   
-	    }
-    }
 
 // ---------------------------------------------------------------------------
 // CIAUpdateFirstTimeInfo::AgreementAcceptedL
@@ -164,18 +132,6 @@
     return iAgreementAccepted;
     }
 
-
-// ---------------------------------------------------------------------------
-// CIAUpdateFirstTimeInfo::AgreementAskedL
-// Is Nokia agreement of Application Update already asked 
-// ---------------------------------------------------------------------------
-//
-TBool CIAUpdateFirstTimeInfo::AgreementAskedL()
-    {
-	ReadDataL();
-	return iAgreementAsked;
-    }
-
 // ---------------------------------------------------------------------------
 // CIAUpdateFirstTimeInfo::AutomaticUpdateChecksAskedL
 // Is activation for automatic update cheks from network already asked 
@@ -187,37 +143,6 @@
     return iAutomaticUpdateChecksAsked;
     }
 
-// ---------------------------------------------------------------------------
-// CIAUpdateFirstTimeInfo::FirstTimeDelayL
-// 
-// ---------------------------------------------------------------------------
-//    
-TBool CIAUpdateFirstTimeInfo::FirstTimeDelayL()
-    {
-    TBool firstTimeDelay = EFalse;
-    if ( !AutomaticUpdateChecksAskedL() )
-	    {
-		CIAUpdateFirstTimeDateFile* firstTimeDateFile = 
-		      CIAUpdateFirstTimeDateFile::NewL( KIAUpdateFirstTimeDateFile );
-    
-        TTime firstTime( firstTimeDateFile->FirstTime() );
-  
-        delete firstTimeDateFile;
-  
-        TTime expireTime( firstTime );
-
-        expireTime += KFirstTimeDelayInDays;
-    
-        TTime universalTime;
-        universalTime.UniversalTime();
-
-        if ( universalTime < expireTime && universalTime >= firstTime )
-            {
-        	firstTimeDelay = ETrue;
-            }
-	    }
-    return firstTimeDelay;	
-    }
 
 // -----------------------------------------------------------------------------
 // CIAUpdateFirstTimeInfo::ReadDataL
@@ -231,7 +156,6 @@
     if ( err == KErrNotFound )
     	{
     	iAgreementAccepted = EFalse;
-	    iAgreementAsked = EFalse;
 	    iAutomaticUpdateChecksAsked = EFalse; 
     	}
     else
@@ -282,7 +206,6 @@
 void CIAUpdateFirstTimeInfo::InternalizeL( RReadStream& aStream )
 	{
 	iAgreementAccepted = aStream.ReadInt32L();
-	iAgreementAsked = aStream.ReadInt32L();
 	iAutomaticUpdateChecksAsked = aStream.ReadInt32L();
 	}
 
@@ -295,7 +218,6 @@
 void CIAUpdateFirstTimeInfo::ExternalizeL( RWriteStream& aStream )
 	{
 	aStream.WriteInt32L( iAgreementAccepted );
-	aStream.WriteInt32L( iAgreementAsked );	
 	aStream.WriteInt32L( iAutomaticUpdateChecksAsked );
 	}
     
--- a/iaupdate/IAD/ui/src/iaupdatehistoryview.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-/*
-* 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:   This module contains the implementation of IAUpdateHistoryView
-*                class member functions.
-*
-*/
-
-
-#include "iaupdatehistoryview.h"
-
-IAUpdateHistoryView::IAUpdateHistoryView()
-    {
-    // Create the view from DocML
-    }
-
-IAUpdateHistoryView::~IAUpdateHistoryView()
-    {
-    }
--- a/iaupdate/IAD/ui/src/iaupdatemainview.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/src/iaupdatemainview.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -17,8 +17,12 @@
 */
 
 #include <hbaction.h>
-#include <qgraphicswidget>
-//#include <hblistview.h>
+#include <QGraphicsWidget>
+#include <QGraphicsLayout>
+#include <QGraphicsLayoutItem>
+#include <QGraphicsLinearLayout>
+
+#include <hbdockwidget.h>
 #include <hblistwidget.h>
 #include <hblistviewitem.h>
 #include <hblistwidgetitem.h>
@@ -27,22 +31,41 @@
 #include <hbdocumentloader.h>
 #include <xqconversions.h>
 #include <hbmessagebox.h>
+#include <hblabel.h>
+#include <hbgroupbox.h>
+#include <hbdataform.h>
 
 #include "iaupdatemainview.h"
 #include "iaupdateengine.h"
 #include "iaupdateagreement.h"
 #include "iaupdatedeputils.h"
+#include "iaupdatedialogutil.h"
+#include "iaupdateversion.h"
 
 #include "iaupdatedebug.h"
 
+
+
 const int KKiloByte = 1024;
 const int KMegaByte = 1024 * 1024;
 const int KMaxShownInKiloBytes = 10 * KMegaByte;
 
 
 IAUpdateMainView::IAUpdateMainView(IAUpdateEngine *engine):
-mEngine( engine )        
+mEngine(engine)        
 {
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::IAUpdateMainView() begin");
+    mFwListView = NULL;
+    mApplicationUpdatesGroupBox = NULL;;
+    mFwNSUGroupBox = NULL;
+    mContentDataForm = NULL;
+    mDialogUtil = NULL;
+    mDialogState = NoDialog;
+    mPrimaryAction = NULL;
+    mNode = NULL;
+    mSelectionUpdate = false;
+    mSelectionConnect = false;
+    
     HbDocumentLoader loader;
     bool ok = false;
     loader.load(":/xml/iaupdate_mainview.docml", &ok);
@@ -51,16 +74,15 @@
     Q_ASSERT_X(ok, "Software update", "Invalid docml file");
     // Create the view from DocML
     
-    //QGraphicsWidget* widget = loader.findWidget("view");
-    HbView* widget = qobject_cast<HbView*>(loader.findWidget("view"));
-    Q_ASSERT_X(widget != 0, "Software update", "View not found");
-    QString viewTitle(widget->title());
+    HbView* loadedWidget = qobject_cast<HbView*>(loader.findWidget("view"));
+    Q_ASSERT_X(loadedWidget != 0, "Software update", "View not found");
+    QString viewTitle(loadedWidget->title());
     // Set the IAUpdateMainView view to be the widget that was loaded from the xml
-    setWidget(widget);
+    setWidget(loadedWidget);
     setTitle(viewTitle);
       
     HbToolBar *toolBar = qobject_cast< HbToolBar*>( loader.findWidget("viewToolbar") );
-    setToolBar(toolBar);
+    //setToolBar(toolBar);
     
     HbMenu *menu = qobject_cast< HbMenu*>( loader.findWidget("viewMenu") );
     setMenu(menu);
@@ -73,29 +95,45 @@
     connect(action, SIGNAL(triggered()), this, SLOT(handleStartUpdate()));
     connect(action_1, SIGNAL(triggered()), this, SLOT(handleSettings()));
     connect(action_2, SIGNAL(triggered()), this, SLOT(handleDisclaimer()));
-
-    //mListView = qobject_cast<HbListView*>( loader.findWidget("listView") ); 
+        
+    mContent = qobject_cast< HbWidget*>( loader.findWidget("content") );
+           
     mListView = qobject_cast<HbListWidget*>( loader.findWidget("listWidget") );
-    //mListView = loader.findWidget("listWidget");
     mListView->setSelectionMode( HbAbstractItemView::MultiSelection );
     
+    connect( mListView, SIGNAL( longPressed( HbAbstractViewItem *, const QPointF & ) ),
+            this, SLOT( handleDetails( HbAbstractViewItem *, const QPointF & ) ) ); 
+        
     HbListViewItem *prototype = mListView->listItemPrototype();
 
     prototype->setGraphicsSize(HbListViewItem::LargeIcon);
-    //prototype->setStretchingStyle(HbListViewItem::StretchLandscape);
-    //prototype->setSecondaryTextRowCount(1,1);
-
+    
+    HbDockWidget *dock = new HbDockWidget(this);
+    HbWidget *dockContainer = new HbWidget(dock);
+    QGraphicsLinearLayout *dockLayout = new QGraphicsLinearLayout(dockContainer);
+    dockLayout->setOrientation(Qt::Vertical);
+    dockContainer->setLayout(dockLayout);
+    
+    mSelections = new HbGroupBox(dockContainer);
+    mSelections->setHeading("Selected 0/0 (0 kB)");
     
-        
-    /*HbListWidgetItem* item = new HbListWidgetItem();
-    QStringList data;
-    data << "Test application" << "Critical";
-    item->setData(QVariant(data), Qt::DisplayRole);
-    mListWidget->addItem(item);*/
+    dockLayout->addItem( mSelections);
+    
+    dockLayout->addItem(toolBar);
+    
+    dock->setWidget(dockContainer);
+    
+    setDockWidget(dock);
+
+
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::IAUpdateMainView() end");
 }
     
 IAUpdateMainView::~IAUpdateMainView()
 {
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::~IAUpdateMainView() begin");
+    
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::~IAUpdateMainView() end");
 }
 
 // -----------------------------------------------------------------------------
@@ -103,236 +141,41 @@
 // Refreshes update list
 // -----------------------------------------------------------------------------
 //    
-void IAUpdateMainView::refresh( const RPointerArray<MIAUpdateNode> &nodes,
-                                const RPointerArray<MIAUpdateFwNode> &fwNodes,
-                                int /*error*/ )
-    {   
-    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refresh begin");
-       
-    mAllNodes.Reset();
-        
-    if ( fwNodes.Count() > 0 )
-        {
-        IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refresh hard code importance");
-        //hardcode the importance of firmware as Critical
-        for ( TInt i = 0; i < fwNodes.Count(); i++ )
-             {
-             fwNodes[i]->Base().SetImportance( MIAUpdateBaseNode::ECritical );
-             }
-         
-        //either NSU or FOTA available
-        if ( fwNodes.Count() == 1 )
-            {
-            IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refresh either NSU or FOTA available");
-            MIAUpdateAnyNode* node = fwNodes[0];
-            mAllNodes.Append( node );
-            }
+void IAUpdateMainView::refresh(const RPointerArray<MIAUpdateNode> &nodes,
+                               const RPointerArray<MIAUpdateFwNode> &fwNodes,
+                               int error)
+{   
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refresh() begin");
+    removeCurrentContentLayout();
         
-        //both NSU and FOTA available, show only FOTA node
-        if ( fwNodes.Count() == 2 )
-            {
-            IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refresh both NSU and FOTA available");
-            MIAUpdateAnyNode* node1 = fwNodes[0];
-            MIAUpdateFwNode* fwnode = static_cast<MIAUpdateFwNode*>( node1 );
-            if ( fwnode->FwType() == MIAUpdateFwNode::EFotaDp2  )
-                {
-                mAllNodes.Append( node1 );
-                }
-            else
-                {
-                MIAUpdateAnyNode* node2 = fwNodes[1];
-                mAllNodes.Append( node2 );
-                }
-            }
-        }
+    refreshFirmwareUpdates(fwNodes);
+    
+    refreshApplicationUpdates(nodes);
     
-   
-    for( int i = 0; i < nodes.Count(); ++i ) 
-        {
-        MIAUpdateAnyNode* node = nodes[i];
-        mAllNodes.Append( node );
-        }
-        
-    mListView->clear();
-    QItemSelectionModel *selectionModel = mListView->selectionModel();  
-    selectionModel->clear();
-    HbIcon icon(QString(":/icons/qgn_menu_swupdate"));
-    
-    for( int j = 0; j < mAllNodes.Count(); ++j ) 
+    if (nodes.Count() == 0 && fwNodes.Count() == 0 && 
+        error != KErrCancel && error != KErrAbort)
+    {    
+        if (!mContentDataForm)
         {
-        MIAUpdateAnyNode* node = mAllNodes[j];
-        int sizeInBytes = node->Base().ContentSizeL();
-
-        int size = 0;
-        TBool shownInMegabytes = EFalse;        
-        if ( sizeInBytes >= KMaxShownInKiloBytes )
-            {
-            shownInMegabytes = ETrue;
-            size = sizeInBytes / KMegaByte;
-            if ( sizeInBytes % KMegaByte != 0 )
-                {
-                size++;
-                }
-            }
-        else 
-            {
-            size = sizeInBytes / KKiloByte;
-            if ( sizeInBytes % KKiloByte != 0 )
-                {
-                size++;
-                }  
-            }
-        QString sizeString;
-        sizeString.setNum(size);        
-        QString importanceDescription;
-        switch( node->Base().Importance() )
-            {        
-            case MIAUpdateBaseNode::EMandatory:
-                {
-                importanceDescription = "Required ";
-                importanceDescription.append(sizeString);
-                if ( shownInMegabytes )
-                    {
-                    importanceDescription.append(" MB" );
-                    }
-                else 
-                    {
-                    importanceDescription.append(" kB" );
-                    }  
-                break;
-                }
-            
-            
-            case MIAUpdateBaseNode::ECritical:
-                {
-                bool isNSU = false;
-                if( node->NodeType() == MIAUpdateAnyNode::ENodeTypeFw )
-                    {
-                    MIAUpdateFwNode* fwnode = static_cast<MIAUpdateFwNode*>( node );          
-                    if ( fwnode->FwType() == MIAUpdateFwNode::EFotiNsu )
-                        {
-                        isNSU = true;
-                        }
-                    }
-                
-                importanceDescription = "Important ";
-                if ( !size || isNSU )
-                    {
-                    //for firmware when size info is not provided by server
-                    }
-                else
-                    {
-                    importanceDescription.append(sizeString);
-                    if ( shownInMegabytes )
-                        {
-                        importanceDescription.append(" MB" );
-                        }
-                    else 
-                        {
-                        importanceDescription.append(" kB" );
-                        } 
-                    }
-     
-                break;
-                }
+            mContentDataForm  = new HbDataForm(mContent); 
+        }
+        QGraphicsLinearLayout *linearLayout = (QGraphicsLinearLayout*) mContent->layout();
+        linearLayout->addItem(mContentDataForm);
+        QString formText;
         
-            case MIAUpdateBaseNode::ERecommended:
-                {
-                importanceDescription = "Recommended ";
-                importanceDescription.append(sizeString);
-                if ( shownInMegabytes )
-                    {
-                    importanceDescription.append(" MB" );
-                    }
-                else 
-                    {
-                    importanceDescription.append(" kB" );
-                    }  
-                break;
-                }
-        
-            case MIAUpdateBaseNode::ENormal:
-                {
-                importanceDescription = "Optional ";
-                importanceDescription.append(sizeString);
-                if ( shownInMegabytes )
-                    {
-                     importanceDescription.append(" MB" );
-                    }
-                else 
-                    {
-                    importanceDescription.append(" kB" );
-                    }  
-                break;
-                }
-
-            default:
-                {
-                break;
-                }
-            }
-            
-            //AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr );    
-            
-            HbListWidgetItem *item = new HbListWidgetItem();    
-            QString name = XQConversions::s60DescToQString(node->Base().Name());
-            if ( node->NodeType() == MIAUpdateAnyNode::ENodeTypeFw ) 
-                {
-                name.append(" DEVICE SOFTWARE");
-                }
-            item->setText(name);
-            item->setSecondaryText(importanceDescription);
-            item->setIcon(icon);
-             mListView->addItem(item); 
- 
-            if ( node->Base().IsSelected() )
-                {
-                int count = mListView->count();
-                QModelIndex modelIndex = mListView->model()->index(count-1,0);
-                selectionModel->select(modelIndex, QItemSelectionModel::Select);
-                }
-
-               
-            
-        /*if ( nodes.Count() == 0 )
-            {
-            HBufC* emptyText = NULL;
-            if ( aError )
-                {
-                if ( aError == KErrCancel || aError == KErrAbort )
-                    {
-                    emptyText = KNullDesC().AllocLC();
-                    }
-                else
-                    {
-                    emptyText = StringLoader::LoadLC( R_IAUPDATE_REFRESH_FAILED );  
-                    }
-                }
-            else
-                {
-                emptyText = StringLoader::LoadLC( R_IAUPDATE_TEXT_NO_UPDATES ); 
-                }
-            
-            iListBox->View()->SetListEmptyTextL( *emptyText );
-            CleanupStack::PopAndDestroy( emptyText );
-            iListBox->ScrollBarFrame()->SetScrollBarVisibilityL( 
-                    CEikScrollBarFrame::EOff, CEikScrollBarFrame::EOff );  
-            }
+        if (error == KErrNone)
+        {
+            formText = QString("Applications are up to date");
+        }
         else
-            {
-            if ( iListBox->CurrentItemIndex() == KErrNotFound )
-                {
-                iListBox->SetCurrentItemIndex( aNodes.Count() - 1 );
-                }
-            }*/
-            
-        //iListBox->HandleItemAdditionL();
+        {
+            formText = QString("Refreshing failed. Try again later.");
         }
-     connect(selectionModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
-                    this, SLOT(handleSelectionChanged(QItemSelection)));     
-    
-     IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refresh end");
-     }
+        mContentDataForm->setDescription(formText);
+    }
+    updateSelectionInfoInDock();  
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refresh() end");
+}
 
 
 
@@ -340,349 +183,504 @@
 void IAUpdateMainView::handleStartUpdate()
 {
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleStartUpdate() begin");
-    bool firmwareUpdate = false; 
-    RPointerArray<MIAUpdateAnyNode> selectedNodes;
-    getSelectedNodes(selectedNodes);
-    if (selectedNodes.Count() > 0)
-        {
-        if ( selectedNodes[0]->NodeType() == MIAUpdateAnyNode::ENodeTypeFw )
-            {
-            //the marking logic will make sure firmware won't be marked with normal sis updates
-            //at the same time.
-            firmwareUpdate = true;
-            }
-        }
-    selectedNodes.Close();
-    //mEngine->StartUpdate(firmwareUpdate);
+    mEngine->StartUpdate(fotaSelected());
     IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleStartUpdate() end");
 }
 
 
 void IAUpdateMainView::handleSettings()
 {
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleSettings() begin");
+    emit toSettingView();
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleSettings() end");
 }
 
 void IAUpdateMainView::handleDisclaimer()
 {
-    CIAUpdateAgreement* agreement = CIAUpdateAgreement::NewLC();
-    agreement->ShowAgreementL();
-    CleanupStack::PopAndDestroy( agreement);
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleDisclaimer() begin");
+    if (!mDialogUtil)
+    {
+        mDialogUtil = new IAUpdateDialogUtil(this);
+    }
+    if (mDialogUtil)
+    {
+        HbAction *primaryAction = new HbAction("OK");
+        mDialogUtil->showAgreement(primaryAction);
+    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleDisclaimer() end");
+}
+
+void IAUpdateMainView::handleDetails(HbAbstractViewItem * item, const QPointF &)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleDetails() begin");
+    int ind = item->modelIndex().row();
+    if (getApplicationNode(ind) != NULL)
+    {    
+        showDetails(*getApplicationNode(ind));
+    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleDetails() end");
 }
 
-void IAUpdateMainView::handleSelectionChanged(QItemSelection itemSelection)
+void IAUpdateMainView::handleFotaDetails(HbAbstractViewItem *, const QPointF &)
 {
-    QModelIndexList indexList = itemSelection.indexes(); 
-    bool changedItemFound = false; 
-    for (int i = 0; !changedItemFound && i < mAllNodes.Count(); ++i)
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleFotaDetails begin");
+    //only one FOTA item in a list, just use it
+    for (int i = 0; i < mFwNodes.Count(); i++)
     {
-        bool currentlySelected = false; 
-        for (int j = 0; !currentlySelected && j < indexList.count(); ++j)
+        if (mFwNodes[i]->FwType() == MIAUpdateFwNode::EFotaDp2)
         {
-            //QModelIndex modelIndex = indexList.at(j);
-            //modelIndex.row();
-            if (i == indexList.at(j).row())
-            {
-                currentlySelected = true;
+            showDetails(*mFwNodes[i]);
+        }
+    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleFotaDetails end");
+}
+
+
+void IAUpdateMainView::handleSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleSelectionChanged begin");
+    if (!mSelectionUpdate)
+    {
+        bool changedItemFound = false; 
+        QModelIndexList indexList = selected.indexes();
+        for (int i = 0; !changedItemFound && i < indexList.count(); ++i)
+        {    
+            changedItemFound = true;
+            markListItem(true, indexList.at(i).row());
+        }
+        if (!changedItemFound)
+        {
+            indexList = deselected.indexes();
+            for (int i = 0; !changedItemFound && i < indexList.count(); ++i)
+            {    
+                changedItemFound = true;
+                markListItem(false, indexList.at(i).row());
             }
         }
-        if (currentlySelected !=  mAllNodes[i]->Base().IsSelected())
-        {
+    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleSelectionChanged end");
+}
+
+void IAUpdateMainView::handleFwSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleFwSelectionChanged begin");
+    if (!mSelectionUpdate)
+    {
+        bool changedItemFound = false; 
+        QModelIndexList indexList = selected.indexes();
+        for (int i = 0; !changedItemFound && i < indexList.count(); ++i)
+        {    
             changedItemFound = true;
-            markListItem(currentlySelected,i);
-            updateSelectionsToList();
+            markFotaItem(true);
+        }
+        if (!changedItemFound)
+        {
+            indexList = deselected.indexes();
+            for (int i = 0; !changedItemFound && i < indexList.count(); ++i)
+            {    
+                changedItemFound = true;
+                markFotaItem(false);
+            }
         }
     }
-
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::handleFwSelectionChanged end");
 }
 
-void IAUpdateMainView::getSelectedNodes(RPointerArray<MIAUpdateAnyNode> &selectedNodes) const
+
+void IAUpdateMainView::dialogFinished(HbAction *action)
 {
-    for (int i = 0; i < mAllNodes.Count(); ++i)
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::dialogFinished begin");
+    DialogState dialogState = mDialogState;
+    mDialogState = NoDialog;
+    
+    switch ( dialogState )
     {
-        if (mAllNodes[i]->Base().IsSelected())
-        {
-            selectedNodes.Append(mAllNodes[i]);
+        case Dependencies:
+            if (action == mPrimaryAction)
+            {
+                updateSelectionsToNodeArray(*mNode,mMark);
+            }
+            updateSelectionsToList();
+            updateSelectionInfoInDock();
+            break;
+        case CannotOmit:    
+            break;
+        case Details:
+            break; 
+        default: 
+            break;
+    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::dialogFinished end");
+}
+
+bool IAUpdateMainView::fotaSelected() const
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::fotaSelected() begin");
+    bool selected = false;
+    for (int i = 0; i < mFwNodes.Count() && !selected; ++i)
+    {
+        if ( mFwNodes[i]->FwType() == MIAUpdateFwNode::EFotaDp2 && mFwNodes[i]->Base().IsSelected() )
+        {    
+            selected = true;
         }
     }
+    if (selected)
+        {
+        IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::fotaSelected() Fota item is selected");
+        }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::fotaSelected() end");
+    return selected;
 }
 
+
+
 void IAUpdateMainView::markListItem(bool mark, int index)
 {
+    IAUPDATE_TRACE_2("[IAUPDATE] IAUpdateMainView::markListItem() begin mark: %d index %d", mark, index);
     if (mark)
     {
         //It's Mark Command
-        RPointerArray<MIAUpdateAnyNode> selectedNodes;
-        getSelectedNodes(selectedNodes); 
+        if (fotaSelected())
+        {    
+            //FOTA item is selected, unmark FOTA item
+            //FOTA item and application update items can't be selected at the same time 
+            markFotaItem(false);
+        }    
+    }
+       
+    bool accepted = false;
         
-        //There are selected items already and type are different with the current one
-        if (selectedNodes.Count() > 0 && (mAllNodes[index]->NodeType() != selectedNodes[0]->NodeType()))
-        {       
-            // firmware item and normal sis items can't be selected at the same time
-            // unmark the selected nodes.
-            for (int i = 0; i < selectedNodes.Count(); i++)
-            {                
-                int index = mAllNodes.Find(selectedNodes[i]);
-                mAllNodes[index]->Base().SetSelected(false);
+    if(index > -1)
+    {
+        accepted = true;
+        MIAUpdateNode* node = mNodes[index];
+        RPointerArray<MIAUpdateNode> mands;
+        RPointerArray<MIAUpdateNode> deps;
+           
+        if (mark)
+        {
+            TRAPD(err,IAUpdateDepUtils::GetDependenciesL(*node, mNodes, deps));
+            if (err != KErrNone)
+            {
+                deps.Close();
+                updateSelectionsToList();
+                IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::markListItem() return end");
+                return;
+            }
+            if (!getMandatoryNodes(mands))
+                {
+                // error when creating mandatory node list
+                mands.Close();
+                updateSelectionsToList();
+                IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::markListItem() return end");
+                return;
+                }
+        }
+        else
+        {
+            //mandatory item is not allowed to be unmarked
+            if (mNodes[index]->Base().Importance() == MIAUpdateBaseNode::EMandatory)
+            {
+                //show dialog  
+                showUpdateCannotOmitDialog();
+                updateSelectionsToList();
+                IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::markListItem() return end");
+                return;
+            }
+            TRAPD(err,IAUpdateDepUtils::GetDependantsL(*node, mNodes, deps));  
+            if (err != KErrNone)
+            {
+                deps.Close();
+                updateSelectionsToList();
+                IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::markListItem() return end");
+                return;
+            }
+            // item is not allowed to be unmarked if its dependant is mandatory
+            bool mandatoryDependantFound = false;
+            for(int i = 0; i < deps.Count() && !mandatoryDependantFound; i++)
+            {
+                if (deps[i]->Base().Importance() == MIAUpdateBaseNode::EMandatory)
+                {
+                    mandatoryDependantFound = true;
+                }
+            }
+            if (mandatoryDependantFound)
+            {
+                showUpdateCannotOmitDialog();
+                deps.Close();
+                updateSelectionsToList();
+                IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::markListItem() return end");
+                return;
             }
         }
-        selectedNodes.Close();
-    }
-    
-    //there is no selected items or the type is the same with the current one
-    
-    if (mAllNodes[index]->NodeType() == MIAUpdateAnyNode::ENodeTypeFw )
-    {
-        mAllNodes[index]->Base().SetSelected(mark);       
-        return;
-    }
-    
-    if (mAllNodes[index]->NodeType() == MIAUpdateAnyNode::ENodeTypeNormal )
-    {
-        bool accepted = false;
-        
-        if(index > -1)
+             
+        int depCount = deps.Count();
+           
+        if (depCount > 0)
         {
-            accepted = true;
-            
-            MIAUpdateNode* node = static_cast<MIAUpdateNode*>(mAllNodes[index]);
-            RPointerArray<MIAUpdateAnyNode> mands;
-            RPointerArray<MIAUpdateNode> deps;
-           
+            QString text;
+            QString names;
+            MIAUpdateNode* depNode = NULL;
+            QString separator(",");
+                       
+            for(int i = 0; i < depCount; i++)  
+            {
+                depNode = deps[i];
+                if (i > 0)
+                {
+                    names.append(separator);
+                    names.append(QString(" "));
+                }
+                names.append(XQConversions::s60DescToQString(depNode->Base().Name()));
+            }
+
             if (mark)
             {
-                TRAPD(err,IAUpdateDepUtils::GetDependenciesL(*node, mAllNodes, deps));
-                if (err != KErrNone)
+                if (depCount > 1) 
                 {
-                    deps.Close();
-                    return;
+                    text.append("This update needs also updates "); 
+                    text.append(names);
+                    text.append(" for working");
+                } 
+                else
+                {
+                    text.append("This update needs also \""); 
+                    text.append(names);
+                    text.append("\" for working");
+                    }
                 }
-                if (!getMandatoryNodes(mands))
+            else
+            {
+                if (depCount > 1) 
+                {
+                    text.append("Updates "); 
+                    text.append(names);
+                    text.append(" need this update for working");
+                } 
+                else
                 {
-                    // error when creating mandatory node list
-                    mands.Close();
-                    return;
-                }
+                    text.append("Update \""); 
+                    text.append(names);
+                    text.append("\" needs this update for working");
+                }   
+            }
+                
+            if (mark && mNodes[index]->Base().Importance() == MIAUpdateBaseNode::EMandatory)
+            {
+                // depencencies of mandatory update are also selected without showing dialog
+                accepted = true;
             }
             else
             {
-                //mandatory item is not allowed to be unmarked
-                if (mAllNodes[index]->Base().Importance() == MIAUpdateBaseNode::EMandatory)
-                {
-                    //show dialog  
-                    showUpdateCannotOmitDialog();
-                    return;
-                }
-                
-                //CleanupClosePushL( deps );
-                TRAPD(err,IAUpdateDepUtils::GetDependantsL(*node, mAllNodes, deps));  
-                if (err != KErrNone)
-                {
-                    deps.Close();
-                    return;
-                }
-                // item is not allowed to be unmarked if its dependant is mandatory
-                bool mandatoryDependantFound = false;
-                for(int i = 0; i < deps.Count() && !mandatoryDependantFound; i++)
-                {
-                    if (deps[i]->Base().Importance() == MIAUpdateBaseNode::EMandatory)
-                    {
-                        mandatoryDependantFound = true;
-                    }
-                }
-                if (mandatoryDependantFound)
-                {
-                    showUpdateCannotOmitDialog();
-                    deps.Close();
-                    return;
-                }
+                mNode = node;
+                mMark = mark;
+                accepted = false;
+                showDependenciesFoundDialog(text);
             }
-             
-            int depCount = deps.Count();
-           
-            if (depCount > 0)
-            {
-                QString text;
-                QString names;
-                MIAUpdateNode* depNode = NULL;
-                QString separator(",");
-                       
-                for(int i = 0; i < depCount; i++)  
-                {
-                    depNode = deps[i];
-                    if (i > 0)
-                    {
-                        names.append(separator);
-                        names.append(QString(" "));
-                    }
-                    names.append(XQConversions::s60DescToQString(depNode->Base().Name()));
-                }
-                
+        }
+        if (accepted)
+        {    
+            updateSelectionsToNodeArray(*node, mark);   
+        }
+    }
+    if (accepted)
+    {    
+        updateSelectionsToList();
+        updateSelectionInfoInDock();
+    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::markListItem() end");
+}       
+
 
-                if (mark)
-                {
-                    if (depCount > 1) 
-                    {
-                        text.append("This update needs also updates "); 
-                        text.append(names);
-                        text.append(" for working");
-                        //resourceId = R_IAUPDATE_DEPENDENCY_MARK_MANY;
-                    } 
-                    else
-                    {
-                        text.append("This update needs also \""); 
-                        text.append(names);
-                        text.append("\" for working");
-                        //resourceId = R_IAUPDATE_DEPENDENCY_MARK_ONE;    
-                    }
-                }
-                else
-                {
-                    if (depCount > 1) 
-                    {
-                        text.append("Updates "); 
-                        text.append(names);
-                        text.append(" need this update for working");
-                        //resourceId = R_IAUPDATE_DEPENDENCY_UNMARK_MANY;
-                    } 
-                    else
-                    {
-                        text.append("Update \""); 
-                        text.append(names);
-                        text.append("\" needs this update for working");
-                        //resourceId = R_IAUPDATE_DEPENDENCY_UNMARK_ONE;  
-                    }   
-                }
+void IAUpdateMainView::markFotaItem(bool mark)
+{
+    IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateMainView::markFotaItem() begin mark: %d", mark);
+    if (mark)
+    {
+        //It's Mark Command
                 
-                if (mark && mAllNodes[index]->Base().Importance() == MIAUpdateBaseNode::EMandatory)
-                {
-                    // depencencies of mandatory update are also selected without showing dialog
-                    accepted = true;
-                }
-                else
-                {
-                    accepted = showDependenciesFoundDialog(text);
-                }
+        //if some of application update item(s) are selected, unmark them
+        //FOTA item and application update items can't be selected at the same time 
+        bool deselected = false;
+        for (int i = 0; i < mNodes.Count(); ++i)
+        {
+            if (mNodes[i]->Base().IsSelected())
+            {
+                mNodes[i]->Base().SetSelected(false);
             }
-            
-            if (accepted)
+        } 
+        if (deselected)
+        {    
+            // umnmarked items to be updated also to UI
+            updateSelectionsToList();
+        }    
+    }
+    for (int j = 0; j < mFwNodes.Count(); ++j)
+    {    
+        if (mFwNodes[j]->FwType() == MIAUpdateFwNode::EFotaDp2)
+        {
+            mFwNodes[j]->Base().SetSelected(mark);
+            if (mark)
             {
-                for(int j = 0; j < depCount; j++)
-                {
-                    int depNodeInd = mAllNodes.Find(deps[j]);
-                    mAllNodes[depNodeInd]->Base().SetSelected(mark);
-                }
-                deps.Close();
-                int nodeInd = mAllNodes.Find(node);
-                mAllNodes[nodeInd]->Base().SetSelected(mark);
+                mFwListView->selectionModel()->select(mFwListView->model()->index(0,0),QItemSelectionModel::Select);
             }
             else
             {
-                //user rejects the dependency dialog
-                deps.Close();
-                if (mark)
-                {
-                    mands.Close();
-                }
-                return;
+                mFwListView->selectionModel()->select(mFwListView->model()->index(0,0),QItemSelectionModel::Deselect);
             }
-                
-            //mark all of the mandatory items
+        }
+    }
+    updateSelectionInfoInDock();
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::markFotaItem() end");
+}
+
+
+
+
+
+void IAUpdateMainView::updateSelectionsToNodeArray(MIAUpdateNode &node, bool mark)   
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::updateSelectionsToNodeArray() begin");
+    RPointerArray<MIAUpdateNode> deps;  
+    TInt err = KErrNone;
+    if (mark)
+    {
+        TRAP(err,IAUpdateDepUtils::GetDependenciesL(node, mNodes, deps));
+    }
+    else
+    {
+        TRAP(err,IAUpdateDepUtils::GetDependantsL(node, mNodes, deps)); 
+    }
+    if (err  == KErrNone )
+    {    
+        int depCount = deps.Count(); 
+        for(int i = 0; i < depCount; i++)
+        {
+            int depNodeInd = mNodes.Find(deps[i]);
+            mNodes[depNodeInd]->Base().SetSelected(mark);
+        }
+        deps.Close();
+        int nodeInd = mNodes.Find(&node);
+        mNodes[nodeInd]->Base().SetSelected(mark);
+    }                
+    
+    //mark all of the mandatory items
+    if ( mark )
+    {    
+        RPointerArray<MIAUpdateNode> mands;    
+        if (getMandatoryNodes(mands))
+        {
             int mandCount = mands.Count();
-            if (mandCount > 0 && mark)
+            if (mandCount > 0)
             {
-                for(int j = 0; j < mandCount; j++)
+                for(int i = 0; i < mandCount; i++)
                 {
-                    int mandNodeInd = mAllNodes.Find(mands[j]);
-                    mAllNodes[mandNodeInd]->Base().SetSelected(mark);
-                    if (mAllNodes[mandNodeInd]->NodeType() == MIAUpdateAnyNode::ENodeTypeNormal)
+                    int mandNodeInd = mNodes.Find(mands[i]);
+                    mNodes[mandNodeInd]->Base().SetSelected(mark);
+                    if (mNodes[mandNodeInd]->NodeType() == MIAUpdateAnyNode::ENodeTypeNormal)
                     {
                         // mark also all dependencies of a mandatory item
-                        MIAUpdateNode* dependencyNode = static_cast<MIAUpdateNode*>(mAllNodes[mandNodeInd]);
+                        MIAUpdateNode* dependencyNode = mNodes[mandNodeInd];
                         RPointerArray<MIAUpdateNode> dependencies;
-                        TRAPD(err,IAUpdateDepUtils::GetDependenciesL(*dependencyNode, mAllNodes, dependencies));
+                        TRAPD(err,IAUpdateDepUtils::GetDependenciesL(*dependencyNode, mNodes, dependencies));
                         if (err)
                         {
                             dependencies.Close(); 
-                            if (mark)
-                            {
-                                mands.Close();
-                            }
+                            mands.Close();
                             return;
                         }
-                        for(int k = 0; k < dependencies.Count(); k++)
+                        for(int j = 0; j < dependencies.Count(); j++)
                         {
-                            int depNodeInd = mAllNodes.Find(dependencies[k]);
-                            mAllNodes[depNodeInd]->Base().SetSelected(true);
+                            int depNodeInd = mNodes.Find(dependencies[j]);
+                            mNodes[depNodeInd]->Base().SetSelected(true);
                         }
                         dependencies.Close();
                     }
                 }
             }
-            if (mark)
-            {
-                mands.Close();
-            }
-        }  
-        return;
         }
-    return;
+        mands.Close();
     }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::updateSelectionsToNodeArray() end");
+}
 
 
-bool IAUpdateMainView::getMandatoryNodes(RPointerArray<MIAUpdateAnyNode> &mandNodes) const
+bool IAUpdateMainView::getMandatoryNodes(RPointerArray<MIAUpdateNode> &mandNodes) const
 {
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::getMandatoryNodes() begin");
     bool ret = true;
-    for(int i = 0; i < mAllNodes.Count(); ++i)
+    for(int i = 0; i < mNodes.Count(); ++i)
     {
-        if (mAllNodes[i]->Base().Importance() == MIAUpdateBaseNode::EMandatory)
+        if (mNodes[i]->Base().Importance() == MIAUpdateBaseNode::EMandatory)
         {
-            if (mandNodes.Append(mAllNodes[i]) != KErrNone)
+            if (mandNodes.Append(mNodes[i]) != KErrNone)
             {
                 ret = false; 
             }
         }
     }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::getMandatoryNodes() end");
     return ret;
 }
 
-void IAUpdateMainView::showUpdateCannotOmitDialog() const
+void IAUpdateMainView::showUpdateCannotOmitDialog()
 {
-    HbMessageBox messageBox(HbMessageBox::MessageTypeInformation); 
-    messageBox.setText(QString("This required update cannot be omitted"));
-    HbAction okAction("Ok");
-    messageBox.setPrimaryAction(&okAction);
-    messageBox.setTimeout(HbPopup::StandardTimeout);
-    messageBox.show();
-    //messageBox.exec();
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::showUpdateCannotOmitDialog() begin");
+    HbMessageBox *messageBox = new HbMessageBox(HbMessageBox::MessageTypeInformation);
+    messageBox->setText(QString("This required update cannot be omitted"));
+    int actionCount = messageBox->actions().count();
+    for (int i=actionCount-1; i >= 0; i--)
+    { 
+        messageBox->removeAction(messageBox->actions().at(i));
+    }
+    HbAction *okAction = NULL;
+    okAction = new HbAction("Ok");
+    messageBox->addAction(okAction);
+    messageBox->setTimeout(HbPopup::StandardTimeout);
+    messageBox->setAttribute(Qt::WA_DeleteOnClose);
+    mDialogState = CannotOmit;
+    messageBox->open(this, SLOT(dialogFinished(HbAction*)));
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::showUpdateCannotOmitDialog() end");
 }
 
-bool IAUpdateMainView::showDependenciesFoundDialog(QString &text) const
+void IAUpdateMainView::showDependenciesFoundDialog(QString &text)
 {
-    bool accepted = false;
-    HbMessageBox messageBox(HbMessageBox::MessageTypeQuestion);
-    messageBox.setText(text);
-    HbAction continueAction("Continue");
-    messageBox.setPrimaryAction(&continueAction);
-    HbAction cancelAction("Cancel");
-    messageBox.setSecondaryAction(&cancelAction);
-    messageBox.setTimeout(HbPopup::NoTimeout);
-    messageBox.show();
-    //HbAction *selectedAction = messageBox.exec();
-    //if (selectedAction == messageBox.primaryAction())
-    {
-        accepted = true;
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::showDependenciesFoundDialog() begin");
+    HbMessageBox *messageBox = new HbMessageBox(HbMessageBox::MessageTypeQuestion);
+    HbLabel *label = new HbLabel(messageBox);
+    label->setHtml(QString("Depencencies"));
+    messageBox->setHeadingWidget(label);
+    //messageBox->setIconVisible(false);
+        
+    messageBox->setText(text);
+    int actionCount = messageBox->actions().count();
+    for (int i=actionCount-1; i >= 0; i--)
+    { 
+        messageBox->removeAction(messageBox->actions().at(i));
     }
-    return accepted;
+    mPrimaryAction = NULL;
+    mPrimaryAction = new HbAction("Continue");
+    HbAction *secondaryAction = NULL;
+    secondaryAction = new HbAction("Cancel");
+    messageBox->addAction(mPrimaryAction);
+    messageBox->addAction(secondaryAction);
+    messageBox->setTimeout(HbPopup::NoTimeout);
+    messageBox->setAttribute(Qt::WA_DeleteOnClose);
+    mDialogState = Dependencies;
+    messageBox->open(this, SLOT(dialogFinished(HbAction*)));
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::showDependenciesFoundDialog() end");
 }
 
 void IAUpdateMainView::updateSelectionsToList()
 {
-    for(int i = 0; i < mAllNodes.Count(); ++i)
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::updateSelectionsToList() begin");
+    mSelectionUpdate = true;
+    for(int i = 0; i < mNodes.Count(); ++i)
     {
-        if ( mAllNodes[i]->Base().IsSelected() != mListView->selectionModel()->isSelected(mListView->model()->index(i,0)))
+        if ( mNodes[i]->Base().IsSelected() != mListView->selectionModel()->isSelected(mListView->model()->index(i,0)))
         {    
             QItemSelectionModel::SelectionFlag selectionFlag;
-            if ( mAllNodes[i]->Base().IsSelected())
+            if ( mNodes[i]->Base().IsSelected())
             {
                 selectionFlag = QItemSelectionModel::Select;
             }
@@ -693,11 +691,494 @@
             mListView->selectionModel()->select(mListView->model()->index(i,0),selectionFlag);   
         }
     }
+    mSelectionUpdate = false;
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::updateSelectionsToList() end");
 }
 
 
+MIAUpdateNode* IAUpdateMainView::getApplicationNode(int index) const
+{
+    IAUPDATE_TRACE_1("[IAUPDATE] IAUpdateMainView::getApplicationNode() begin index: %d", index);
+    MIAUpdateNode *currentNode = NULL;
+     
+    if (index >= 0 && index < mNodes.Count())
+    {
+        currentNode = mNodes[index];
+    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::getApplicationNode() end");
+    return currentNode;
+}
                 
-                
+void IAUpdateMainView::showDetails(MIAUpdateAnyNode& node)
+{  
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::showDetails() begin");
+    HbMessageBox *messageBox = new HbMessageBox(HbMessageBox::MessageTypeInformation);
+    HbLabel *label = new HbLabel(messageBox);
+    label->setHtml(QString("Details"));
+    messageBox->setHeadingWidget(label);
+       
+    messageBox->setIconVisible(false);
+            
+    QString text;
+    constructDetailsText(node,text); 
+    messageBox->setText(text);
+    messageBox->setTimeout(HbPopup::NoTimeout);
+    messageBox->setAttribute(Qt::WA_DeleteOnClose);
+    mDialogState = Details;
+    messageBox->open(this, SLOT(dialogFinished(HbAction*)));    
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::showDetails() end");
+}                
+        
+
+void IAUpdateMainView::constructDetailsText(MIAUpdateAnyNode &node, QString &text)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::constructDetailsText() begin");
+    text.append(QString("Name:"));
+    text.append(QString("<br />"));
+    QString name = XQConversions::s60DescToQString(node.Base().Name());
+    text.append(name);
+    if (node.NodeType() == MIAUpdateAnyNode::ENodeTypeFw)
+    {    
+        name.append(QString(" Device software"));
+    }
+        
+    text.append(QString("<br />"));
+    text.append(QString("<br />"));
+    
+    text.append(QString("Description:"));
+    text.append(QString("<br />"));
+    QString description;
+    if (node.NodeType() == MIAUpdateAnyNode::ENodeTypeFw)
+    {
+        description = QString("This update improves your device performance and brings you latest features.");
+    }
+    else
+    {    
+        description = XQConversions::s60DescToQString(node.Base().Description());
+    }    
+    text.append(description);
+    text.append(QString("<br />"));
+    text.append(QString("<br />"));
+    
+    
+    if (node.NodeType() == MIAUpdateAnyNode::ENodeTypeNormal)
+    {
+        MIAUpdateNode *iaupdateNode = static_cast<MIAUpdateNode*> (&node);
+        if (iaupdateNode->Type()!= MIAUpdateNode::EPackageTypeServicePack)
+        {
+            text.append(QString("Version:"));
+            text.append(QString("<br />"));
+            QString textVersion;
+            versionText(node.Base().Version(), textVersion);
+            text.append(textVersion);
+            text.append(QString("<br />"));
+            text.append(QString("<br />"));
+        }
+    }
+    if (node.NodeType() == MIAUpdateAnyNode::ENodeTypeFw)
+    {    
+        MIAUpdateFwNode *fwNode = static_cast<MIAUpdateFwNode*> (&node);
+        text.append(QString("Version:"));
+        text.append(QString("<br />"));
+        QString textVersion = XQConversions::s60DescToQString(fwNode->FwVersion1());
+        text.append(textVersion);
+        text.append(QString("<br />"));
+        text.append(QString("<br />"));
+    }
+    
+    int contentSize = node.Base().ContentSizeL();
+    if (contentSize > 0)
+    {
+        text.append(QString("Size:"));
+        text.append(QString("<br />"));
+        QString textFileSize;
+        fileSizeText(contentSize, textFileSize);
+        text.append(textFileSize);
+    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::constructDetailsText() end");
+}
+
+void IAUpdateMainView::versionText(const TIAUpdateVersion &version, QString &versionText)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::versionText() begin");
+    QString stringMajor;
+    stringMajor.setNum(version.iMajor);
+    versionText.append(stringMajor);
+    versionText.append(QString("."));
+    QString stringMinor;
+    stringMinor.setNum(version.iMinor);
+    versionText.append(stringMinor);
+    versionText.append(QString("("));
+    QString stringBuild;
+    stringBuild.setNum(version.iBuild);
+    versionText.append(stringBuild);
+    versionText.append(QString(")"));
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::versionText() end");
+}
+
+void IAUpdateMainView::fileSizeText(int fileSize, QString &text)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::fileSizeText() begin");
+    int size = 0;
+    QString stringUnit;
+    
+    if (fileSize >= KMaxShownInKiloBytes )
+        {
+        stringUnit.append(" MB");
+        size = fileSize / KMegaByte;
+        if ( fileSize % KMegaByte != 0 )
+            {
+            size++;
+            }
+        }
+    else
+        {
+        stringUnit.append(" kB");
+        size = fileSize / KKiloByte;
+        if ( fileSize % KKiloByte != 0 )
+            {
+            size++;
+            }   
+        }
+    text.setNum(size);
+    text.append(stringUnit); 
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::fileSizeText() end");
+}
+
+void IAUpdateMainView::setImportance(MIAUpdateAnyNode *node, QString &importanceDescription)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::setImportance() begin");
+    int sizeInBytes = node->Base().ContentSizeL();
+    int size = 0;
+    bool shownInMegabytes = false;        
+    if (sizeInBytes >= KMaxShownInKiloBytes)
+    {
+        shownInMegabytes = true;
+        size = sizeInBytes / KMegaByte;
+        if (sizeInBytes % KMegaByte != 0)
+        {
+           size++;
+        }
+    }
+    else 
+    {
+        size = sizeInBytes / KKiloByte;
+        if (sizeInBytes % KKiloByte != 0)
+        {
+            size++;
+        }  
+    }
+    QString sizeString;
+    sizeString.setNum(size);     
+    switch(node->Base().Importance())
+    {        
+        case MIAUpdateBaseNode::EMandatory:
+        {
+            importanceDescription = "Required ";
+            importanceDescription.append(sizeString);
+            if (shownInMegabytes)
+            {
+                importanceDescription.append(" MB" );
+            }
+            else 
+            {
+                importanceDescription.append(" kB" );
+            }  
+            break;
+        }
                 
-                
-                
+        case MIAUpdateBaseNode::ECritical:
+        {
+            bool isNSU = false;
+            if(node->NodeType() == MIAUpdateAnyNode::ENodeTypeFw)
+            {
+                MIAUpdateFwNode *fwnode = static_cast<MIAUpdateFwNode*>(node);          
+                if (fwnode->FwType() == MIAUpdateFwNode::EFotiNsu)
+                {
+                   isNSU = true;
+                }
+            }
+            importanceDescription = "Important ";
+            if (!size || isNSU)
+            {
+                //for firmware when size info is not provided by server
+            }
+            else
+            {
+                importanceDescription.append(sizeString);
+                if (shownInMegabytes)
+                {
+                    importanceDescription.append(" MB" );
+                }
+                else 
+                {
+                    importanceDescription.append(" kB" );
+                } 
+            }
+            break;
+        }
+            
+        case MIAUpdateBaseNode::ERecommended:
+        {
+            importanceDescription = "Recommended ";
+            importanceDescription.append(sizeString);
+            if (shownInMegabytes)
+            {
+                importanceDescription.append(" MB" );
+            }
+            else 
+            {
+                importanceDescription.append(" kB" );
+            }  
+            break;
+        }
+            
+        case MIAUpdateBaseNode::ENormal:
+        {
+            importanceDescription = "Optional ";
+            importanceDescription.append(sizeString);
+            if (shownInMegabytes)
+            {
+                importanceDescription.append(" MB" );
+            }
+            else 
+            {
+                importanceDescription.append(" kB" );
+            }  
+            break;
+        }
+
+        default:
+        {
+            break;
+        }
+    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::setImportance() end");
+}    
+
+void IAUpdateMainView::removeCurrentContentLayout()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::removeCurrentContentLayout() begin");
+    int itemCount = mContent->layout()->count();
+    for (int i = 0; i < itemCount; i++)    
+    {
+        mContent->layout()->removeAt(i);
+    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::removeCurrentContentLayout() end");    
+}
+
+void IAUpdateMainView::refreshFirmwareUpdates(const RPointerArray<MIAUpdateFwNode> &fwNodes)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refreshFirmwareUpdates() begin");
+    mFwNodes.Reset();
+            
+    for (int i = 0; i < fwNodes.Count(); i++)
+    {
+        MIAUpdateFwNode *fwnode = (fwNodes[i]);
+        mFwNodes.Append(fwnode);
+        fwnode->Base().SetImportance(MIAUpdateBaseNode::ECritical);
+        if (fwnode->FwType() == MIAUpdateFwNode::EFotaDp2)
+        {
+            refreshFotaUpdate(*fwnode );
+        }
+        else if (fwNodes.Count() == 1 && fwnode->FwType() == MIAUpdateFwNode::EFotiNsu)
+        {
+            refreshNsuUpdate();
+        }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refreshFirmwareUpdates() end");    
+    }    
+}
+
+void IAUpdateMainView::refreshFotaUpdate(MIAUpdateFwNode& fwNode)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refreshFotaUpdate() begin");
+    if (!mFwListView)
+    {
+        mFwListView  = new HbListWidget(mContent);
+        mFwListView->setSelectionMode( HbAbstractItemView::MultiSelection );
+        connect( mFwListView, SIGNAL( longPressed( HbAbstractViewItem *, const QPointF & ) ),
+        this, SLOT( handleFotaDetails( HbAbstractViewItem *, const QPointF & ) ) ); 
+        mFwListView->listItemPrototype()->setGraphicsSize(HbListViewItem::LargeIcon);   
+        mFwListView->listItemPrototype()->setStretchingStyle(HbListViewItem::NoStretching);
+        connect(mFwListView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
+        this, SLOT(handleFwSelectionChanged(QItemSelection,QItemSelection)));     
+    }
+    QGraphicsLinearLayout *linearLayout = (QGraphicsLinearLayout*) mContent->layout();
+    linearLayout->addItem(mFwListView);
+    mFwListView->clear();
+    QItemSelectionModel *selectionModel = mFwListView->selectionModel();  
+    selectionModel->clear();
+    HbListWidgetItem *fwItem = new HbListWidgetItem();
+    QString name(XQConversions::s60DescToQString(fwNode.Base().Name()));
+    name.append(" DEVICE SOFTWARE");
+    fwItem->setText(name);
+    QString importanceDescription;
+    setImportance(&fwNode, importanceDescription);
+    fwItem->setSecondaryText(importanceDescription);
+    HbIcon icon(QString(":/icons/qgn_menu_swupdate"));
+    fwItem->setIcon(icon);
+    if (fwNode.Base().IsSelected())
+    {
+        QModelIndex modelIndex = mFwListView->model()->index(0,0);
+        selectionModel->select(modelIndex, QItemSelectionModel::Select);
+    }
+    mFwListView->addItem(fwItem); 
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refreshFotaUpdate() end");
+}
+
+void IAUpdateMainView::refreshNsuUpdate()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refreshNsuUpdate() begin");
+    if (!mFwNSUGroupBox)
+    {
+        mFwNSUGroupBox = new HbGroupBox(mContent);
+        mFwNSUGroupBox->setHeading("Device software available");
+        HbDataForm *dataForm  = new HbDataForm(mFwNSUGroupBox); 
+        mFwNSUGroupBox->setContentWidget(dataForm);
+        dataForm->setDescription("Use your PC to update the device software ([version %L]) from address www.nokia.com/softwareupdate");
+    }
+    QGraphicsLinearLayout *linearLayout = (QGraphicsLinearLayout*) mContent->layout();
+    linearLayout->addItem(mFwNSUGroupBox);
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refreshNsuUpdate() end");
+}
+
+void IAUpdateMainView::refreshApplicationUpdates(const RPointerArray<MIAUpdateNode> &nodes)
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refreshApplicationUpdates() begin");
+    if (nodes.Count() > 0)
+    {
+        if (!mApplicationUpdatesGroupBox)
+        {
+            mApplicationUpdatesGroupBox = new HbGroupBox(mContent);
+            mApplicationUpdatesGroupBox->setHeading("Application updates");
+        }
+        QGraphicsLinearLayout *linearLayout = (QGraphicsLinearLayout*) mContent->layout();
+        linearLayout->addItem(mApplicationUpdatesGroupBox);
+        linearLayout->addItem(mListView);
+    }
+    mListView->clear();
+    QItemSelectionModel *selectionModel = mListView->selectionModel();  
+    selectionModel->clear();
+    HbIcon icon(QString(":/icons/qgn_menu_swupdate"));
+    mNodes.Reset();
+    for(int i = 0; i < nodes.Count(); ++i) 
+    {
+        MIAUpdateNode *node = nodes[i];
+        mNodes.Append(node);
+        QString importanceDescription;
+        MIAUpdateNode::TUIUpdateState uiState = node->UiState();
+        if (uiState == MIAUpdateNode::ENormal)
+        {
+            setImportance(node, importanceDescription);
+        }
+        else if (uiState == MIAUpdateNode::EUpdated)
+        {
+            importanceDescription = "Updated";
+        }
+        else if (uiState == MIAUpdateNode::EFailed)
+        {
+            importanceDescription = "Failed";
+        }
+        else if (uiState == MIAUpdateNode::EDownloaded)
+        {
+            importanceDescription = "Downloaded";
+        }
+        HbListWidgetItem *item = new HbListWidgetItem();    
+        QString name;
+        if (uiState == MIAUpdateNode::EDownloading)
+        {
+            name = QString("Downloading ");
+        }
+        else if (uiState == MIAUpdateNode::EInstalling)
+        {
+            name = QString("Installing ");
+        }
+        name.append(XQConversions::s60DescToQString(node->Base().Name()));
+        item->setText(name);
+        item->setSecondaryText(importanceDescription);
+        item->setIcon(icon);
+        mListView->addItem(item); 
+         
+        if (node->Base().IsSelected())
+        {
+            int count = mListView->count();
+            QModelIndex modelIndex = mListView->model()->index(count-1,0);
+            selectionModel->select(modelIndex, QItemSelectionModel::Select);
+        }
+    }
+    if (!mSelectionConnect)
+    {    
+        mSelectionConnect = connect(selectionModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
+                        this, SLOT(handleSelectionChanged(QItemSelection,QItemSelection)));     
+    }
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::refreshApplicationUpdates() end");
+}
+
+void IAUpdateMainView::updateSelectionInfoInDock()
+{
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::updateSelectionInfoInDock() begin");
+    int countOfSelectedItems = 0;
+    int countOfAllItems = 0;
+    int selectedSizeInBytes = 0;
+    for (int i = 0; i < mFwNodes.Count(); ++i)
+    {
+        if (mFwNodes[i]->FwType() == MIAUpdateFwNode::EFotaDp2)
+        {
+            countOfAllItems++;
+            if (mFwNodes[i]->Base().IsSelected())
+            {
+                countOfSelectedItems++;
+                selectedSizeInBytes += mFwNodes[i]->Base().ContentSizeL();
+            }
+        }
+    } 
+    countOfAllItems += mNodes.Count();
+    for (int j = 0; j < mNodes.Count(); ++j)
+    {    
+        if (mNodes[j]->Base().IsSelected())
+        {
+            countOfSelectedItems++;
+            selectedSizeInBytes += mNodes[j]->Base().ContentSizeL();
+        }
+    }    
+    
+    int selectedSize = 0;
+    QString unit;
+    if (selectedSizeInBytes >= KMaxShownInKiloBytes)
+    {
+        unit = "MB";
+        selectedSize = selectedSizeInBytes / KMegaByte;
+        if (selectedSizeInBytes % KMegaByte != 0)
+        {
+            selectedSize++;
+        }
+    }
+    else 
+    {
+        unit = "kB";
+        selectedSize = selectedSizeInBytes / KKiloByte;
+        if (selectedSizeInBytes % KKiloByte != 0)
+        {
+            selectedSize++;
+        }
+    }
+    QString selectionString; 
+    selectionString.append("Selected ");
+    QString numText;
+    numText.setNum(countOfSelectedItems);
+    selectionString.append(numText);
+    selectionString.append("/");
+    numText.setNum(countOfAllItems);
+    selectionString.append(numText);
+    if (selectedSize > 0)
+    {
+        selectionString.append(" (");
+        numText.setNum(selectedSize);
+        selectionString.append(numText);
+        selectionString.append(" ");
+        selectionString.append(unit);
+        selectionString.append(")");
+    }
+    mSelections->setHeading(selectionString);
+    IAUPDATE_TRACE("[IAUPDATE] IAUpdateMainView::updateSelectionInfoInDock() end");
+}
--- a/iaupdate/IAD/ui/src/iaupdatemainwindow.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/src/iaupdatemainwindow.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -21,15 +21,16 @@
 #include "iaupdatemainwindow.h"
 #include "iaupdateengine.h"
 #include "iaupdatemainview.h"
-#include "iaupdatehistoryview.h"
+#include "iaupdatesettingdialog.h"
 
 
 // ViewManager Constructor
 IAUpdateMainWindow::IAUpdateMainWindow(IAUpdateEngine *engine)
 {
     // Add the views to the main window
-    //addHistoryView();
     addMainView(engine);
+    addSettingView();
+    
     // show the main window (which will display the last view that was added)
     show();   //temp
 }
@@ -46,19 +47,24 @@
     addView(mMainView);
 }
 
-void IAUpdateMainWindow::addHistoryView()
+
+void IAUpdateMainWindow::addSettingView()
 {
-    mHistoryView = new IAUpdateHistoryView();
-    addView(mHistoryView);
+    
+    mSettingView = new CIAUpdateSettingDialog(mMainView);
+    addView(mSettingView);
 }
 
-
 // Slots to handle view change
 void IAUpdateMainWindow::toMainView()
 {
     setCurrentView(mMainView);
 }
 
+void IAUpdateMainWindow::toSettingView()
+{
+    setCurrentView(mSettingView);
+}
 void IAUpdateMainWindow::refreshMainView(const RPointerArray<MIAUpdateNode>& nodes,
                                          const RPointerArray<MIAUpdateFwNode>& fwNodes,
                                          int error)
@@ -68,10 +74,15 @@
 } 
 
 
-void IAUpdateMainWindow::toHistoryView()
-{
-    setCurrentView(mHistoryView);
-}
 
 
+IAUpdateMainView* IAUpdateMainWindow::GetMainView()
+{
+    return mMainView;    
+}
+   
+CIAUpdateSettingDialog* IAUpdateMainWindow::GetSettingView()
+{
+    return mSettingView;}
 
+
--- a/iaupdate/IAD/ui/src/iaupdatenodefilter.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/src/iaupdatenodefilter.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -72,6 +72,7 @@
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateNodeFilter::~CIAUpdateNodeFilter() begin");
 
     delete iFilterParams;
+    iStoredNodes.Reset();
 
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateNodeFilter::~CIAUpdateNodeFilter() end");
     }
@@ -212,7 +213,14 @@
                     {
                     for ( TInt i = 0; i < aFwNodes.Count(); ++i )   
                         {
-                        aFwNodes[i]->Base().SetSelected( ETrue );
+                        if ( aFwNodes[i]->FwType() == MIAUpdateFwNode::EFotiNsu )
+                            {
+                            aFwNodes[i]->Base().SetSelected( EFalse ); 
+                            }
+                        else
+                            {
+                            aFwNodes[i]->Base().SetSelected( ETrue );
+                            }
                         }
                     for ( TInt i = 0; i < aNodes.Count(); ++i )   
                         {
@@ -231,7 +239,14 @@
                 {
                 for ( TInt i = 0; i < aFwNodes.Count(); ++i )   
                     {
-                    aFwNodes[i]->Base().SetSelected( ETrue );
+                    if ( aFwNodes[i]->FwType() == MIAUpdateFwNode::EFotiNsu )
+                        {
+                        aFwNodes[i]->Base().SetSelected( EFalse ); 
+                        }
+                    else
+                        {
+                        aFwNodes[i]->Base().SetSelected( ETrue );
+                        }
                     }
                 for ( TInt i = 0; i < aNodes.Count(); ++i )   
                     {
@@ -400,16 +415,9 @@
     RPointerArray<MIAUpdateNode> deps;
     CleanupClosePushL( deps );
     
-    RPointerArray<MIAUpdateAnyNode> allNodes;
-    CleanupClosePushL( allNodes );
-    for( TInt i = 0; i < aAllNodes.Count(); ++i ) 
-        {
-        MIAUpdateAnyNode* node = aAllNodes[i];
-        User::LeaveIfError( allNodes.Append( node ) );
-        }
-    
-    IAUpdateDepUtils::GetDependenciesL( aNode, allNodes, deps );    
-    CleanupStack::PopAndDestroy( &allNodes );
+        
+    IAUpdateDepUtils::GetDependenciesL( aNode, aAllNodes, deps );    
+
     TInt depCount = deps.Count();
     for( TInt i = 0; i < depCount; i++ )
         {
@@ -421,7 +429,80 @@
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateNodeFilter::SetDependenciesSelectedL() end");
     }
 
+// -----------------------------------------------------------------------------
+// CIAUpdateNodeFilter::StoreNodeListL
+// 
+// -----------------------------------------------------------------------------
+//
+void CIAUpdateNodeFilter::StoreNodeListL( const RPointerArray< MIAUpdateNode >& aNodes )
+    {
+    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateNodeFilter::StoreNodeListL() begin");
+    iStoredNodes.Reset();
+    for( TInt i = 0; i < aNodes.Count(); ++i )
+        {
+        iStoredNodes.AppendL( aNodes[i] ); 
+        }
+    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateNodeFilter::StoreNodeListL() end");
+    }
 
+// -----------------------------------------------------------------------------
+// CIAUpdateNodeFilter::RestoreNodeListL
+// 
+// -----------------------------------------------------------------------------
+//
+void CIAUpdateNodeFilter::RestoreNodeListL( RPointerArray< MIAUpdateNode >& aNodes) const
+    {
+    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateNodeFilter::RestoreNodeListL() begin");   
+    aNodes.Reset();
+    for( TInt i = 0; i < iStoredNodes.Count(); ++i )
+        {
+        aNodes.AppendL( iStoredNodes[i] ); 
+        }
+    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateNodeFilter::RestoreNodeListL() end");   
+    }
+
+// -----------------------------------------------------------------------------
+// CIAUpdateNodeFilter::SortSelectedNodesFirstL
+// 
+// -----------------------------------------------------------------------------
+//
+void CIAUpdateNodeFilter::SortSelectedNodesFirstL( 
+                          const RPointerArray<MIAUpdateNode>& aSelectedNodes, 
+                          RPointerArray< MIAUpdateNode >& aNodes )
+    {
+    for ( TInt i = aNodes.Count() - 1 ; i >= 0 ; --i )
+        {
+        MIAUpdateNode* node( aNodes[ i ] );
+        if ( node->Base().IsSelected() )
+            {
+            aNodes.Remove( i );        
+            }
+        }
+    for ( TInt j = aSelectedNodes.Count() -1 ; j >= 0 ; --j )
+        {
+        aNodes.InsertL( aSelectedNodes[j], 0 ); 
+        }
+    }
+ 
+// -----------------------------------------------------------------------------
+// CIAUpdateNodeFilter::SortThisNodeFirstL
+// 
+// -----------------------------------------------------------------------------
+//
+void CIAUpdateNodeFilter::SortThisNodeFirstL( const MIAUpdateNode* aFirstNode, 
+                                              RPointerArray< MIAUpdateNode >& aNodes)
+    {
+    TBool removed = EFalse; 
+    for ( TInt i = aNodes.Count() - 1 ; i >= 0 && !removed ; --i )
+        {
+        if ( aNodes[ i ] == aFirstNode )
+            {
+            aNodes.Remove( i );      
+            removed = ETrue;
+            }
+        }
+    aNodes.InsertL( aFirstNode, 0 );
+    }
 
 
 // -----------------------------------------------------------------------------
--- a/iaupdate/IAD/ui/src/iaupdateresultsdialog.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/src/iaupdateresultsdialog.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -19,9 +19,8 @@
 
 // INCLUDE FILES
 
-#include <hbaction.h>
-#include <hbdialog.h>
-#include <hbtextitem.h>
+#include <hbmessagebox.h>
+#include <hblabel.h>
 
 #include "iaupdateresultsdialog.h"
 #include "iaupdateresultsinfo.h"
@@ -38,20 +37,22 @@
 {
 }
 
-void IAUpdateResultsDialog::showResults(const TIAUpdateResultsInfo &param)
+void IAUpdateResultsDialog::showResults(const TIAUpdateResultsInfo &param, QObject *receiver, const char *member)
 {
+    HbMessageBox *messageBox = new HbMessageBox(HbMessageBox::MessageTypeInformation);
+    
+    HbLabel *label = new HbLabel(messageBox);
+    label->setHtml(QString("Update results"));
+    messageBox->setHeadingWidget(label);
+    
+    messageBox->setIconVisible(false);
+            
     QString buf;
     constructText(param,buf);
-    HbDialog dialog;
-    HbTextItem *text = new HbTextItem(&dialog);
-    text->setFontSpec(HbFontSpec(HbFontSpec::Primary));
-    text->setText(buf);
-    dialog.setContentWidget(text);
-    HbAction *primaryAction = new HbAction("Ok");    
-    dialog.setPrimaryAction(primaryAction);
-    dialog.setTimeout(HbPopup::NoTimeout);
-    dialog.show();
-    //dialog.exec();    
+    messageBox->setText(buf);
+    messageBox->setTimeout(HbPopup::NoTimeout);
+    messageBox->setAttribute(Qt::WA_DeleteOnClose);
+    messageBox->open(receiver, member);
     return;  
 }
 
@@ -69,7 +70,7 @@
         stringCount.setNum(param.iCountSuccessfull);    
         buf.append(stringCount);
         buf.append(" updates successful");
-        buf.append("\n");
+        buf.append("<br />");
         return;
     } 
   
@@ -86,7 +87,7 @@
         {
             buf.append(" applications updated"); 
         }
-        buf.append("\n");
+        buf.append("<br />");
     }
     
     if (param.iCountCancelled != 0)
@@ -102,7 +103,7 @@
         {
             buf.append(" updates cancelled");
         }
-        buf.append("\n");
+        buf.append("<br />");
     }
 
     if (param.iCountFailed != 0)
@@ -118,13 +119,13 @@
         {
             buf.append(" updates failed");
         }
-        buf.append("\n");
+        buf.append("<br />");
     }
     
     if (param.iFileInUseError)
     {
     	buf.append("Close all applications and try again.");
-    	buf.append("\n");
+    	buf.append("<br />");
     }
 } 
 
--- a/iaupdate/IAD/ui/src/iaupdateroaminghandler.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/src/iaupdateroaminghandler.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -112,7 +112,10 @@
 //
 void CIAUpdateRoamingHandler::CancelPreparing()
     {
-	iNwReg->Cancel();
+    if ( iNwReg )
+        {
+        iNwReg->Cancel();
+        }
     }
 
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iaupdate/IAD/ui/src/iaupdatesettingdialog.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,406 @@
+/*
+* Copyright (c) 2010-2011 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:   This module contains the implementation of IAUpdateSettingDialog 
+*                class member functions.
+*
+*/
+
+#include <hbdataform.h>
+#include <hbdataformmodel.h>
+#include <centralrepository.h>
+#include <cmconnectionmethoddef.h>
+#include <cmdestination.h>
+#include <xqconversions.h>
+#include <hbaction.h> 
+
+#include "iaupdatesettingdialog.h"
+#include "iaupdateprivatecrkeys.h"
+#include "iaupdate.hrh"
+
+
+const TInt KAutoUpdateOn( 0 );
+const TInt KAutoUpdateOff( 1 );
+const TInt KAutoUpdateOnInHomeNetwork( 2 );
+
+/*
+Constructor. It creates a formwidget on the view. 
+*/
+CIAUpdateSettingDialog::CIAUpdateSettingDialog(QGraphicsItem* parent):HbView(parent)
+    {
+    
+    //setTitle("Software update");
+    
+    mSettingsForm = new HbDataForm(this);
+            
+
+    // open connection manager 
+    TRAPD(err,  mCmManager.OpenL()); 
+    qt_symbian_throwIfError(err);
+    
+    // destination field flag inititializations 
+    mSetByNwQuery = false; // dest set by user/by destination query
+    mConnected = false;    // already connected to query
+    mInitialized = false;  // field initialized ?
+    
+    // Initialize view
+    initializeView();
+    
+    //setWidget(mSettingsForm);
+    setWidget(mSettingsForm);
+    
+    // Create application settings ui
+    mApplSett = new CmApplSettingsUi(this);
+
+    // Create a back key action and set it as the default navigation
+    // action once the back key is pressed
+    mBackKey = new HbAction(Hb::BackNaviAction, this);
+    this->setNavigationAction(mBackKey);
+
+    connect(mBackKey, SIGNAL(triggered()), this, SLOT(showPreviousView()));
+
+    }
+
+/*
+Destructor
+*/
+CIAUpdateSettingDialog::~CIAUpdateSettingDialog()
+    {
+    // close connection manager 
+    mCmManager.Close();
+    }
+
+// ----------------------------------------------------------------------------
+// CIAUpdateSettingDialog::toggleChange
+// 
+// ----------------------------------------------------------------------------
+//
+void CIAUpdateSettingDialog::toggleChange(QModelIndex startIn, QModelIndex /*endIn*/)
+{
+    // HLa: this should work
+    HbDataFormModelItem *itm = mModel->itemFromIndex(startIn);
+
+    // Destination ?
+    if ( startIn.row() == 0 )
+        {
+        // no query when initializing fields
+        if ( mInitialized )
+            {
+            // no query if field value set by destination query
+            if (!mSetByNwQuery )
+                {
+                queryDestination();
+                mSetByNwQuery = true;
+                }
+                else
+                {
+                mSetByNwQuery = false;
+                }
+            }
+        else
+            {
+            mInitialized = true;
+            }
+           
+        }
+    // Auto update ?
+    if ( startIn.row() == 1 )
+        {
+         int currentIndex = mAutoUpdateItem->contentWidgetData(QString("currentIndex")).toInt();
+        }
+}
+// ----------------------------------------------------------------------------
+// CIAUpdateSettingDialog::queryDestination
+// 
+// ----------------------------------------------------------------------------
+//
+void CIAUpdateSettingDialog::queryDestination()
+  {
+        QFlags<CmApplSettingsUi::SelectionDialogItems> listItems;
+        QSet<CmApplSettingsUi::BearerTypeFilter> filter;
+        
+        // Show only destinations
+       listItems |= CmApplSettingsUi::ShowDestinations;
+       // listItems |= CmApplSettingsUi::ShowConnectionMethods;
+
+        mApplSett->setOptions(listItems, filter);
+        mApplSett->setSelection(mSelection);
+        
+        // Connect finished(uint) signal and handle result via it
+        if (!mConnected)
+            {
+            connect(mApplSett, SIGNAL(finished(uint)), this, SLOT(showResults(uint)));
+            mConnected = true;
+            }
+        
+        // Start CmApplSettingsUi
+        mApplSett->open();
+
+  }
+// ----------------------------------------------------------------------------
+// CIAUpdateSettingDialog::showResults
+// 
+// ----------------------------------------------------------------------------
+//
+void CIAUpdateSettingDialog::showResults(uint retval)
+{
+    if (retval == CmApplSettingsUi::ApplSettingsErrorNone) {
+        mSelection = mApplSett->selection();
+        
+        uint destinationId = mSelection.id;
+        
+        QString idString;
+        
+        TRAPD( err, getDestinationNameL( destinationId, idString ) );
+        qt_symbian_throwIfError(err);
+
+        // Destination changed ?
+        if ( idString != mCurrentDest )
+            {
+            mCurrentDest = idString;
+            }
+    }
+   // inform toggleChange that change is not made by user
+    mSetByNwQuery = true;
+    mDestinationItem->setContentWidgetData(QString("text"), mCurrentDest);
+}
+
+// ----------------------------------------------------------------------------
+// CIAUpdateSettingDialog::SaveSettingsL
+// 
+// ----------------------------------------------------------------------------
+//
+void CIAUpdateSettingDialog::saveSettingsL()
+    {
+    CRepository* cenrep = CRepository::NewLC( KCRUidIAUpdateSettings );
+    TInt err = cenrep->StartTransaction( CRepository::EReadWriteTransaction );
+    User::LeaveIfError( err );
+    
+    cenrep->CleanupCancelTransactionPushL();
+    
+    // Set destination
+    TInt value = mSelection.id;
+    err = cenrep->Set( KIAUpdateAccessPoint, value ) ;
+    User::LeaveIfError( err );
+    
+    // Set auto update check
+    value = mAutoUpdateItem->contentWidgetData(QString("currentIndex")).toInt();
+    
+    // Convert ist index index to setting value
+    switch ( value )
+         {
+         case KAutoUpdateOn:
+             value = EIAUpdateSettingValueDisableWhenRoaming;
+             break;
+         case KAutoUpdateOff:
+             value = EIAUpdateSettingValueDisable;
+             break;
+         case KAutoUpdateOnInHomeNetwork:
+             value = EIAUpdateSettingValueEnable;
+             break;
+         default: 
+             break;
+         }
+    err = cenrep->Set( KIAUpdateAutoUpdateCheck, value ); 
+    
+    User::LeaveIfError( err );
+    
+    TUint32 ignore = KErrNone;
+    User::LeaveIfError( cenrep->CommitTransaction( ignore ) );
+    CleanupStack::PopAndDestroy(); // CleanupCancelTransactionPushL()
+    CleanupStack::PopAndDestroy( cenrep );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CIAUpdateSettingDialog::initializeFieldsL
+// -----------------------------------------------------------------------------
+//
+void CIAUpdateSettingDialog::initializeFieldsL()
+    {
+    CRepository* cenrep = CRepository::NewLC( KCRUidIAUpdateSettings );
+    int destId = 0;
+    
+    // get access point id
+    User::LeaveIfError( cenrep->Get( KIAUpdateAccessPoint, destId ) );
+    
+    // save id
+    mSelection.id = destId;
+    
+    // On first time: show internet access point
+    if ( mSelection.id == 0 )
+        {
+        User::LeaveIfError(mSelection.id = getInternetSnapIdL());
+        }
+
+    // set destination name
+    TRAPD( err, getDestinationNameL( mSelection.id, mCurrentDest ) );
+   
+    if ( err == KErrNotFound )
+        { 
+        mSelection.id = 0;
+        }
+    else
+        {
+         // nothing to do ?
+         User::LeaveIfError( err );
+        }
+    mDestinationItem->setContentWidgetData(QString("text"), mCurrentDest);
+    
+    // set auto update value
+    int value = 0;
+    User::LeaveIfError( cenrep->Get( KIAUpdateAutoUpdateCheck, value ) );
+    
+    // map cenrep value to index
+    switch ( value )
+         {
+         case EIAUpdateSettingValueEnable:
+             value = KAutoUpdateOn; // On 
+             break;
+         case EIAUpdateSettingValueDisable:
+             value = KAutoUpdateOff; // Off
+             break;
+         case EIAUpdateSettingValueDisableWhenRoaming:
+             value = KAutoUpdateOnInHomeNetwork; // On in home network
+             break;
+         default: 
+             break;
+         }
+    
+    mAutoUpdateItem->setContentWidgetData("currentIndex", value);
+    
+   
+    CleanupStack::PopAndDestroy( cenrep ); 
+
+    } 
+
+
+// -----------------------------------------------------------------------------
+// CIAUpdateSettingDialog::getDestinationNameL
+//
+// -----------------------------------------------------------------------------
+//
+void CIAUpdateSettingDialog::getDestinationNameL( uint aItemUid, QString& aItemName )
+    {
+    
+    if ( aItemUid == 0 )
+        {
+        aItemUid = getInternetSnapIdL();
+        }
+
+    RCmDestination dest = mCmManager.DestinationL( aItemUid );
+    CleanupClosePushL( dest );
+    HBufC* temp = dest.NameLC();    
+    CleanupStack::Pop( temp );
+    CleanupStack::PopAndDestroy( &dest ); 
+    
+    aItemName = XQConversions::s60DescToQString( temp->Des() );
+
+    if ( aItemName.size() == 0 ) 
+        {
+        User::Leave(KErrNotFound);
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// ActionView::initializeView
+// -----------------------------------------------------------------------------
+//
+void CIAUpdateSettingDialog::initializeView()
+    {
+    
+    setTitle("Software update"); // txt_software_title_software_update
+    mSettingsForm->setHeading("Settings"); // txt_software_subhead_settings
+
+     //create a model class
+     HbDataFormModel *mModel = new HbDataFormModel();
+
+     // add Destination item
+     mDestinationItem = mModel->appendDataFormItem(
+         HbDataFormModelItem::ToggleValueItem, QString("Network connection")); // txt_software_formlabel_access_point
+
+     // add auto update item
+     mAutoUpdateItem = mModel->appendDataFormItem(
+        HbDataFormModelItem::ComboBoxItem, QString("Auto-check for updates")); // txt_software_setlabel_autocheck_for_updates
+     
+     // auto update selection values
+     QStringList list;
+     list.insert(0, QString("On")); // txt_software_setlabel_val_on
+     list.append(QString("Off")); // txt_software_setlabel_val_off
+     list.append(QString("On in home network")); // txt_software_setlabel_val_on_in_home_network
+     mAutoUpdateItem->setContentWidgetData("items", list);
+
+     // connect data changes for launching the access point selection dialog
+     connect(mModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)), 
+                 this, SLOT(toggleChange(QModelIndex, QModelIndex)));
+
+     // connect to function called when data items are displayed
+     connect(mSettingsForm, SIGNAL(activated(QModelIndex)), 
+                      this, SLOT(activated(QModelIndex)));
+     
+     mSettingsForm->setModel(mModel);
+         
+     // set values for items
+     TRAPD(err, initializeFieldsL());
+     qt_symbian_throwIfError(err);
+}
+
+// -----------------------------------------------------------------------------
+// ActionView::getInternetSnapIdL
+// -----------------------------------------------------------------------------
+//
+uint CIAUpdateSettingDialog::getInternetSnapIdL()
+    {
+    TUint internetSnapId( 0 );
+    
+    RArray<TUint32> destinationIdArray;
+    mCmManager.AllDestinationsL( destinationIdArray );
+    
+    for ( TInt i = 0; i < destinationIdArray.Count(); i++ )
+        {
+        RCmDestination destination = mCmManager.DestinationL( destinationIdArray[i] );
+        CleanupClosePushL( destination );
+        
+        TUint32 metadata = destination.MetadataL( CMManager::ESnapMetadataPurpose );
+        if ( metadata == CMManager::ESnapPurposeInternet )
+            {
+            internetSnapId = destinationIdArray[i];
+            // Get the destination name with destination.NameLC() if need.
+            CleanupStack::PopAndDestroy( &destination );
+            break;
+            }
+        CleanupStack::PopAndDestroy( &destination );
+        }
+    destinationIdArray.Close();
+    
+    return internetSnapId;
+    
+    }
+
+void CIAUpdateSettingDialog::showPreviousView()
+{
+    // Save settings    
+    TRAPD(err,  saveSettingsL()); 
+    qt_symbian_throwIfError(err);
+    
+    // Switch view
+    emit toMainView();
+}
+
+void CIAUpdateSettingDialog::activated(const QModelIndex& index)
+{
+    if ( this->isActiveWindow() && index.row() == 0 )
+        {
+        }
+
+}
--- a/iaupdate/IAD/ui/src/iaupdatestarter.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/src/iaupdatestarter.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 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"
@@ -108,8 +108,7 @@
         UidForExecutableL( iUid );
         if ( iUid.iUid == 0 )
             {
-            iStarterObserver->StartExecutableCompletedL( KErrNotFound );
-            iStarterObserver = NULL;
+            LaunchExeL();
             }
         else
             {
--- a/iaupdate/IAD/ui/src/iaupdateuicontroller.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/ui/src/iaupdateuicontroller.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -24,7 +24,6 @@
 #include <featurecontrol.h>
 #include <cmmanager.h>
 #include <qapplication.h>
-#include <hbmessagebox.h>
 #include <hbaction.h>
 #include <hbprogressdialog.h>
 #include <iaupdateparameters.h>
@@ -59,6 +58,7 @@
 #include "iaupdaterefreshhandler.h"
 #include "iaupdatenodeid.h"
 #include "iaupdatewaitdialog.h"
+#include "iaupdatedialogutil.h"
 #include "iaupdatedebug.h"
 
 
@@ -262,6 +262,7 @@
     delete iRoamingHandler;
     delete iParams;
     delete iRefreshHandler;
+    delete mDialogUtil;
 
     // If dialogs have not been released yet, release them now.
     // ProcessFinishedL() should normally be used for dialogs but
@@ -309,7 +310,7 @@
 void CIAUpdateUiController::CheckUpdatesL()
     {
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::CheckUpdatesL() begin");
-
+    
     iCountOfAvailableUpdates = 0;
     
     if ( iParams )
@@ -318,7 +319,7 @@
     	iParams = NULL;
         }
      
-    TBool agreementAccepted( EFalse ); 
+    TBool agreementAccepted( EFalse );
     if ( !ForcedRefresh() )
         {
         CIAUpdateAgreement* agreement = CIAUpdateAgreement::NewLC();
@@ -330,10 +331,45 @@
             // Refresh from network is allowed when first time case 
             iRefreshFromNetworkDenied = EFalse;
             agreementAccepted = agreement->AcceptAgreementL();  
+            if (!agreementAccepted)
+                {
+                if ( !mDialogUtil )
+                    {
+                    mDialogUtil = new IAUpdateDialogUtil(NULL, this);
+                    }
+                if ( mDialogUtil )
+                    {
+                    mPrimaryAction = NULL;
+                    mPrimaryAction = new HbAction("Accept");
+                    HbAction *secondaryAction = NULL;
+                    secondaryAction = new HbAction("Decline");
+                    mDialogUtil->showAgreement(mPrimaryAction,secondaryAction);
+                    iDialogState = EAgreement;
+                    }
+                }
             }
         CleanupStack::PopAndDestroy( agreement );
         }
-  	             
+    if ( iDialogState != EAgreement )
+        {
+        AgreementHandledL();
+        }
+    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::CheckUpdatesL() end");
+    return;
+    }
+
+// ---------------------------------------------------------------------------
+// CIAUpdateUiController:: AgreementHandledL
+// Updates the update item list.
+// ---------------------------------------------------------------------------
+//
+void CIAUpdateUiController::AgreementHandledL()
+    {
+    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::AgreementHandledL() begin");
+    TBool agreementAccepted( EFalse );
+    CIAUpdateAgreement* agreement = CIAUpdateAgreement::NewLC();
+    agreementAccepted = agreement->AgreementAcceptedL();
+    CleanupStack::PopAndDestroy( agreement );        
     if ( !agreementAccepted && !ForcedRefresh() )
         {
         if ( iRequestType == IAUpdateUiDefines::ECheckUpdates )
@@ -395,7 +431,7 @@
             }	
         }
 
-    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::CheckUpdatesL() end");
+    IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::AgreementHandledL() end");
     }
 
 
@@ -417,13 +453,17 @@
                 
     if ( !IAUpdateUtils::SpaceAvailableInInternalDrivesL( iSelectedNodesArray ) )
         {
-            HbMessageBox messageBox(HbMessageBox::MessageTypeInformation); 
-            messageBox.setText(QString("Insufficient memory. Free some memory and try again."));
-            HbAction action("OK");
-            messageBox.setPrimaryAction(&action);
-            messageBox.setTimeout(HbPopup::NoTimeout);
-            messageBox.show();
-            //messageBox.exec();
+        if ( !mDialogUtil )
+            {
+            mDialogUtil = new IAUpdateDialogUtil(NULL, this);
+            }
+        if ( mDialogUtil )
+            {
+            mPrimaryAction = NULL;
+            mPrimaryAction = new HbAction("OK");
+            mDialogUtil->showInformation(QString("Insufficient memory. Free some memory and try again."), mPrimaryAction);
+            iDialogState = EInsufficientMemory;
+            }
         }
     else
         {
@@ -442,7 +482,12 @@
         // controller can handle situations as a whole and not as one item at the
         // time.
         iController->StartingUpdatesL();
-            
+        
+        //Store current node list before update
+        iFilter->StoreNodeListL( iNodes );
+        
+        iFilter->SortSelectedNodesFirstL( iSelectedNodesArray, iNodes );
+                    
         iFileInUseError = EFalse;
         // Set the node index to -1 because ContinueUpdateL increases it by one
         // in the beginning of the function. So, we can use the ContinueUpdateL
@@ -506,7 +551,8 @@
             // Only update items that have not been installed yet.
             if ( !selectedNode->IsInstalled() )
                 {
-                IAUPDATE_TRACE("[IAUPDATE] Item not installed yet");    
+                IAUPDATE_TRACE("[IAUPDATE] Item not installed yet"); 
+                iFilter->SortThisNodeFirstL( selectedNode, iNodes );
                 if ( !selectedNode->IsDownloaded() )
                     {
                     // Because content has not been downloaded or installed yet,
@@ -515,11 +561,8 @@
                     selectedNode->DownloadL( *this );
                     iState = EDownloading;
                     iClosingAllowedByClient = ETrue;
-                    selectedNode->SetDownloading( ETrue);
-                    /*ShowUpdatingDialogL( R_IAUPDATE_DOWNLOADING_NOTE,
-                                         selectedNode->Base().Name(),
-                                         iNodeIndex + 1,
-                                         iSelectedNodesArray.Count() );*/ 
+                    selectedNode->SetUiState( MIAUpdateNode::EDownloading );
+                    iObserver.RefreshUI();
                     nextUpdate = EFalse;
                     }
                 else
@@ -530,13 +573,8 @@
                     selectedNode->InstallL( *this );
                     iState = EInstalling;
                     iClosingAllowedByClient = EFalse;
-                    /*CIAUpdateAppUi* appUi = 
-                        static_cast< CIAUpdateAppUi* >( iEikEnv->EikAppUi() );
-                    appUi->StartWGListChangeMonitoring();
-                    ShowUpdatingDialogL( R_IAUPDATE_INSTALLING_NOTE,
-                                         selectedNode->Base().Name(),
-                                         iNodeIndex + 1,
-                                         iSelectedNodesArray.Count() ); */
+                    selectedNode->SetUiState( MIAUpdateNode::EInstalling );
+                    iObserver.RefreshUI();
                     nextUpdate = EFalse;                     
                     }      
                 }
@@ -570,14 +608,9 @@
             
     aNode.InstallL( *this );
     iState = EInstalling;
-    /*CIAUpdateAppUi* appUi = static_cast<CIAUpdateAppUi*>( iEikEnv->EikAppUi() );
-    appUi->StartWGListChangeMonitoring();
-    iClosingAllowedByClient = EFalse;
-    ShowUpdatingDialogL( R_IAUPDATE_INSTALLING_NOTE,
-                         aNode.Base().Name(),
-                         iNodeIndex + 1,
-                         iSelectedNodesArray.Count()  ); */
-    
+    aNode.SetUiState( MIAUpdateNode::EInstalling );
+    iObserver.RefreshUI();
+        
 	IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::StartInstallL() end");
     }
 
@@ -1549,6 +1582,35 @@
     }
 
 // -----------------------------------------------------------------------------
+// CIAUpdateUiController::dialogFinished
+// Called when dialog is finished.
+// -----------------------------------------------------------------------------
+//
+void CIAUpdateUiController::dialogFinished(HbAction *action)
+    {
+    TDialogState dialogState = iDialogState;
+    iDialogState = ENoDialog;
+    
+    switch ( dialogState )
+        {
+        case EAgreement:
+            if ( action == mPrimaryAction )
+                 {
+                CIAUpdateAgreement* agreement = CIAUpdateAgreement::NewLC();
+                agreement->SetAgreementAcceptedL();
+
+                CleanupStack::PopAndDestroy(agreement);
+                }
+            AgreementHandledL();        
+            break;
+        case EInsufficientMemory:    
+            break;
+        default: 
+            break;
+        }
+    }
+
+// -----------------------------------------------------------------------------
 // CIAUpdateUiController::HandleUiRefreshL
 // 
 // -----------------------------------------------------------------------------
@@ -1582,10 +1644,10 @@
                 CleanupStack::Pop( nodeId );
                 
                 }
-
-            if ( iFwNodes.Count() > 0 )
+            
+	    	for ( TInt j = 0; j < iFwNodes.Count(); ++j )
                 {
-                MIAUpdateFwNode* fwNode( iFwNodes[ 0 ] );
+                MIAUpdateFwNode* fwNode( iFwNodes[ j ] );
                 CIAUpdateNodeId* nodeId = CIAUpdateNodeId::NewLC();
                 nodeId->SetIdL( fwNode->Base().MetaId() );
                 nodeId->SetNamespaceL( fwNode->Base().MetaNamespace() );
@@ -1868,10 +1930,16 @@
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::InstallCompleteL() begin");
     IAUPDATE_TRACE_1("[IAUPDATE] error code: %d", aError );
 
-    // In release mode, we do not need the aError info, because
-    // success counters are counted by using the last operation error info
-    // when counter info is asked. In debug mode the error code is logged above.
-    (void)aError;
+    if ( aError == KErrNone )
+        {
+        aNode.SetUiState( MIAUpdateNode::EUpdated );   
+        iObserver.RefreshUI();
+        }
+    else
+        {
+        aNode.SetUiState( MIAUpdateNode::EFailed );
+        iObserver.RefreshUI();
+        }
     
     // pass UID of installed package to starter
     if ( iStarter )
@@ -1916,17 +1984,7 @@
 
     iState = EIdle;
     iClosingAllowedByClient = EFalse;
-
-    // Remove installed nodes from the node array.
-	for ( TInt i = iNodes.Count() - 1; i >= 0; --i ) 
-        {   
-        MIAUpdateNode* node = iNodes[ i ];
-        if ( node->IsInstalled() ) 
-            {
-            iNodes.Remove( i );
-            }
-        }
-    
+       
     TInt error( aError );
     TBool selfUpdaterStarted( EFalse );
 
@@ -1985,9 +2043,12 @@
         // completion or timer will call the callback later. But, that callback
         // will be ignored in CIAUpdateUiController::ServerReportSent because
         // iState is already then changed from ESendingReport to something else. 
-        const TInt KServerReportMaxWaitTime( 10000000 );
-        iController->FinishedUpdatesL( ETrue, KServerReportMaxWaitTime );
-        iState = ESendingReport;
+        
+        //const TInt KServerReportMaxWaitTime( 10000000 );         //Commented TEMP 
+        //iController->FinishedUpdatesL( ETrue, KServerReportMaxWaitTime ); //Commented TEMP
+        //iState = ESendingReport;  //Commented temporarily
+        EndUpdateFlowL( KErrNone );  //TEMP
+        return;                      //TEMP  
         }
 
     // When reports are sent, EndUpdateFlowL is called via the callback functions
@@ -2085,7 +2146,8 @@
 // 
 // ---------------------------------------------------------------------------
 //
-void CIAUpdateUiController::ShowUpdatingDialogL( TInt /*aTextResourceId*/,
+/*
+void CIAUpdateUiController::ShowUpdatingDialogL( TInt aTextResourceId,
                                                  const TDesC& aName,
                                                  TInt aNumber,
                                                  TInt aTotalCount )   
@@ -2124,7 +2186,7 @@
     CleanupStack::PopAndDestroy( stringArray );
 
     IAUPDATE_TRACE("[IAUPDATE] CIAUpdateUiController::ShowUpdatingDialogL() end");
-    }
+    }*/
  
 
 // ---------------------------------------------------------------------------
@@ -2657,6 +2719,32 @@
     }
 
 // ---------------------------------------------------------------------------
+// CIAUpdateUiController::RefreshNodeList
+// 
+// ---------------------------------------------------------------------------
+//
+void CIAUpdateUiController::RefreshNodeList()
+    {
+    // Restore list after update, that nodes are shown in original sequence
+    iFilter->RestoreNodeListL( iNodes );
+    // Remove installed nodes from the node array.
+    // Set temp UI state to normal for remaining nodes 
+    for ( TInt i = iNodes.Count() - 1; i >= 0; --i ) 
+        {   
+        MIAUpdateNode* node = iNodes[ i ];
+        if ( node->IsInstalled() ) 
+            {
+            iNodes.Remove( i );
+            }
+        else
+            {
+            node->SetUiState( MIAUpdateNode::ENormal );        
+            }
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
 // CIAUpdateUiController::ParamsWriteFileL
 // 
 // ---------------------------------------------------------------------------
--- a/iaupdate/IAD/updater/group/iaupdater.mmp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/updater/group/iaupdater.mmp	Thu Jul 22 16:35:01 2010 +0100
@@ -34,6 +34,10 @@
 
 MW_LAYER_SYSTEMINCLUDE
 
+SYSTEMINCLUDE     /epoc32/include/mw/hb
+SYSTEMINCLUDE     /epoc32/include/mw/hb/hbcore 
+SYSTEMINCLUDE     /epoc32/include/mw/hb/hbwidgets
+
 USERINCLUDE     ../inc
 USERINCLUDE     ../updaterfiles/inc
 USERINCLUDE     ../../loc
@@ -55,12 +59,15 @@
 LIBRARY         apmime.lib
 LIBRARY         apparc.lib
 LIBRARY         sisregistryclient.lib
-LIBRARY         swinstcli.lib
 LIBRARY         estor.lib
 LIBRARY         commonengine.lib
 LIBRARY         ws32.lib 
 LIBRARY         ecom.lib
 
+LIBRARY         sif.lib
+LIBRARY         hbcore.lib
+LIBRARY         hbwidgets.lib
+
 // Updater files dll
 LIBRARY         iaupdaterfiles.lib
 
--- a/iaupdate/IAD/updater/inc/iaupdaterdialog.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/updater/inc/iaupdaterdialog.h	Thu Jul 22 16:35:01 2010 +0100
@@ -25,30 +25,26 @@
 #include <f32file.h>
 #include <barsc.h>
 
+#include <hbdeviceprogressdialogsymbian.h>
+
 // FORWARD DECLARATIONS
 class MIAUpdaterCancelObserver;
-
 /**
 * Class for showing the global note dialog when installing self update.
-* 
-*  @code   
-*  @endcode
-*  @lib 
-*  @since S60 
 */
-class CIAUpdaterDialog : public CActive
+class CIAUpdaterDialog : public CBase,
+                         public MHbDeviceProgressDialogObserver
     {
 public:  
         
     /**
      * Two-phased constructor.
      */
-    static CIAUpdaterDialog* NewL( RFs& aFs, MIAUpdaterCancelObserver& aObserver ); 
-
+    static CIAUpdaterDialog* NewL( MIAUpdaterCancelObserver& aObserver );
     /**
      * Two-phased constructor.
      */
-    static CIAUpdaterDialog* NewLC( RFs& aFs, MIAUpdaterCancelObserver& aObserver );
+    static CIAUpdaterDialog* NewLC( MIAUpdaterCancelObserver& aObserver );
 
             
     /**
@@ -73,60 +69,59 @@
      */
     void CancelWaitingNoteL();
 
+    /**
+     * From base class MHbDeviceProgressDialogObserver
+     */
+    void ProgressDialogCancelled(
+        const CHbDeviceProgressDialogSymbian* aProgressDialog);
+    
+    /**
+    * From base class MHbDeviceProgressDialogObserver
+    */
+    void ProgressDialogClosed(
+         const CHbDeviceProgressDialogSymbian* aProgressDialog);
+
+
 
 private:
 
     /**
      * Constructor.
      */  
-    CIAUpdaterDialog( RFs& aFs, MIAUpdaterCancelObserver& aObserver );
+    CIAUpdaterDialog( MIAUpdaterCancelObserver& aObserver );
      
     /**
      * 2nd phase constructor.
      */
     void ConstructL();
 
-
-    /**
-     * Read resource string.
-     * @since 
-     * @param aResourceId Id of the resource.
-     * @return Resource buffer.
-     */
-    HBufC* ReadResourceLC( TInt aResourceId );    
-        
-private: // from CActive
-
+    
     /**
-     * Cancels async request 
-     * @see CActive::DoCancel
-     *
+     * Destroy wait note.
      */
-    void DoCancel();
-
-    /**
-     * When the server side has finished operation, the CActive object will
-     * be informed about it, and as a result RunL will be called. This function
-     * well inform the observer that the operation has been completed.
-     * @see CActive::RunL
-     *
-     */
-    void RunL();
+    void CIAUpdaterDialog::DestroyGlobalWaitNote();
+    
 
 private: // data
 
-    // Resource file.
-    //RResourceFile iResourceFile;
-
-    // File server handle.        
-    RFs& iFs;        
-                   
-    //CAknGlobalNote* iNote;
+    /**
+     * Not owned, install observer.
+     */
+    MIAUpdaterCancelObserver* iObserver; 
+    /**
+    * Own, Global wait note.
+    */
+    CHbDeviceProgressDialogSymbian* iGlobalWaitNote;
     
-    // Dialog id for canceling dialog. 
-    TInt iNoteId;
-        
-    MIAUpdaterCancelObserver* iObserver; //not owned
+    /**
+    * Own, resouce of global note.
+    */
+    HBufC* iGlobalResource;
+    
+    /**
+     * Check Load Success .ts file successfully or not
+     */
+    TBool iIsResolverSuccess;
         
     };
 
--- a/iaupdate/IAD/updater/inc/iaupdatersilentlauncher.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/updater/inc/iaupdatersilentlauncher.h	Thu Jul 22 16:35:01 2010 +0100
@@ -24,14 +24,12 @@
 #include <f32file.h>
 #include <SWInstApi.h>
 
+#include <usif/sif/sif.h>
+
 
 /**
  * Class that handles the launching of silent installation.
  *
- *  @code   
- *  @endcode
- *  @lib 
- *  @since S60 
  */ 
 class CIAUpdaterSilentLauncher : public CBase
     {
@@ -81,13 +79,13 @@
      * @return SwiUI::TInstallOptions Options that are used for
      * silent installation.
      */
-    SwiUI::TInstallOptions SilentInstallOptionsL() const;
+    void  UsifSilentInstallOptionsL( Usif::COpaqueNamedParams * aOptions );
 
 private: //  Data
-        
-    SwiUI::RSWInstSilentLauncher iLauncher;   
     
-    SwiUI::TInstallOptionsPckg iOptionsPckg;   
+    Usif::RSoftwareInstall iLauncher;
+    Usif::COpaqueNamedParams* iOptionsPckg; 
+    Usif::COpaqueNamedParams* iResults;
 
     RFs& iFs;        
     
--- a/iaupdate/IAD/updater/src/iaupdaterdialog.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/updater/src/iaupdaterdialog.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -22,6 +22,12 @@
 #include "iaupdatercancelobserver.h"
 #include "iaupdatedebug.h"
 
+#include <hbtextresolversymbian.h>
+
+
+_LIT(KFilename, "iaupdate.ts");
+_LIT(KPath, "z://data");
+_LIT(KInstalling, "txt_software_info_installing_1"); 
 
 // ======== LOCAL FUNCTIONS ========
 
@@ -33,26 +39,23 @@
 // C++ default constructor 
 // -----------------------------------------------------------------------------
 //
-CIAUpdaterDialog::CIAUpdaterDialog( RFs& aFs, 
-                                    MIAUpdaterCancelObserver& aObserver )
-: CActive( CActive::EPriorityStandard ),
-  iFs( aFs ),
-  iObserver ( &aObserver ) 
+CIAUpdaterDialog::CIAUpdaterDialog( MIAUpdaterCancelObserver& aObserver )
+: iObserver ( &aObserver ) 
     {
-    CActiveScheduler::Add( this );
+
     }
 
 
+
 // -----------------------------------------------------------------------------
 // CIAUpdaterDialog::NewL
 // Two-phased constructor.
 // -----------------------------------------------------------------------------
 //
-CIAUpdaterDialog* CIAUpdaterDialog::NewL( RFs& aFs, 
-                                          MIAUpdaterCancelObserver& aObserver )
+CIAUpdaterDialog* CIAUpdaterDialog::NewL( MIAUpdaterCancelObserver& aObserver )
     {
     CIAUpdaterDialog* self =
-        CIAUpdaterDialog::NewLC( aFs, aObserver );
+        CIAUpdaterDialog::NewLC( aObserver );
     CleanupStack::Pop( self );
     return self;    
     }
@@ -63,11 +66,10 @@
 // Two-phased constructor.
 // -----------------------------------------------------------------------------
 //
-CIAUpdaterDialog* CIAUpdaterDialog::NewLC( RFs& aFs, 
-                                           MIAUpdaterCancelObserver& aObserver )
+CIAUpdaterDialog* CIAUpdaterDialog::NewLC( MIAUpdaterCancelObserver& aObserver )
     {
     CIAUpdaterDialog* self = 
-        new( ELeave ) CIAUpdaterDialog( aFs, aObserver );
+        new( ELeave ) CIAUpdaterDialog( aObserver );
     CleanupStack::PushL( self );
     self->ConstructL();
     return self;    
@@ -84,18 +86,8 @@
     IAUPDATE_TRACE("[IAUpdater] CIAUpdaterDialog::ConstructL begin");
     
     // Get resource file path
-    /*TFileName fileName;
-    fileName.Copy( TParsePtrC( RProcess().FileName() ).Drive() );
-    fileName.Append( KDC_APP_RESOURCE_DIR );
-    fileName.Append( IAUpdaterDefs::KIAUpdaterResourceFile );
+    iIsResolverSuccess = HbTextResolverSymbian::Init(KFilename, KPath);
     
-    // Get language of resource file        
-    BaflUtils::NearestLanguageFile( iFs, fileName );
-
-    // Open resource file
-    iResourceFile.OpenL( iFs, fileName );
-    iResourceFile.ConfirmSignatureL(); */   
-
     IAUPDATE_TRACE("[IAUpdater] CIAUpdaterDialog::ConstructL end");
     }
 
@@ -107,9 +99,7 @@
 //
 CIAUpdaterDialog::~CIAUpdaterDialog()
     {
-    Cancel();
-    //delete iNote;
-    //iResourceFile.Close();    
+    DestroyGlobalWaitNote();
     }
 
 
@@ -118,54 +108,30 @@
 // Show global waiting note during installing.
 // -----------------------------------------------------------------------------
 // 
-void CIAUpdaterDialog::ShowWaitingNoteL( const TDesC& /*aName*/, TInt /*aIndex*/, TInt /*aTotalCount*/ )
+void CIAUpdaterDialog::ShowWaitingNoteL( const TDesC& aName, TInt /*aIndex*/, TInt /*aTotalCount*/ )
 	{	
 	IAUPDATE_TRACE("[IAUpdater] CIAUpdaterDialog::ShowWaitingNoteL begin");
-	if ( iNoteId == 0 )
-		{ 		                             
-	    IAUPDATE_TRACE("[IAUpdater] Creating global waiting note.");
 	
-        // Get localiced string from resc. file. 
-        //HBufC* string = ReadResourceLC( R_IAUPDATER_INSTALLING ); 
-                                          
-        //HBufC* temp1 = HBufC::NewLC( string->Length() + aName.Length() );          
-        //TPtr temp1Ptr = temp1->Des();
-        
-        // Add pkg's name to string (U0).
-        //StringLoader::Format( temp1Ptr, *string, 0, aName );
-                                        
-        // Increase buffer length for the number.        
-        //HBufC* temp2 = 
-        //    HBufC::NewLC( temp1->Length() + IAUpdaterDefs::KIAUpdaterParamLen );        
-        //TPtr temp2Ptr = temp2->Des();
-         
-        // Add index number to string (N1) 
-        //StringLoader::Format( temp2Ptr, *temp1, 1, aIndex );
-                        
-        // Increase buffer length for the number.  
-        //HBufC* finalString = 
-        //    HBufC::NewLC( temp2->Length() + IAUpdaterDefs::KIAUpdaterParamLen );        
-        //TPtr finalPtr = finalString->Des();
-        
-        // Add max count number to string (N2) 
-        //StringLoader::Format( finalPtr, *temp2, 2, aTotalCount );
-        
-        //AknTextUtils::DisplayTextLanguageSpecificNumberConversion( finalPtr );         
-        //if ( !iNote )
-        //    {
-        //	iNote = CAknGlobalNote::NewL();   
-    	//    iNote->SetSoftkeys( R_AVKON_SOFTKEYS_CANCEL );
-        //    }
-     	
-	//    IAUPDATE_TRACE("[IAUpdater] Showing global waiting note.");
-    	//iNoteId = iNote->ShowNoteL( iStatus, EAknGlobalWaitNote, *finalString );
-    	SetActive();    	    	
-     
-    	//CleanupStack::PopAndDestroy( finalString );
-    	//CleanupStack::PopAndDestroy( temp2 );
-    	//CleanupStack::PopAndDestroy( temp1 );
-    	//CleanupStack::PopAndDestroy( string );
-		}
+	DestroyGlobalWaitNote();
+    
+    iGlobalWaitNote = CHbDeviceProgressDialogSymbian::NewL(
+            CHbDeviceProgressDialogSymbian::EWaitDialog );
+    
+    // loc: Load string 
+    iGlobalResource = HbTextResolverSymbian::LoadL( KInstalling, aName );
+    if ( iGlobalResource )
+        iGlobalWaitNote->SetTextL( iGlobalResource->Des() );
+
+    // Icon ?
+    //iGlobalWaitNote->SetIconNameL(const TDesC& aIconName);
+    
+    // Button ?
+    iGlobalWaitNote->SetButton(ETrue);
+    
+    iGlobalWaitNote->SetObserver( this );
+    iGlobalWaitNote->SetAutoClose(EFalse);
+    iGlobalWaitNote->ShowL();
+    
 	IAUPDATE_TRACE("[IAUpdater] CIAUpdaterDialog::ShowWaitingNoteL end");
 	}
 
@@ -178,50 +144,39 @@
 void CIAUpdaterDialog::CancelWaitingNoteL()
 	{
     IAUPDATE_TRACE("[IAUpdater] CIAUpdaterDialog::CancelWaitingNoteL begin");
-	
-	/*if ( iNoteId != 0 )
-		{
-        IAUPDATE_TRACE("[IAUpdater] Cancel waiting note.");
-	    iNote->CancelNoteL( iNoteId );
-	    iNoteId = 0;
-		}*/
-
+    
+    DestroyGlobalWaitNote();
+    
     IAUPDATE_TRACE("[IAUpdater] CIAUpdaterDialog::CancelWaitingNoteL end");
 	}
 
-	
-
+void CIAUpdaterDialog::ProgressDialogCancelled(
+    const CHbDeviceProgressDialogSymbian* /*aProgressDialog*/ )
+    {
     
+    iObserver->UserCancel();
     
-// ---------------------------------------------------------------------------
-// CIAUpdaterDialog:::DoCancel
-// 
-// ---------------------------------------------------------------------------
-// 
-void CIAUpdaterDialog::DoCancel()
+    }
+
+void CIAUpdaterDialog::ProgressDialogClosed(
+    const CHbDeviceProgressDialogSymbian* /*aProgressDialog*/ )
     {
-    TRAP_IGNORE( CancelWaitingNoteL() );
+    
     }
 
-// ---------------------------------------------------------------------------
-// CIAUpdateNetworkRegistration::RunL()
-// 
-// ---------------------------------------------------------------------------
-//
-void CIAUpdaterDialog::RunL()
+// -----------------------------------------------------------------------------
+// CIAUpdaterDialog::DestroyGlobalWaitNote
+// -----------------------------------------------------------------------------
+void CIAUpdaterDialog::DestroyGlobalWaitNote()
     {
-    IAUPDATE_TRACE_1("[IAUpdater] CIAUpdaterDialog::RunL() iStatus : %d", iStatus.Int() );
-    iNoteId = 0;
-    /*if ( iStatus.Int() == EAknSoftkeyCancel )
+    if ( iGlobalWaitNote )
         {
-    	iObserver->UserCancel();
+        iGlobalWaitNote->Close();
+        delete iGlobalWaitNote;
+        iGlobalWaitNote = NULL;
+        delete iGlobalResource;
+        iGlobalResource = NULL;
         }
-    else
-        {
-        iObserver->UserExit();	
-        }*/
     }
-
-// ======== GLOBAL FUNCTIONS ========
-
+    
 //  EOF  
--- a/iaupdate/IAD/updater/src/iaupdatermngr.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/updater/src/iaupdatermngr.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -166,7 +166,8 @@
     TBool showing( EFalse );
     User::LeaveIfError( iFs.Connect() );
     User::LeaveIfError( iWsSession.Connect( iFs ) );
-    CIAUpdaterDialog* dialogs( CIAUpdaterDialog::NewLC( iFs, *this ) );
+    //CIAUpdaterDialog* dialogs( CIAUpdaterDialog::NewLC( iFs, *this ) );
+    CIAUpdaterDialog* dialogs( CIAUpdaterDialog::NewLC( *this ) );
     if ( count > 0 )
         {
         TInt nameIndex( 0 );
--- a/iaupdate/IAD/updater/src/iaupdatersilentlauncher.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/IAD/updater/src/iaupdatersilentlauncher.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -43,7 +43,12 @@
 //
 void CIAUpdaterSilentLauncher::ConstructL()
     {
-    iOptionsPckg = SilentInstallOptionsL();
+    
+    iOptionsPckg = Usif::COpaqueNamedParams::NewL();
+    iResults = Usif::COpaqueNamedParams::NewL();
+    
+    UsifSilentInstallOptionsL( iOptionsPckg );    
+
     }
 
 // -----------------------------------------------------------------------------
@@ -68,6 +73,10 @@
 CIAUpdaterSilentLauncher::~CIAUpdaterSilentLauncher()
     {
     iLauncher.Close();
+    
+    delete iOptionsPckg;
+    delete iResults;
+    
     }
 
 // -----------------------------------------------------------------------------
@@ -88,7 +97,7 @@
 
     // Launch the installation   
     IAUPDATE_TRACE("[IAUpdater] Launch silent install");                    
-    iLauncher.SilentInstall( aStatus, aFile, iOptionsPckg );    
+    iLauncher.Install( aFile, *iOptionsPckg, *iResults, aStatus );
 
     IAUPDATE_TRACE("[IAUpdater] CIAUpdaterSilentLauncher::InstallL() end"); 
     }
@@ -102,71 +111,64 @@
     {
     IAUPDATE_TRACE("[IAUpdater] CIAUpdaterSilentLauncher::Cancel() begin");       
 
-    iLauncher.CancelAsyncRequest( SwiUI::ERequestSilentInstall );   
+    iLauncher.CancelOperation();
 
     IAUPDATE_TRACE("[IAUpdater] CIAUpdaterSilentLauncher::Cancel() end"); 
     }
 
-
 // ---------------------------------------------------------------------------
-// CIAUpdaterSilentLauncher::SilentInstallOptionsL
+// IAUpdateUtils::UsifSilentInstallOptionsL
 // 
 // ---------------------------------------------------------------------------
-//
-SwiUI::TInstallOptions CIAUpdaterSilentLauncher::SilentInstallOptionsL() const
+
+void  CIAUpdaterSilentLauncher::UsifSilentInstallOptionsL( 
+        Usif::COpaqueNamedParams * aOptions )
     {
-    IAUPDATE_TRACE("[IAUpdater] CIAUpdaterSilentLauncher::SilentInstallOptionsL() begin"); 
-    
-    SwiUI::TInstallOptions options;
+
+    aOptions->AddIntL( Usif::KSifInParam_InstallSilently, ETrue );
 
-    // Upgrades are allowed        
-    options.iUpgrade = SwiUI::EPolicyAllowed;
-
+    // Upgrades are allowed 
+    aOptions->AddIntL( Usif::KSifInParam_AllowUpgrade, Usif::EAllowed );
+    
     // Install all if optional packets exist.
-    options.iOptionalItems = SwiUI::EPolicyAllowed;
-
+    aOptions->AddIntL( Usif::KSifInParam_InstallOptionalItems, Usif::EAllowed );
+    
     // Prevent online cert revocation check.
-    options.iOCSP = SwiUI::EPolicyNotAllowed;
+    aOptions->AddIntL( Usif::KSifInParam_PerformOCSP, Usif::ENotAllowed );
     
     // See iOCSP setting above
-    options.iIgnoreOCSPWarnings = SwiUI::EPolicyAllowed;
-
+    aOptions->AddIntL( Usif::KSifInParam_IgnoreOCSPWarnings, Usif::EAllowed );
+    
     // Do not allow installation of uncertified packages.
-    options.iUntrusted = SwiUI::EPolicyNotAllowed;
-
-    // If filetexts are included in SIS package. Then, show them.
-    options.iPackageInfo = SwiUI::EPolicyUserConfirm;
+    aOptions->AddIntL( Usif::KSifInParam_AllowUntrusted, Usif::ENotAllowed );
+    
+    // If filetexts are included in SIS package, show them.
+    aOptions->AddIntL( Usif::KSifInParam_PackageInfo, Usif::EAllowed );
     
     // Automatically grant user capabilities.
-    // See also iUntrusted above.
-    options.iCapabilities = SwiUI::EPolicyAllowed;
-
+    // See also KSifInParam_AllowUntrusted above.
+    aOptions->AddIntL( Usif::KSifInParam_GrantCapabilities, Usif::EAllowed );
+    
     // Open application will be closed.
-    options.iKillApp = SwiUI::EPolicyAllowed;
+    aOptions->AddIntL( Usif::KSifInParam_AllowAppShutdown, Usif::EAllowed );
     
     // Files can be overwritten.
-    options.iOverwrite = SwiUI::EPolicyAllowed;
+    aOptions->AddIntL( Usif::KSifInParam_AllowOverwrite, Usif::EAllowed  );
+    
+    // Incompatible allowed
+    aOptions->AddIntL( Usif::KSifInParam_AllowIncompatible, Usif::EAllowed  );
     
     // This only affects Java applications.
-    options.iDownload = SwiUI::EPolicyAllowed;
-
-    // Notice! Here we use always the same drive for the IAD.
-    // So, this will not change automatically according to the disk spaces 
-    // and when new memory cards are inserted into the phone.    
-    options.iDrive = IAUpdaterDefs::KIAUpdaterDrive;
+    aOptions->AddIntL( Usif::KSifInParam_AllowDownload, Usif::EAllowed  );
+    
+    // Where to save.
+    //aOptions->AddIntL( Usif::KSifInParam_Drive, EDriveC );
     
     // Choose the phone language.
-    options.iLang = User::Language();
-    
-    // If language is asked, then use the current phone language.
-    options.iUsePhoneLang = ETrue;
+    TLanguage lang = User::Language();
+    //aOptions->AddIntL( Usif::KSifInParam_Languages, lang ); // User::Language() );
     
-    // Does not affect SISX. This is for Java.
-    options.iUpgradeData = SwiUI::EPolicyAllowed;
-
-    IAUPDATE_TRACE("[IAUpdater] CIAUpdaterSilentLauncher::SilentInstallOptionsL() end"); 
-    
-    return options;
+    //aOptions->AddIntL( Usif::KSifInParam_Drive, IAUpdateUtils::DriveToInstallL( aUid, aSize ) );
     }
 
 
--- a/iaupdate/rom/iaupdateresources.iby	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdate/rom/iaupdateresources.iby	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 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"
@@ -24,7 +24,6 @@
 
 #ifdef FF_IAUPDATE
 S60_APP_RESOURCE(iaupdate)
-S60_APP_RESOURCE(iaupdater)
 S60_APP_RESOURCE(iaupdatelauncher)
 #endif //FF_IAUPDATE
 
Binary file iaupdateapi_stub/conf/CI_iaupdate.confml has changed
Binary file iaupdateapi_stub/conf/iaupdate.confml has changed
Binary file iaupdateapi_stub/conf/iaupdate_2000F85A.crml has changed
--- a/iaupdateapi_stub/group/bld.inf	Tue Jun 15 13:36:10 2010 +0100
+++ b/iaupdateapi_stub/group/bld.inf	Thu Jul 22 16:35:01 2010 +0100
@@ -25,6 +25,7 @@
 //Configuration tool migration
 ../conf/iaupdate.confml                    CONFML_EXPORT_PATH(iaupdate.confml,s60)
 ../conf/iaupdate_2000F85A.crml	           CRML_EXPORT_PATH(iaupdate_2000F85A.crml,s60)
+../conf/CI_iaupdate.confml                    CONFML_EXPORT_PATH(CI_iaupdate.confml,s60)
 
 ../rom/iaupdateapi.iby             CORE_MW_LAYER_IBY_EXPORT_PATH( iaupdateapi.iby )
 
--- a/installationservices/refsoftwareappmgr/group/security_referenceapplicationmanager.mrp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/refsoftwareappmgr/group/security_referenceapplicationmanager.mrp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,19 +1,3 @@
-#
-# 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: 
-#
-
 component	security_referenceapplicationmanager
 source	\sf\mw\appinstall\installationservices\refsoftwareappmgr
 binary	\sf\mw\appinstall\installationservices\refsoftwareappmgr\group	all
--- a/installationservices/refswinstallationplugin/group/security_sifrefplugin.mrp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/refswinstallationplugin/group/security_sifrefplugin.mrp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,19 +1,3 @@
-#
-# 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: 
-#
-
 component	security_sifrefplugin
 source	\sf\mw\appinstall\installationservices\refswinstallationplugin\
 binary	\sf\mw\appinstall\installationservices\refswinstallationplugin\group	all
--- a/installationservices/swcomponentregistry/bwins/scrclientu.def	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swcomponentregistry/bwins/scrclientu.def	Thu Jul 22 16:35:01 2010 +0100
@@ -9,7 +9,7 @@
 	?NewL@CGlobalComponentId@Usif@@SAPAV12@AAVRReadStream@@@Z @ 8 NONAME ; class Usif::CGlobalComponentId * Usif::CGlobalComponentId::NewL(class RReadStream &)
 	?NewL@CComponentEntry@Usif@@SAPAV12@AAVRReadStream@@@Z @ 9 NONAME ; class Usif::CComponentEntry * Usif::CComponentEntry::NewL(class RReadStream &)
 	?ExternalizeL@CLocalizableComponentInfo@Usif@@QBEXAAVRWriteStream@@@Z @ 10 NONAME ; void Usif::CLocalizableComponentInfo::ExternalizeL(class RWriteStream &) const
-	?AddPropertyL@CComponentFilter@Usif@@QAEXABVTDesC16@@ABVTDesC8@@@Z @ 11 NONAME ; void Usif::CComponentFilter::AddPropertyL(class TDesC16 const &, class TDesC8 const &)
+	?AddPropertyL@CComponentFilter@Usif@@QAEXABVTDesC16@@ABVTDesC8@@W4TDbOperator@12@2@Z @ 11 NONAME ; void Usif::CComponentFilter::AddPropertyL(class TDesC16 const &, class TDesC8 const &, enum Usif::CComponentFilter::TDbOperator, enum Usif::CComponentFilter::TDbOperator)
 	?ComponentId@CComponentEntry@Usif@@QBEABHXZ @ 12 NONAME ; int const & Usif::CComponentEntry::ComponentId(void) const
 	?BinaryValue@CBinaryPropertyEntry@Usif@@QAEABVTDesC8@@XZ @ 13 NONAME ; class TDesC8 const & Usif::CBinaryPropertyEntry::BinaryValue(void)
 	?VersionTo@CVersionedComponentId@Usif@@QBEPBVTDesC16@@XZ @ 14 NONAME ; class TDesC16 const * Usif::CVersionedComponentId::VersionTo(void) const
@@ -69,7 +69,7 @@
 	?CreateTransactionL@RSoftwareComponentRegistry@Usif@@QAEXXZ @ 68 NONAME ; void Usif::RSoftwareComponentRegistry::CreateTransactionL(void)
 	?NewLC@CScrLogEntry@Usif@@SAPAV12@ABVTDesC16@@000W4TScrComponentOperationType@2@@Z @ 69 NONAME ; class Usif::CScrLogEntry * Usif::CScrLogEntry::NewLC(class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, enum Usif::TScrComponentOperationType)
 	?SetSoftwareTypeL@CComponentFilter@Usif@@QAEXABVTDesC16@@@Z @ 70 NONAME ; void Usif::CComponentFilter::SetSoftwareTypeL(class TDesC16 const &)
-	?AddSoftwareTypeL@RSoftwareComponentRegistry@Usif@@QAEXABVTDesC16@@VTUid@@VTSecureId@@2ABV?$RPointerArray@VHBufC16@@@@PBV?$RPointerArray@VCLocalizedSoftwareTypeName@Usif@@@@@Z @ 71 NONAME ; void Usif::RSoftwareComponentRegistry::AddSoftwareTypeL(class TDesC16 const &, class TUid, class TSecureId, class TSecureId, class RPointerArray<class HBufC16> const &, class RPointerArray<class Usif::CLocalizedSoftwareTypeName> const *)
+	?AddSoftwareTypeL@RSoftwareComponentRegistry@Usif@@QAEXABVCSoftwareTypeRegInfo@2@@Z @ 71 NONAME ; void Usif::RSoftwareComponentRegistry::AddSoftwareTypeL(class TDesC16 const &, class TUid, class RArray<TSecureId>, class RPointerArray<class HBufC16> const &, class TDesC16 const &, class RPointerArray<class Usif::CLocalizedSoftwareTypeName> const *)
 	?NewL@CBinaryPropertyEntry@Usif@@SAPAV12@ABVTDesC16@@ABVTDesC8@@@Z @ 72 NONAME ; class Usif::CBinaryPropertyEntry * Usif::CBinaryPropertyEntry::NewL(class TDesC16 const &, class TDesC8 const &)
 	?IsKnownRevoked@CComponentEntry@Usif@@QBEHXZ @ 73 NONAME ; int Usif::CComponentEntry::IsKnownRevoked(void) const
 	?RetrieveLogEntriesL@RSoftwareComponentRegistry@Usif@@QBEXAAV?$RPointerArray@VCScrLogEntry@Usif@@@@PBVTDesC16@@@Z @ 74 NONAME ; void Usif::RSoftwareComponentRegistry::RetrieveLogEntriesL(class RPointerArray<class Usif::CScrLogEntry> &, class TDesC16 const *) const
@@ -87,7 +87,7 @@
 	?NewL@CVersionedComponentId@Usif@@SAPAV12@ABVCGlobalComponentId@2@PBVTDesC16@@1@Z @ 86 NONAME ; class Usif::CVersionedComponentId * Usif::CVersionedComponentId::NewL(class Usif::CGlobalComponentId const &, class TDesC16 const *, class TDesC16 const *)
 	?SetIsComponentKnownRevokedL@RSoftwareComponentRegistry@Usif@@QAEXHH@Z @ 87 NONAME ; void Usif::RSoftwareComponentRegistry::SetIsComponentKnownRevokedL(int, int)
 	??1CComponentEntry@Usif@@UAE@XZ @ 88 NONAME ; Usif::CComponentEntry::~CComponentEntry(void)
-	?AddPropertyL@CComponentFilter@Usif@@QAEXABVTDesC16@@_J@Z @ 89 NONAME ; void Usif::CComponentFilter::AddPropertyL(class TDesC16 const &, long long)
+	?AddPropertyL@CComponentFilter@Usif@@QAEXABVTDesC16@@_JW4TDbOperator@12@2@Z @ 89 NONAME ; void Usif::CComponentFilter::AddPropertyL(class TDesC16 const &, long long, enum Usif::CComponentFilter::TDbOperator, enum Usif::CComponentFilter::TDbOperator)
 	?NewLC@CComponentEntry@Usif@@SAPAV12@ABHABVTDesC16@@111H_JABW4TScomoState@2@ABV?$TBuf8@$0BK@@@11HHHH@Z @ 90 NONAME ; class Usif::CComponentEntry * Usif::CComponentEntry::NewLC(int const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, int, long long, enum Usif::TScomoState const &, class TBuf8<26> const &, class TDesC16 const &, class TDesC16 const &, int, int, int, int)
 	?NextFileSetL@RSoftwareComponentRegistryFilesList@Usif@@QBEXHAAV?$RPointerArray@VHBufC16@@@@@Z @ 91 NONAME ; void Usif::RSoftwareComponentRegistryFilesList::NextFileSetL(int, class RPointerArray<class HBufC16> &) const
 	?ConstructL@CLocalizedSoftwareTypeName@Usif@@AAEXABVTDesC16@@@Z @ 92 NONAME ; void Usif::CLocalizedSoftwareTypeName::ConstructL(class TDesC16 const &)
@@ -121,7 +121,7 @@
 	?DeleteFilePropertyL@RSoftwareComponentRegistry@Usif@@QAEXHABVTDesC16@@0@Z @ 120 NONAME ; void Usif::RSoftwareComponentRegistry::DeleteFilePropertyL(int, class TDesC16 const &, class TDesC16 const &)
 	?InternalizeL@CScrLogEntry@Usif@@QAEXAAVRReadStream@@@Z @ 121 NONAME ; void Usif::CScrLogEntry::InternalizeL(class RReadStream &)
 	??1CIntPropertyEntry@Usif@@UAE@XZ @ 122 NONAME ; Usif::CIntPropertyEntry::~CIntPropertyEntry(void)
-	?AddPropertyL@CComponentFilter@Usif@@QAEXABVTDesC16@@0W4TLanguage@@@Z @ 123 NONAME ; void Usif::CComponentFilter::AddPropertyL(class TDesC16 const &, class TDesC16 const &, enum TLanguage)
+	?AddPropertyL@CComponentFilter@Usif@@QAEXABVTDesC16@@0W4TLanguage@@W4TDbOperator@12@2@Z @ 123 NONAME ; void Usif::CComponentFilter::AddPropertyL(class TDesC16 const &, class TDesC16 const &, enum TLanguage, enum Usif::CComponentFilter::TDbOperator, enum Usif::CComponentFilter::TDbOperator)
 	?ExternalizeL@CComponentEntry@Usif@@QBEXAAVRWriteStream@@@Z @ 124 NONAME ; void Usif::CComponentEntry::ExternalizeL(class RWriteStream &) const
 	?DeleteComponentL@RSoftwareComponentRegistry@Usif@@QAEXH@Z @ 125 NONAME ; void Usif::RSoftwareComponentRegistry::DeleteComponentL(int)
 	?SoftwareTypeName@CGlobalComponentId@Usif@@QBEABVTDesC16@@XZ @ 126 NONAME ; class TDesC16 const & Usif::CGlobalComponentId::SoftwareTypeName(void) const
@@ -344,4 +344,18 @@
 	?NewL@CApplicationRegistrationData@Usif@@SAPAV12@AAVRReadStream@@@Z @ 343 NONAME ; class Usif::CApplicationRegistrationData * Usif::CApplicationRegistrationData::NewL(class RReadStream &)
 	?InternalizeL@TApplicationCharacteristics@Usif@@QAEXAAVRReadStream@@@Z @ 344 NONAME ; void Usif::TApplicationCharacteristics::InternalizeL(class RReadStream &)
 	??1CLauncherExecutable@Usif@@UAE@XZ @ 345 NONAME ; Usif::CLauncherExecutable::~CLauncherExecutable(void)
+	?ExternalizeL@CSoftwareTypeRegInfo@Usif@@QBEXAAVRWriteStream@@@Z @ 346 NONAME ; void Usif::CSoftwareTypeRegInfo::ExternalizeL(class RWriteStream &) const
+	?SetMimeTypeL@CSoftwareTypeRegInfo@Usif@@QAEXABVTDesC16@@@Z @ 347 NONAME ; void Usif::CSoftwareTypeRegInfo::SetMimeTypeL(class TDesC16 const &)
+	?SetLauncherExecutableL@CSoftwareTypeRegInfo@Usif@@QAEXABVTDesC16@@@Z @ 348 NONAME ; void Usif::CSoftwareTypeRegInfo::SetLauncherExecutableL(class TDesC16 const &)
+	?NewL@CSoftwareTypeRegInfo@Usif@@SAPAV12@AAVRReadStream@@@Z @ 349 NONAME ; class Usif::CSoftwareTypeRegInfo * Usif::CSoftwareTypeRegInfo::NewL(class RReadStream &)
+	??1CSoftwareTypeRegInfo@Usif@@UAE@XZ @ 350 NONAME ; Usif::CSoftwareTypeRegInfo::~CSoftwareTypeRegInfo(void)
+	?NewL@CSoftwareTypeRegInfo@Usif@@SAPAV12@ABVTDesC16@@@Z @ 351 NONAME ; class Usif::CSoftwareTypeRegInfo * Usif::CSoftwareTypeRegInfo::NewL(class TDesC16 const &)
+	?SetLocalizedSoftwareTypeNameL@CSoftwareTypeRegInfo@Usif@@QAEXW4TLanguage@@ABVTDesC16@@@Z @ 352 NONAME ; void Usif::CSoftwareTypeRegInfo::SetLocalizedSoftwareTypeNameL(enum TLanguage, class TDesC16 const &)
+	?AccessMode@TCustomAccessInfo@Usif@@QBE?AW4TAccessMode@2@XZ @ 353 NONAME ; enum Usif::TAccessMode Usif::TCustomAccessInfo::AccessMode(void) const
+	?SecureId@TCustomAccessInfo@Usif@@QBE?AVTSecureId@@XZ @ 354 NONAME ; class TSecureId Usif::TCustomAccessInfo::SecureId(void) const
+	??0TCustomAccessInfo@Usif@@QAE@VTSecureId@@W4TAccessMode@1@@Z @ 355 NONAME ; Usif::TCustomAccessInfo::TCustomAccessInfo(class TSecureId, enum Usif::TAccessMode)
+	?NameOperator@TPropertyOperator@CComponentFilter@Usif@@QBE?AW4TDbOperator@23@XZ @ 356 NONAME ; enum Usif::CComponentFilter::TDbOperator Usif::CComponentFilter::TPropertyOperator::NameOperator(void) const
+	?ValueOperator@TPropertyOperator@CComponentFilter@Usif@@QBE?AW4TDbOperator@23@XZ @ 357 NONAME ; enum Usif::CComponentFilter::TDbOperator Usif::CComponentFilter::TPropertyOperator::ValueOperator(void) const
+	?InternalizeL@TPropertyOperator@CComponentFilter@Usif@@QAEXAAVRReadStream@@@Z @ 358 NONAME ; void Usif::CComponentFilter::TPropertyOperator::InternalizeL(class RReadStream &)
+	??0TPropertyOperator@CComponentFilter@Usif@@QAE@W4TDbOperator@12@0@Z @ 359 NONAME ; Usif::CComponentFilter::TPropertyOperator::TPropertyOperator(enum Usif::CComponentFilter::TDbOperator, enum Usif::CComponentFilter::TDbOperator)
 
--- a/installationservices/swcomponentregistry/eabi/scrclientu.def	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swcomponentregistry/eabi/scrclientu.def	Thu Jul 22 16:35:01 2010 +0100
@@ -17,9 +17,9 @@
 	_ZN4Usif15CComponentEntryD1Ev @ 16 NONAME
 	_ZN4Usif15CComponentEntryD2Ev @ 17 NONAME
 	_ZN4Usif16CComponentFilter10SetVendorLERK7TDesC16 @ 18 NONAME
-	_ZN4Usif16CComponentFilter12AddPropertyLERK7TDesC16RK6TDesC8 @ 19 NONAME
-	_ZN4Usif16CComponentFilter12AddPropertyLERK7TDesC16S3_9TLanguage @ 20 NONAME
-	_ZN4Usif16CComponentFilter12AddPropertyLERK7TDesC16x @ 21 NONAME
+	_ZN4Usif16CComponentFilter12AddPropertyLERK7TDesC16RK6TDesC8NS0_11TDbOperatorES7_ @ 19 NONAME
+	_ZN4Usif16CComponentFilter12AddPropertyLERK7TDesC16S3_9TLanguageNS0_11TDbOperatorES5_ @ 20 NONAME
+	_ZN4Usif16CComponentFilter12AddPropertyLERK7TDesC16xNS0_11TDbOperatorES4_ @ 21 NONAME
 	_ZN4Usif16CComponentFilter12SetRemovableEi @ 22 NONAME
 	_ZN4Usif16CComponentFilter14SetScomoStateLENS_11TScomoStateE @ 23 NONAME
 	_ZN4Usif16CComponentFilter15SetDrmProtectedEi @ 24 NONAME
@@ -80,7 +80,7 @@
 	_ZN4Usif26RSoftwareComponentRegistry13AddComponentLERK13RPointerArrayINS_25CLocalizableComponentInfoEERK7TDesC16PS7_NS_26TScrComponentOperationTypeE @ 79 NONAME
 	_ZN4Usif26RSoftwareComponentRegistry13AddComponentLERK7TDesC16S3_S3_PS2_NS_26TScrComponentOperationTypeE @ 80 NONAME
 	_ZN4Usif26RSoftwareComponentRegistry14SetVendorNameLEiRK7TDesC169TLanguage @ 81 NONAME
-	_ZN4Usif26RSoftwareComponentRegistry16AddSoftwareTypeLERK7TDesC164TUid9TSecureIdS5_RK13RPointerArrayI7HBufC16EPKS6_INS_26CLocalizedSoftwareTypeNameEE @ 82 NONAME
+	_ZN4Usif26RSoftwareComponentRegistry16AddSoftwareTypeLERKNS_20CSoftwareTypeRegInfoE @ 82 NONAME
 	_ZN4Usif26RSoftwareComponentRegistry16CompareVersionsLERK7TDesC16S3_ @ 83 NONAME
 	_ZN4Usif26RSoftwareComponentRegistry16DeleteComponentLEi @ 84 NONAME
 	_ZN4Usif26RSoftwareComponentRegistry16SetFilePropertyLEiRK7TDesC16S3_RK6TDesC8 @ 85 NONAME
@@ -380,4 +380,22 @@
 	_ZNK4Usif9CDataType12ExternalizeLER12RWriteStream @ 379 NONAME
 	_ZNK4Usif9CDataType4TypeEv @ 380 NONAME
 	_ZNK4Usif9CDataType8PriorityEv @ 381 NONAME
+	_ZN4Usif20CSoftwareTypeRegInfo12SetMimeTypeLERK7TDesC16 @ 382 NONAME
+	_ZN4Usif20CSoftwareTypeRegInfo22SetLauncherExecutableLERK7TDesC16 @ 383 NONAME
+	_ZN4Usif20CSoftwareTypeRegInfo29SetLocalizedSoftwareTypeNameLE9TLanguageRK7TDesC16 @ 384 NONAME
+	_ZN4Usif20CSoftwareTypeRegInfo4NewLER11RReadStream @ 385 NONAME
+	_ZN4Usif20CSoftwareTypeRegInfo4NewLERK7TDesC16 @ 386 NONAME
+	_ZN4Usif20CSoftwareTypeRegInfoD0Ev @ 387 NONAME
+	_ZN4Usif20CSoftwareTypeRegInfoD1Ev @ 388 NONAME
+	_ZN4Usif20CSoftwareTypeRegInfoD2Ev @ 389 NONAME
+	_ZN4Usif17TCustomAccessInfoC1E9TSecureIdNS_11TAccessModeE @ 390 NONAME
+	_ZN4Usif17TCustomAccessInfoC2E9TSecureIdNS_11TAccessModeE @ 391 NONAME
+	_ZNK4Usif17TCustomAccessInfo10AccessModeEv @ 392 NONAME
+	_ZNK4Usif17TCustomAccessInfo8SecureIdEv @ 393 NONAME
+	_ZNK4Usif20CSoftwareTypeRegInfo12ExternalizeLER12RWriteStream @ 394 NONAME
+	_ZN4Usif16CComponentFilter17TPropertyOperator12InternalizeLER11RReadStream @ 395 NONAME
+	_ZN4Usif16CComponentFilter17TPropertyOperatorC1ENS0_11TDbOperatorES2_ @ 396 NONAME
+	_ZN4Usif16CComponentFilter17TPropertyOperatorC2ENS0_11TDbOperatorES2_ @ 397 NONAME
+	_ZNK4Usif16CComponentFilter17TPropertyOperator12NameOperatorEv @ 398 NONAME
+	_ZNK4Usif16CComponentFilter17TPropertyOperator13ValueOperatorEv @ 399 NONAME
 
--- a/installationservices/swcomponentregistry/group/bld.inf	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swcomponentregistry/group/bld.inf	Thu Jul 22 16:35:01 2010 +0100
@@ -35,6 +35,7 @@
 ../inc/appreginfo.h			SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(usif/scr/appreginfo.h)
 ../inc/scr.h 				SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(usif/scr/scr.h)
 ../inc/scrcommon.h 			SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(usif/scr/scrcommon.h)
+../inc/screntries_platform.h 			SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(usif/scr/screntries_platform.h)
 ../inc/scrcommon.inl 		SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(usif/scr/scrcommon.inl)
 
 // USIF common includes
--- a/installationservices/swcomponentregistry/group/security_softwarecomponentregistry.mrp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swcomponentregistry/group/security_softwarecomponentregistry.mrp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,19 +1,3 @@
-#
-# 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: 
-#
-
 component	security_softwarecomponentregistry
 source	\sf\mw\appinstall\installationservices\swcomponentregistry
 source	\sf\mw\appinstall\installationservices\swinstallationfw\common
--- a/installationservices/swcomponentregistry/inc/scr.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swcomponentregistry/inc/scr.h	Thu Jul 22 16:35:01 2010 +0100
@@ -34,6 +34,7 @@
 #include <usif/scr/appregentries.h>
 #include <scs/scsclient.h>
 #include <usif/scr/appreginfo.h>
+#include <usif/scr/screntries_platform.h>
 
 namespace Usif
 	{	 
@@ -766,7 +767,8 @@
 			Add a new software type name to the SCR database.
 			
 			N.B. This is a mutating function. Please see @see Usif::RSoftwareComponentRegistry.
-			
+			This can be called only by sisregistry.
+
 			@param aUniqueSwTypeName Non-localized unique software type name.
 			@param aSifPluginUid The SIF plug-in UID of the installer which is responsible for installing components with this software type
 			@param aInstallerSecureId The secure id of the installer which is responsible for installing components with this software type
@@ -778,7 +780,7 @@
             @leave A system-wide error code.
 			@internalTechnology
 		 */
-		IMPORT_C void AddSoftwareTypeL(const TDesC& aUniqueSwTypeName, TUid aSifPluginUid, TSecureId aInstallerSecureId, TSecureId aExecutionLayerSecureId, const RPointerArray<HBufC>& aMimeTypes, const RPointerArray<CLocalizedSoftwareTypeName>* aLocalizedSwTypeNames = NULL);
+		IMPORT_C void AddSoftwareTypeL(const Usif::CSoftwareTypeRegInfo& aSwTypeRegInfo);
 		
 		/**
 			Deletes a sofware type name entry and all its mime types from the registry.
--- a/installationservices/swcomponentregistry/inc/screntries.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swcomponentregistry/inc/screntries.h	Thu Jul 22 16:35:01 2010 +0100
@@ -32,1043 +32,1077 @@
 #include <usif/usifcommon.h>
 
 namespace Usif
-	{
-	// CONSTANTS
-	
-	/**
-		KUnspecifiedLocale means that the locale is not specified and locale resolving will be done by SCR.
-		First, the current locale with its downgraded languages (@see BaflUtils::GetDowngradePathL) is tried 
-		by SCR. If no value is found, then non-localized values are searched for. 
-	 */
-	static const TLanguage KUnspecifiedLocale = TLanguage(-1);
-	
-	/**
-		KNonLocalized means that only non-localized values are looked up by SCR.
-	 */
-	static const TLanguage KNonLocalized = TLanguage(0); 
-	
-	// CLASSES
-	
-		
-	NONSHARABLE_CLASS(CGlobalComponentId) : public CBase
-	/**
-		Encapsulates the global software component identifier which is a named, component level and nullable string.
-		that an installer may use to specify a deterministic identifier for the component that is unique within 
-		the context of that software type. This global component id would be the package UID for native applications 
-		or the midlet-names for Java etc 
-		
-		The global component id is consistent and equal on all devices. It is used to state dependencies 
-		and to check for the presence of installed software components of arbitrary types without each installer having 
-		to be aware of every other installers naming scheme.		
-	 */
-		{
-	public:
-		/**
-			Creates an empty global software component ID object.
-			@return A pointer to the newly allocated global software component ID object, if creation is successful.
-					The pointer is also put onto the cleanup stack.
-		 */
-		IMPORT_C static CGlobalComponentId* NewLC();
-				
-		/**
-			Creates a global software component ID object.
-			@param aGlobalIdName A deterministic identifier for the component that is unique within the context of that software type.
-			@param aUniqueSwTypeName Non-localized unique software type name, such as @see Usif::KSoftwareTypeNative and @see Usif::KSoftwareTypeJava.
-			@return A pointer to the newly allocated global software component ID object, if creation is successful.
-		 */ 
-		IMPORT_C static CGlobalComponentId* NewL(const TDesC& aGlobalIdName, const TDesC& aUniqueSwTypeName);
-		
-		/**
-			Creates a global software component ID object.
-			@param aGlobalIdName A deterministic identifier for the component that is unique within the context of that software type.
-			@param aUniqueSwTypeName Non-localized unique software type name, such as @see Usif::KSoftwareTypeNative and @see Usif::KSoftwareTypeJava.
-			@return A pointer to the newly allocated global software component ID object, if creation is successful.
-					The pointer is also put onto the cleanup stack.
-		 */ 
-		IMPORT_C static CGlobalComponentId* NewLC(const TDesC& aGlobalIdName, const TDesC& aUniqueSwTypeName);
-		
-		/**
-			Creates a global software component ID object from a stream.
-			@param aStream The stream to read the software component entry object from
-			@return A pointer to the newly allocated global software component ID object, if creation is successful.
-			@internalComponent
-		 */
-		IMPORT_C static CGlobalComponentId* NewL(RReadStream& aStream);
-				
-		/**
-			Externalises this CGlobalComponentId object to a write stream.
-			@param aStream The stream to which the object is externalised.
-			@internalComponent
-		 */
-		IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
-				
-		/**
-			Internalises this CGlobalComponentId object from a read stream.
-			@param aStream The stream from which the object is internalised.
-			@internalComponent
-		 */
-		IMPORT_C void InternalizeL(RReadStream& aStream);
-				
-		/** @return The global id name part (@see CGlobalComponentId::NewLC) of the global component id.*/
-		IMPORT_C const TDesC& GlobalIdName() const;
-			
-		/** @return The software type name part (@see CGlobalComponentId::NewLC) of the global component id. */
-		IMPORT_C const TDesC& SoftwareTypeName() const;
-		
-		IMPORT_C ~CGlobalComponentId();
-		
-	private:
-		CGlobalComponentId();
-		void ConstructL(const TDesC& aGlobalIdName, const TDesC& aSoftwareTypeName);
-		
-	private:
-		HBufC* iGlobalIdName;    	///< The global id name part of the global component id.
-		HBufC* iSoftwareTypeName; 	///< The software type name part of the global component id.
-		};
-	
-	
-	NONSHARABLE_CLASS(CVersionedComponentId) : public CBase
-	/**	 	
-	 	Class that represents a continuous set of versions for a particular component.
-		
-		This class is used for specifying dependencies, where a dependant component requires 
-		specific version(s) of the supplier to be present on the system. The version information 
-		is optional, i.e. this class can be used to represent any version of a component.
-		
-		If this class is used to represent a dependant component, it specifies the range of versions
-		of the dependency relationship defined by the dependant component. 
-	 */
-		{
-	public:
-		
-		/**
-			Creates an empty version component identifier object.
-			@return A pointer to the newly allocated version component identifier object, if creation is successful.
-					The pointer is also put onto the cleanup stack.
-		 */
-		IMPORT_C static CVersionedComponentId* NewLC();
-				
-		/**
-			Creates a versioned component identifier object.
-			
-			N.B. The version parameters are optional and used to set the lower and upper limit of the version range. 
-				 It is also possible to set only an upper limit or a lower limit or none. If only one version 
-				 parameter is supplied then a lower limit will be set. In this case, there is no upper limit. 
-				 If the first version parameter is upplied with KNullDesC, then the second version parameter
-				 will be used to set an upper limit.
-			
-			@param aGlobalId The global software component identifier.
-			@param aVersionFrom The first version of the specified version range.
-			@param aVersionTo The last version of the specified version range.
-					
-			@return A pointer to the newly allocated versioned component identifier object, if creation is successful.
-		 */ 
-		IMPORT_C static CVersionedComponentId* NewL(const CGlobalComponentId& aGlobalId, const TDesC* aVersionFrom=NULL, const TDesC* aVersionTo=NULL);
+    {
+    // CONSTANTS
+    
+    /**
+        KUnspecifiedLocale means that the locale is not specified and locale resolving will be done by SCR.
+        First, the current locale with its downgraded languages (@see BaflUtils::GetDowngradePathL) is tried 
+        by SCR. If no value is found, then non-localized values are searched for. 
+     */
+    static const TLanguage KUnspecifiedLocale = TLanguage(-1);
+    
+    /**
+        KNonLocalized means that only non-localized values are looked up by SCR.
+     */
+    static const TLanguage KNonLocalized = TLanguage(0); 
+    
+    // CLASSES
+    
+        
+    NONSHARABLE_CLASS(CGlobalComponentId) : public CBase
+    /**
+        Encapsulates the global software component identifier which is a named, component level and nullable string.
+        that an installer may use to specify a deterministic identifier for the component that is unique within 
+        the context of that software type. This global component id would be the package UID for native applications 
+        or the midlet-names for Java etc 
+        
+        The global component id is consistent and equal on all devices. It is used to state dependencies 
+        and to check for the presence of installed software components of arbitrary types without each installer having 
+        to be aware of every other installers naming scheme.        
+     */
+        {
+    public:
+        /**
+            Creates an empty global software component ID object.
+            @return A pointer to the newly allocated global software component ID object, if creation is successful.
+                    The pointer is also put onto the cleanup stack.
+         */
+        IMPORT_C static CGlobalComponentId* NewLC();
+                
+        /**
+            Creates a global software component ID object.
+            @param aGlobalIdName A deterministic identifier for the component that is unique within the context of that software type.
+            @param aUniqueSwTypeName Non-localized unique software type name, such as @see Usif::KSoftwareTypeNative and @see Usif::KSoftwareTypeJava.
+            @return A pointer to the newly allocated global software component ID object, if creation is successful.
+         */ 
+        IMPORT_C static CGlobalComponentId* NewL(const TDesC& aGlobalIdName, const TDesC& aUniqueSwTypeName);
+        
+        /**
+            Creates a global software component ID object.
+            @param aGlobalIdName A deterministic identifier for the component that is unique within the context of that software type.
+            @param aUniqueSwTypeName Non-localized unique software type name, such as @see Usif::KSoftwareTypeNative and @see Usif::KSoftwareTypeJava.
+            @return A pointer to the newly allocated global software component ID object, if creation is successful.
+                    The pointer is also put onto the cleanup stack.
+         */ 
+        IMPORT_C static CGlobalComponentId* NewLC(const TDesC& aGlobalIdName, const TDesC& aUniqueSwTypeName);
+        
+        /**
+            Creates a global software component ID object from a stream.
+            @param aStream The stream to read the software component entry object from
+            @return A pointer to the newly allocated global software component ID object, if creation is successful.
+            @internalComponent
+         */
+        IMPORT_C static CGlobalComponentId* NewL(RReadStream& aStream);
+                
+        /**
+            Externalises this CGlobalComponentId object to a write stream.
+            @param aStream The stream to which the object is externalised.
+            @internalComponent
+         */
+        IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+                
+        /**
+            Internalises this CGlobalComponentId object from a read stream.
+            @param aStream The stream from which the object is internalised.
+            @internalComponent
+         */
+        IMPORT_C void InternalizeL(RReadStream& aStream);
+                
+        /** @return The global id name part (@see CGlobalComponentId::NewLC) of the global component id.*/
+        IMPORT_C const TDesC& GlobalIdName() const;
+            
+        /** @return The software type name part (@see CGlobalComponentId::NewLC) of the global component id. */
+        IMPORT_C const TDesC& SoftwareTypeName() const;
+        
+        IMPORT_C ~CGlobalComponentId();
+        
+    private:
+        CGlobalComponentId();
+        void ConstructL(const TDesC& aGlobalIdName, const TDesC& aSoftwareTypeName);
+        
+    private:
+        HBufC* iGlobalIdName;       ///< The global id name part of the global component id.
+        HBufC* iSoftwareTypeName;   ///< The software type name part of the global component id.
+        };
+    
+    
+    NONSHARABLE_CLASS(CVersionedComponentId) : public CBase
+    /**     
+        Class that represents a continuous set of versions for a particular component.
+        
+        This class is used for specifying dependencies, where a dependant component requires 
+        specific version(s) of the supplier to be present on the system. The version information 
+        is optional, i.e. this class can be used to represent any version of a component.
+        
+        If this class is used to represent a dependant component, it specifies the range of versions
+        of the dependency relationship defined by the dependant component. 
+     */
+        {
+    public:
+        
+        /**
+            Creates an empty version component identifier object.
+            @return A pointer to the newly allocated version component identifier object, if creation is successful.
+                    The pointer is also put onto the cleanup stack.
+         */
+        IMPORT_C static CVersionedComponentId* NewLC();
+                
+        /**
+            Creates a versioned component identifier object.
+            
+            N.B. The version parameters are optional and used to set the lower and upper limit of the version range. 
+                 It is also possible to set only an upper limit or a lower limit or none. If only one version 
+                 parameter is supplied then a lower limit will be set. In this case, there is no upper limit. 
+                 If the first version parameter is upplied with KNullDesC, then the second version parameter
+                 will be used to set an upper limit.
+            
+            @param aGlobalId The global software component identifier.
+            @param aVersionFrom The first version of the specified version range.
+            @param aVersionTo The last version of the specified version range.
+                    
+            @return A pointer to the newly allocated versioned component identifier object, if creation is successful.
+         */ 
+        IMPORT_C static CVersionedComponentId* NewL(const CGlobalComponentId& aGlobalId, const TDesC* aVersionFrom=NULL, const TDesC* aVersionTo=NULL);
 
-		/**
-			Creates a versioned component identifier object.
-			For more information about the version parameters look at @see CVersionedComponentId::NewLC().
-			
-			@param aGlobalId The global software component identifier.
-			@param aVersionFrom The first version of the specified version range.  
-			@param aVersionTo The last version of the specified version range.
-			
-			@return A pointer to the newly allocated versioned component identifier object, if creation is successful.
-					The pointer is also put onto the cleanup stack.
-		 */ 
-		IMPORT_C static CVersionedComponentId* NewLC(const CGlobalComponentId& aGlobalId, const TDesC* aVersionFrom=NULL, const TDesC* aVersionTo=NULL);
-		
-		/**
-			Creates a versioned component identifier object from a stream.
-			@param aStream The stream to read the versioned component identifier object from
-			@return A pointer to the newly allocated versioned component identifier object, if creation is successful.
-			@internalComponent
-		  */
-		IMPORT_C static CVersionedComponentId* NewL(RReadStream& aStream);
+        /**
+            Creates a versioned component identifier object.
+            For more information about the version parameters look at @see CVersionedComponentId::NewLC().
+            
+            @param aGlobalId The global software component identifier.
+            @param aVersionFrom The first version of the specified version range.  
+            @param aVersionTo The last version of the specified version range.
+            
+            @return A pointer to the newly allocated versioned component identifier object, if creation is successful.
+                    The pointer is also put onto the cleanup stack.
+         */ 
+        IMPORT_C static CVersionedComponentId* NewLC(const CGlobalComponentId& aGlobalId, const TDesC* aVersionFrom=NULL, const TDesC* aVersionTo=NULL);
+        
+        /**
+            Creates a versioned component identifier object from a stream.
+            @param aStream The stream to read the versioned component identifier object from
+            @return A pointer to the newly allocated versioned component identifier object, if creation is successful.
+            @internalComponent
+          */
+        IMPORT_C static CVersionedComponentId* NewL(RReadStream& aStream);
 
-		/**
-			Internalises this CVersionedComponentId object from a read stream.
-			@param aStream The stream from which the object is internalised.
-			@internalComponent
-		 */
-		IMPORT_C void InternalizeL(RReadStream& aStream);
-		
-		/**
-			Externalises this CVersionedComponentId object to a write stream.
-			@param aStream The stream to which the object is externalised.
-			@internalComponent
-		 */
-		IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
-		
-		/** @return The global id of the versioned component. */
-		IMPORT_C const CGlobalComponentId& GlobalId() const;
-		
-		/** @return The first version of the specified version range. NULL, if there is no lower limit for the version range. */
-		IMPORT_C const TDesC* VersionFrom() const;
-		
-		/** @return  The last version of the specified version range. NULL, if there is no upper limit for the version range. */
-		IMPORT_C const TDesC* VersionTo() const;
-		
-		IMPORT_C ~CVersionedComponentId();
-				
-	private:
-		CVersionedComponentId();
-		void ConstructL(const CGlobalComponentId& aGlobalId, const TDesC* aVersionFrom, const TDesC* aVersionTo);
-		
-	private:
-		CGlobalComponentId* iGlobalId;  ///< The global id of the versioned component identifier.
-		HBufC* iVersionFrom;		///< The first version of the specified version range.
-		HBufC* iVersionTo;		///< The last version of the specified version range.
-		};
+        /**
+            Internalises this CVersionedComponentId object from a read stream.
+            @param aStream The stream from which the object is internalised.
+            @internalComponent
+         */
+        IMPORT_C void InternalizeL(RReadStream& aStream);
+        
+        /**
+            Externalises this CVersionedComponentId object to a write stream.
+            @param aStream The stream to which the object is externalised.
+            @internalComponent
+         */
+        IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+        
+        /** @return The global id of the versioned component. */
+        IMPORT_C const CGlobalComponentId& GlobalId() const;
+        
+        /** @return The first version of the specified version range. NULL, if there is no lower limit for the version range. */
+        IMPORT_C const TDesC* VersionFrom() const;
+        
+        /** @return  The last version of the specified version range. NULL, if there is no upper limit for the version range. */
+        IMPORT_C const TDesC* VersionTo() const;
+        
+        IMPORT_C ~CVersionedComponentId();
+                
+    private:
+        CVersionedComponentId();
+        void ConstructL(const CGlobalComponentId& aGlobalId, const TDesC* aVersionFrom, const TDesC* aVersionTo);
+        
+    private:
+        CGlobalComponentId* iGlobalId;  ///< The global id of the versioned component identifier.
+        HBufC* iVersionFrom;        ///< The first version of the specified version range.
+        HBufC* iVersionTo;      ///< The last version of the specified version range.
+        };
 
-	
-	class CComponentEntry : public CBase
-	/**
-		Class that represents a software component entry stored in the SCR.
-	 */
-		{
-		friend class CScrRequestImpl;
-	public:
-		/**
-			Creates an empty software component entry object.
-			@return A pointer to the newly allocated software component object, if creation is successful.
-		 */
-		IMPORT_C static CComponentEntry* NewL();
-		
-		/**
-			Creates an empty software component entry object.
-			@return A pointer to the newly allocated software component object, if creation is successful.
-			        The pointer is also put onto the cleanup stack.
-		 */
-		IMPORT_C static CComponentEntry* NewLC();
-		
-		/**
-			Creates a software component entry object from a stream.
-			@param aStream The stream to read the software component entry object from
-			@return A pointer to the newly allocated software component entry object, if creation is successful.
-			@internalComponent
-		 */
-		IMPORT_C static CComponentEntry* NewL(RReadStream& aStream);
-		
-		/**
-			Creates a software component entry object.
-			
-			@param aId	The unique ID of the software component.
-			@param aName The name of of the software component.
-			@param aVendor The vendor name of the software component.
-			@param aSwType The software type of the component.
-			@param aGlobalId The globally unique identifier of the component.
-			@param aRemovable Whether the component is removable. ETrue means the component is removable.
-			@param aSize The total size of the component at installation time in bytes.
-			@param aScomoState The SCOMO state of the component.
-			@param aInstalledDrives The set of drives that files for the software component were installed to. 
-			@param aVersion The version identifier of the software component.
-			@param aInstallTime The formatted install time string. The format is as following: YYYYMMDD:HHMMSS
-			@param aDrmProtected Whether the component is DRM protected. ETrue means the component is DRM protected.
-			@param aHidden Whether the component is displayed in the list of installed components. ETrue means the component is hidden.
-			@param aKnownRevoked Whether the component has been revoked. ETrue means that a revocation check was
-						           performed during or after the installation and the component was found to be revoked.
-			@param aOriginVerified Whether the installer has verified the originator of the component. ETrue means the installer 
-						            has verified the originator of the software component by using appropriate checking mechanisms.
-			@return A pointer to the newly allocated software component object, if creation is successful.
-			@internalComponent
-		 */
-		IMPORT_C static CComponentEntry* NewL(const TComponentId& aId, const TDesC& aName, const TDesC& aVendor, const TDesC& aSwType,
-											  const TDesC& aGlobalId, TBool aRemovable, TInt64 aSize, const TScomoState& aScomoState,
-											  const TDriveList& aInstalledDrives, const TDesC& aVersion, const TDesC& aInstallTime,
-											  TBool aDrmProtected, TBool aHidden, TBool aKnownRevoked, TBool aOriginVerified);
-		
-		/**
-			Creates a software component entry object.
-			
-			@param aId	The unique ID of the software component.
-			@param aName The name of of the software component.
-			@param aVendor The vendor name of the software component.
-			@param aSwType The software type of the component.
-			@param aGlobalId The globally unique identifier of the component.
-			@param aRemovable Whether the component is removable. ETrue means the component is removable.
-			@param aSize The total size of the component at installation time in bytes.
-			@param aScomoState The SCOMO state of the component.
-			@param aInstalledDrives The set of drives that files for the software component were installed to. 
-			@param aVersion The version identifier of the software component.
-			@param aInstallTime The formatted install time string. The format is as following: YYYYMMDD:HHMMSS	
-			@param aDrmProtected Whether the component is DRM protected. ETrue means the component is DRM protected.
-			@param aHidden Whether the component is displayed in the list of installed components. ETrue means the component is hidden.
-			@param aKnownRevoked Whether the component has been revoked. ETrue means that a revocation check was
-						           performed during or after the installation and the component was found to be revoked.
-			@param aOriginVerified Whether the installer has verified the originator of the component. ETrue means the installer 
-						            has verified the originator of the software component by using appropriate checking mechanisms.
-			@return A pointer to the newly allocated software component object, if creation is successful.
-			               The pointer is also put onto the cleanup stack.
-			@internalComponent
-		 */
-		IMPORT_C static CComponentEntry* NewLC(const TComponentId& aId, const TDesC& aName, const TDesC& aVendor, const TDesC& aSwType, 
-											   const TDesC& aGlobalId, TBool aRemovable, TInt64 aSize, const TScomoState& aScomoState, 
-											   const TDriveList& aInstalledDrives, const TDesC& aVersion, const TDesC& aInstallTime,
-											   TBool aDrmProtected, TBool aHidden, TBool aKnownRevoked, TBool aOriginVerified);
-		
-		IMPORT_C ~CComponentEntry();
-		
-		/**
-			Externalises this CComponentEntry object to a write stream.
-			@param aStream The stream to which the object is externalised.
-			@internalComponent
-		*/
-		IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
-		
-		/**
-			Internalises this CComponentEntry object from a read stream.
-			@param aStream The stream from which the object is internalised.
-			@internalComponent
-		*/
-		IMPORT_C void InternalizeL(RReadStream& aStream);
-		
-		/** @return The unique ID of the software component. */
-		IMPORT_C const TComponentId& ComponentId() const; 
-		
-		/** @return The name of the software component. */
-		IMPORT_C const TDesC& Name() const;
-		
-		/** @return The vendor name of the software component. */
-		IMPORT_C const TDesC& Vendor() const;
-		
-		/** @return The software type name of the software component, e.g @see Usif::KSoftwareTypeNative. */
-		IMPORT_C const TDesC& SoftwareType() const;
-		
-		/** @return Globally unique component identifier. */
-		IMPORT_C const TDesC& GlobalId() const;
-		
-		/** @return Whether the software component is removable. ETrue means it is removable. */
-		IMPORT_C TBool IsRemovable() const;
-		
-		/** @return The total size of the component at installation time in bytes. */
-		IMPORT_C TInt64  ComponentSize() const;
-		
-		/** @return The SCOMO state of the software component. @see Usif::TScomoState */
-		IMPORT_C const TScomoState& ScomoState() const;
-		
-		/** @return The set of drives that files for the software component were installed to. */
-		IMPORT_C const TDriveList& InstalledDrives() const;
-		
-		/** @return The version identifier of the software component. */
-		IMPORT_C const TDesC& Version() const;
-		
-		/** @return The install time of the component. */
-		IMPORT_C TTime InstallTimeL() const;
-		
-		/** @return  Whether the component is DRM protected. ETrue means the component is DRM protected.*/
-		IMPORT_C TBool IsDrmProtected() const;
-		
-		/** @return  Whether the component is hidden in the list of installed components. ETrue means the component is hidden. */
-		IMPORT_C TBool IsHidden() const;
-		
-		/** @return  Whether the component has been revoked. ETrue means that a revocation check was performed
-				  during or after the installation and the component was found to be revoked.
-		 */
-		IMPORT_C TBool IsKnownRevoked() const;
-		
-		/** @return  Whether the installer has verified the originator of the component. ETrue means the installer 
-			             has verified the originator of the software component by using appropriate checking mechanisms.
-		 */
-		IMPORT_C TBool IsOriginVerified()const;
-		
-	private:
-		CComponentEntry();
-		void ConstructL(const TComponentId& aId, const TDesC& aName, const TDesC& aVendor, const TDesC& aSwType, const TDesC& aGlobalId, TBool aRemovable, 
-						TInt64 aSize, const TScomoState& aScomoState, const TDriveList& aInstalledDrives, const TDesC& aVersion, const TDesC& aInstallTime,
-						TBool aDrmProtected, TBool aHidden, TBool aKnownRevoked, TBool aOriginVerified);
-	private:
-		TComponentId iComponentId;	 ///< The unique id of the software component.
-		HBufC* iName;				 ///< Name of the software component.
-		HBufC* iVendor;				 ///< Vendor of the software component.
-		HBufC* iSwType;				 ///< Software type name of the component.
-		HBufC* iGlobalId;			 ///< Globally unique component identifier.
-		TBool iRemovable;			 ///< Whether the component is removable.
-		TInt64 iSize;				 ///< The total size of the component at installation time in bytes.
-		TScomoState iScomoState;	 ///< SCOMO state of the component.
-		TDriveList iInstalledDrives; ///< The set of drives that files for the software component were installed to.
-	    HBufC* iVersion;			 ///< Version identifier of the software component
-	    HBufC* iInstallTime;		 ///< The install time of the component. 
-	    TBool iDrmProtected;		 ///< Whether the component is DRM protected.
-	    TBool iHidden;				 ///< Whether the component is hidden in the list of installed components.
-	    TBool iKnownRevoked;		 ///< Whether the component has been revoked.
-	    TBool iOriginVerified;		 ///< Whether the installer has verified the originator of the component.
-		};
-		
-	class CPropertyEntry : public CBase
-	/**
-		Abstract base class for a software component property entry. 
-		Specifies the type of a software component property. Before getting a property value, 
-		the base property object must be converted to a derived property object (e.g. CIntPropertyEntry). 
-	 */
-		{
-	public:
-	/** 
-		Enumeration to indicate the type of the property.
-	 */
-	enum TPropertyType
-		{
-		EBinaryProperty = 1,	///< The property value is binary data. See @see CBinaryPropertyEntry.
-		EIntProperty,		///< The property value is integer. See @see CIntPropertyEntry.
-		ELocalizedProperty,  ///< The property is a localizable string. See @see CLocalizablePropertyEntry.
-		};	
-	public:
-		/**
-			Creates a base software component property object from a stream.
-			@param aStream The stream to read the software property object from.
-			@return A pointer to the newly allocated software property object, if creation is successful.
-			@internalComponent
-		 */
-		IMPORT_C static CPropertyEntry* NewL(RReadStream& aStream);
-		
-		/** @return The name of the property. */
-		IMPORT_C const TDesC& PropertyName() const;
-		
-		/** Virtual destructor for the component property object*/
-		IMPORT_C virtual ~CPropertyEntry();
-		
-		/**
-			Externalises a base/derived property object to a write stream.
-			@param aStream The stream to which the object is externalised.
-			@internalComponent
-		*/
-		IMPORT_C void ExternalizeL(RWriteStream& aStream) const;		 
-		
-		/** @return The type of the property object. Implemented by derived classes. */
-		virtual CPropertyEntry::TPropertyType PropertyType() const = 0;
-		
-	protected:
-		CPropertyEntry();
-		void ConstructL(const TDesC& aPropertyName);
-	
-	private:
-		virtual void DoExternalizeL(RWriteStream &aStream) const = 0;
-		virtual void DoInternalizeL(RReadStream& aStream) = 0;
-		
-	private:	
-		HBufC* iPropertyName;      ///< The name of the property entry.
-		};
-	
-	class CIntPropertyEntry : public CPropertyEntry
-	/**
-		Class that represents an integer component property. 
-	 */
-		{
-	public:
-		/**
-			Creates an integer component property object.
-			
-			@param aPropertyName The name of the property.
-			@param aPropertyValue The value of the property.
-			@return A pointer to the newly allocated component property object, if creation is successful.
-		 */
-		IMPORT_C static CIntPropertyEntry* NewL(const TDesC& aPropertyName, TInt64 aPropertyValue);
-		
-		/**
-			Creates an integer component property object.
-			
-			@param aPropertyName The name of the property.
-			@param aPropertyValue The value of the property.
-			@return A pointer to the newly allocated component property object, if creation is successful.
-					The pointer is also put onto the cleanup stack.
-		 */
-		IMPORT_C static CIntPropertyEntry* NewLC(const TDesC& aPropertyName, TInt64 aPropertyValue);
-		
-		IMPORT_C ~CIntPropertyEntry();
-		
-		/**
-		 	The implementation of pure virtual function from @see Usif::CPropertyEntry.
-		 	@return The type of the property object.
-		 */
-		IMPORT_C CPropertyEntry::TPropertyType PropertyType() const;
-		
-		/** @return The 32-bit integer value. */ 
-		IMPORT_C TInt IntValue();
-		
-		/** @return The 64-bit integer value. */ 
-		IMPORT_C TInt64 Int64Value();
-		
-	private:
-		void DoExternalizeL(RWriteStream& aStream) const;
-		void DoInternalizeL(RReadStream& aStream);
-		
-		CIntPropertyEntry();
-		CIntPropertyEntry(TInt64 aPropertyIntValue);
-		void ConstructL(const TDesC& aPropertyName);
-		static CIntPropertyEntry* NewLC();
-		friend CPropertyEntry* CPropertyEntry::NewL(RReadStream& aStream);
-		
-	private:
-		TInt64 iIntValue;   ///< The integer property value.
-		};
-	
-	class CBinaryPropertyEntry : public CPropertyEntry
-	/**
-		Class that represents a binary non-localizable 8-bit descriptor component property.		
-	*/
-		{
-	public:
-		/**
-			Creates a binary component property object.
-				
-			@param aPropertyName The name of the property.
-			@param aPropertyValue The value of the property.
-			@return A pointer to the newly allocated component property object, if creation is successful.
-		 */
-		IMPORT_C static CBinaryPropertyEntry* NewL(const TDesC& aPropertyName, const TDesC8& aPropertyValue);
-		
-		/**
-			Creates a binary component property object.
-						
-			@param aPropertyName The name of the property.
-			@param aPropertyValue The value of the property.
-			@return A pointer to the newly allocated component property object, if creation is successful.
-					The pointer is also put onto the cleanup stack.
-		 */
-		IMPORT_C static CBinaryPropertyEntry* NewLC(const TDesC& aPropertyName, const TDesC8& aPropertyValue);
-		
-		IMPORT_C ~CBinaryPropertyEntry(); 
-		
-		/**
-			The implementation of pure virtual function from @see Usif::CPropertyEntry.
-			@return The type of the property object.
-		 */
-		IMPORT_C TPropertyType PropertyType() const;
-		
-		/** @return The binary property value. */ 
-		IMPORT_C const TDesC8& BinaryValue();
-	
-	private:
-		CBinaryPropertyEntry();
-		void ConstructL(const TDesC& aPropertyName, const TDesC8& aPropertyValue);
-		void DoExternalizeL(RWriteStream& aStream) const;
-		void DoInternalizeL(RReadStream& aStream);
-	
-		static CBinaryPropertyEntry* NewLC();
-		friend CPropertyEntry* CPropertyEntry::NewL(RReadStream& aStream);
-		
-	private:
-		HBufC8* iValue; ///< The value of the binary property.
-		};
-	
-	NONSHARABLE_CLASS(CLocalizablePropertyEntry) : public CPropertyEntry
-	/**
-		Class that represents a localizable string component property.
-		
-		A localized component property is a string property which can have different values 
-		for different locales. A particular instance of a localized component property includes 
-		both the localized string value and the locale in question.
-	 */
-		{
-	public:
-		/**
-			Creates a localizable component property object.
-					
-			@param aPropertyName The name of the property.
-			@param aPropertyValue The value of the property.
-			@param aLocale The locale of the property.
-			@return A pointer to the newly allocated component property object, if creation is successful.
-		 */
-		IMPORT_C static CLocalizablePropertyEntry* NewL(const TDesC& aPropertyName, const TDesC& aPropertyValue, TLanguage aLocale);
-		
-		/**
-			Creates a localizable component property object.
-							
-			@param aPropertyName The name of the property.
-			@param aPropertyValue The value of the property.
-			@param aLocale The locale of the property.
-			@return A pointer to the newly allocated component property object, if creation is successful.
-					The pointer is also put onto the cleanup stack.
-		 */
-		IMPORT_C static CLocalizablePropertyEntry* NewLC( const TDesC& aPropertyName, const TDesC& aPropertyValue, TLanguage aLocale);
-		
-		IMPORT_C ~CLocalizablePropertyEntry();
-		
-		/** The locale of the localizable property object. */
-		IMPORT_C TLanguage LocaleL() const;
-		
-		/**
-			The implementation of pure virtual function from @see Usif::CPropertyEntry.
-			@return The type of the property object.
-		 */
-		IMPORT_C TPropertyType PropertyType() const;
-		
-		/** @return The string property value. */
-		IMPORT_C const TDesC& StrValue() const;		
-		
-	private:
-		CLocalizablePropertyEntry();
-		CLocalizablePropertyEntry(TLanguage aLocale);
-		void DoExternalizeL(RWriteStream &aStream) const;
-		void DoInternalizeL(RReadStream& aStream);
-		static CLocalizablePropertyEntry* NewLC();
-		friend CPropertyEntry* CPropertyEntry::NewL(RReadStream& aStream);
-		void ConstructL(const TDesC& aPropertyName, const TDesC& aPropertyValue);
-		
-	private:
-		TLanguage iLocale; ///< The language code of the locale.
-		HBufC* iStrValue; ///< The string value of the property
-		};
-	
-	NONSHARABLE_CLASS(CComponentFilter) : public CBase
-	/**
-		A filter class which is used to filter the software components stored in the SCR.
-		An empty filter object is first created and then required filter keys are set separately.
-	 */
-		{
-		friend class CScrRequestImpl;
-	public:
-		/**
-			Creates an empty component filter object.
-			@return A pointer to the newly allocated component filter object, if creation is successful.
-		 */
-		IMPORT_C static CComponentFilter* NewL();
-		
-		/**
-			Creates an empty component filter object.
-			@return A pointer to the newly allocated component filter object, if creation is successful.
-					The pointer is also put onto the cleanup stack.
-		 */
-		IMPORT_C static CComponentFilter* NewLC();
-		
-		/**
-			Creates a component filter object from a stream.
-			@param aStream The stream to read the component filter object from
-			@return A pointer to the newly allocated component filter object, if creation is successful.
-			@internalComponent
-		 */
-		IMPORT_C static CComponentFilter* NewL(RReadStream& aStream);
-		
-		~CComponentFilter();
-		
-		/**
-			Restricts the returned component names in the filter.
-			Please note that wildcards are not supported and matching is case-sensitive.
-			@param aName The name of the software component.
-		 */
-		IMPORT_C void SetNameL(const TDesC& aName);
-		
-		/**
-			Restricts the returned component vendor names in the filter.
-			Please note that wildcards are not supported and matching is case-sensitive.
-			@param aVendor The vendor name of the software component.
-		 */
-		IMPORT_C void SetVendorL(const TDesC& aVendor);
-		
-		/**
-			Restricts the returned component software types in the filter.
-			@param aSwType The software type name of the software component (e.g. @see Usif::KSoftwareTypeNative and @see Usif::KSoftwareTypeJava). 
-		*/
-		IMPORT_C void SetSoftwareTypeL(const TDesC& aSwType);
-		
-		/**
-			Sets whether the software component which is being searched for is removable.
-			@param aValue ETrue, if the software component is removable. Otherwise, EFalse.
-		 */
-		IMPORT_C void SetRemovable(TBool aValue);
-		
-		/**
-			Sets whether the software component which is being searched for is DRM protected.
-			@param aValue ETrue, if the software component is DRM protected. Otherwise, EFalse.
-		 */
-		IMPORT_C void SetDrmProtected(TBool aValue);
-		
-		/**
-			Sets whether the software component which is being searched for is hidden.
-			@param aValue ETrue, if the software component is hidden. Otherwise, EFalse.
-		 */
-		IMPORT_C void SetHidden(TBool aValue);
-		
-		/**
-			Sets whether the software component which is being searched for is known-revoked.
-			@param aValue ETrue, if the software component is known-revoked. Otherwise, EFalse.
-		 */
-		IMPORT_C void SetKnownRevoked(TBool aValue);
-		
-		/**
-			Sets whether the software component which is being searched for is origin-verified.
-			@param aValue ETrue, if the software component is origin-verified. Otherwise, EFalse.
-		 */
-		IMPORT_C void SetOriginVerified(TBool aValue);
-		
-		/**
-			Restricts the returned component SCOMO states in the filter.
-			See @see Usif::TScomoState for the list of SCOMO states.
-			@param aScomoState The SCOMO state of the software component.
-		 */
-		IMPORT_C void SetScomoStateL(TScomoState aScomoState);
-		
-		/**
-			Sets the set of drives that files of the software components were installed to.
-			If more than one drive is supplied, all software components which files were installed to
-			any of these drives are returned.
-		 */
-		IMPORT_C void SetInstalledDrivesL(const TDriveList& aDrives);
-		
-		/**
-			Adds a localizable property to the filter. Only the software components having 
-			this property with the specified value are returned by the filter. It is possible to 
-			add more than one property. In this case, the software components possessing all provided 
-			properties with the specified values are returned by the filter.
-			
-			For more information about searching for current locale variant of properties look at 
-			@see RSoftwareComponentRegistry::GetComponentPropertyL.
-			
-			If the locale is provided, the component will be returned only if the property exists 
-			for the specified locale. If the locale is not provided, or is equal to KUnspecifiedLocale,
-			then all software components which have the property with the specified value for any locale will
-			match this condition.
-			
-			@param aName The name of the property. Please note that wildcards are not supported and matching is case-insensitive.
-			@param aValue The value of the property.	
-			@param aLocale Optional. The language code of the property value.			
-					
-		 */
-		IMPORT_C void AddPropertyL(const TDesC& aName, const TDesC& aValue, TLanguage aLocale=KUnspecifiedLocale);
-		
-		/**
-			Adds an integer property to the filter. The software components having this
-			property with the specified value are enumerated. It is possible to add more than one property. 
-			In this case, the software components possessing all provided properties with the specified 
-			values are enumerated.
-			
-			@param aName The name of the property. Please note that wildcards are not supported and matching is case-insensitive.
-			@param aValue The value of the property.
-		 */
-		IMPORT_C void AddPropertyL(const TDesC& aName, TInt64 aValue);
-		
-		/**
-			Adds a binary 8-bit descriptor property to the filter. The software components having this
-			property with the specified value are enumerated. It is possible to add more than one property. 
-			In this case, the software components possessing all provided properties with the specified 
-			values are enumerated.
-			
-			@param aName The name of the property. Please note that wildcards are not supported and matching is case-insensitive.
-			@param aValue The value of the property.
-		 */
-		IMPORT_C void AddPropertyL(const TDesC& aName, const TDesC8& aValue);		
-		
-		/**
-		 	Sets a file name to filter the software components having registered this file.
-		 	Please note that wildcards are not supported and matching is case-insensitive.
-			
-			N.B. This call can be invoked multiple times for the same filter in order to request components which register a particular set of files.
-		 	@param aFile The fully qualified file path.
-		 */
-		IMPORT_C void SetFileL(const TDesC& aFile);
-		
-		/**
-			Externalises a component filter object to a write stream.
-			@param aStream The stream to which the object is externalised.
-			@internalComponent
-		*/
-		IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
-		
-	private:
-		CComponentFilter();
-		void ConstructL();
-		void InternalizeL(RReadStream& aStream);
-		
-		enum TFieldsFlag
-			{
-			EName 			= 0x0001,
-			EVendor 		= 0x0002,
-			ESoftwareType   = 0x0004,
-			ERemovable 		= 0x0008,
-			EScomoState 	= 0x0010,
-			EInstalledDrive = 0x0020,
-			EProperty       = 0x0040,
-			EFile			= 0x0080,
-			EDrmProtected   = 0x0100,
-			EHidden		    = 0x0200,
-			EKnownRevoked   = 0x0400,
-			EOriginVerified = 0x0800
-			};
-		
-	private:
-		TUint16 iSetFlag;			 ///< Flag variable that shows what fields have been set
-		HBufC* iName;				 ///< Name for the software component
-		HBufC* iVendor;				 ///< Vendor for the software component
-		HBufC* iSwType;				 ///< Software type of the component.
-		TBool iRemovable;			 ///< Whether the software component is removable
-		TScomoState iScomoState;	 ///< SCOMO state for the software component
-		TDriveList iInstalledDrives; ///< Installed drives for the software component
-		RPointerArray<CPropertyEntry> iPropertyList; ///< The list of key properties
-		HBufC* iFile;				///< The full name of the file owned by the component
-		TBool iDrmProtected;		 ///< Whether the component is DRM protected.
-		TBool iHidden;				 ///< Whether the component is displayed in the list of installed components.
-		TBool iKnownRevoked;		 ///< Whether the component has been revoked.
-		TBool iOriginVerified;		 ///< Whether the installer has verified the originator of the component.
-		};
+    
+    class CComponentEntry : public CBase
+    /**
+        Class that represents a software component entry stored in the SCR.
+     */
+        {
+        friend class CScrRequestImpl;
+    public:
+        /**
+            Creates an empty software component entry object.
+            @return A pointer to the newly allocated software component object, if creation is successful.
+         */
+        IMPORT_C static CComponentEntry* NewL();
+        
+        /**
+            Creates an empty software component entry object.
+            @return A pointer to the newly allocated software component object, if creation is successful.
+                    The pointer is also put onto the cleanup stack.
+         */
+        IMPORT_C static CComponentEntry* NewLC();
+        
+        /**
+            Creates a software component entry object from a stream.
+            @param aStream The stream to read the software component entry object from
+            @return A pointer to the newly allocated software component entry object, if creation is successful.
+            @internalComponent
+         */
+        IMPORT_C static CComponentEntry* NewL(RReadStream& aStream);
+        
+        /**
+            Creates a software component entry object.
+            
+            @param aId  The unique ID of the software component.
+            @param aName The name of of the software component.
+            @param aVendor The vendor name of the software component.
+            @param aSwType The software type of the component.
+            @param aGlobalId The globally unique identifier of the component.
+            @param aRemovable Whether the component is removable. ETrue means the component is removable.
+            @param aSize The total size of the component at installation time in bytes.
+            @param aScomoState The SCOMO state of the component.
+            @param aInstalledDrives The set of drives that files for the software component were installed to. 
+            @param aVersion The version identifier of the software component.
+            @param aInstallTime The formatted install time string. The format is as following: YYYYMMDD:HHMMSS
+            @param aDrmProtected Whether the component is DRM protected. ETrue means the component is DRM protected.
+            @param aHidden Whether the component is displayed in the list of installed components. ETrue means the component is hidden.
+            @param aKnownRevoked Whether the component has been revoked. ETrue means that a revocation check was
+                                   performed during or after the installation and the component was found to be revoked.
+            @param aOriginVerified Whether the installer has verified the originator of the component. ETrue means the installer 
+                                    has verified the originator of the software component by using appropriate checking mechanisms.
+            @return A pointer to the newly allocated software component object, if creation is successful.
+            @internalComponent
+         */
+        IMPORT_C static CComponentEntry* NewL(const TComponentId& aId, const TDesC& aName, const TDesC& aVendor, const TDesC& aSwType,
+                                              const TDesC& aGlobalId, TBool aRemovable, TInt64 aSize, const TScomoState& aScomoState,
+                                              const TDriveList& aInstalledDrives, const TDesC& aVersion, const TDesC& aInstallTime,
+                                              TBool aDrmProtected, TBool aHidden, TBool aKnownRevoked, TBool aOriginVerified);
+        
+        /**
+            Creates a software component entry object.
+            
+            @param aId  The unique ID of the software component.
+            @param aName The name of of the software component.
+            @param aVendor The vendor name of the software component.
+            @param aSwType The software type of the component.
+            @param aGlobalId The globally unique identifier of the component.
+            @param aRemovable Whether the component is removable. ETrue means the component is removable.
+            @param aSize The total size of the component at installation time in bytes.
+            @param aScomoState The SCOMO state of the component.
+            @param aInstalledDrives The set of drives that files for the software component were installed to. 
+            @param aVersion The version identifier of the software component.
+            @param aInstallTime The formatted install time string. The format is as following: YYYYMMDD:HHMMSS  
+            @param aDrmProtected Whether the component is DRM protected. ETrue means the component is DRM protected.
+            @param aHidden Whether the component is displayed in the list of installed components. ETrue means the component is hidden.
+            @param aKnownRevoked Whether the component has been revoked. ETrue means that a revocation check was
+                                   performed during or after the installation and the component was found to be revoked.
+            @param aOriginVerified Whether the installer has verified the originator of the component. ETrue means the installer 
+                                    has verified the originator of the software component by using appropriate checking mechanisms.
+            @return A pointer to the newly allocated software component object, if creation is successful.
+                           The pointer is also put onto the cleanup stack.
+            @internalComponent
+         */
+        IMPORT_C static CComponentEntry* NewLC(const TComponentId& aId, const TDesC& aName, const TDesC& aVendor, const TDesC& aSwType, 
+                                               const TDesC& aGlobalId, TBool aRemovable, TInt64 aSize, const TScomoState& aScomoState, 
+                                               const TDriveList& aInstalledDrives, const TDesC& aVersion, const TDesC& aInstallTime,
+                                               TBool aDrmProtected, TBool aHidden, TBool aKnownRevoked, TBool aOriginVerified);
+        
+        IMPORT_C ~CComponentEntry();
+        
+        /**
+            Externalises this CComponentEntry object to a write stream.
+            @param aStream The stream to which the object is externalised.
+            @internalComponent
+        */
+        IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+        
+        /**
+            Internalises this CComponentEntry object from a read stream.
+            @param aStream The stream from which the object is internalised.
+            @internalComponent
+        */
+        IMPORT_C void InternalizeL(RReadStream& aStream);
+        
+        /** @return The unique ID of the software component. */
+        IMPORT_C const TComponentId& ComponentId() const; 
+        
+        /** @return The name of the software component. */
+        IMPORT_C const TDesC& Name() const;
+        
+        /** @return The vendor name of the software component. */
+        IMPORT_C const TDesC& Vendor() const;
+        
+        /** @return The software type name of the software component, e.g @see Usif::KSoftwareTypeNative. */
+        IMPORT_C const TDesC& SoftwareType() const;
+        
+        /** @return Globally unique component identifier. */
+        IMPORT_C const TDesC& GlobalId() const;
+        
+        /** @return Whether the software component is removable. ETrue means it is removable. */
+        IMPORT_C TBool IsRemovable() const;
+        
+        /** @return The total size of the component at installation time in bytes. */
+        IMPORT_C TInt64  ComponentSize() const;
+        
+        /** @return The SCOMO state of the software component. @see Usif::TScomoState */
+        IMPORT_C const TScomoState& ScomoState() const;
+        
+        /** @return The set of drives that files for the software component were installed to. */
+        IMPORT_C const TDriveList& InstalledDrives() const;
+        
+        /** @return The version identifier of the software component. */
+        IMPORT_C const TDesC& Version() const;
+        
+        /** @return The install time of the component. */
+        IMPORT_C TTime InstallTimeL() const;
+        
+        /** @return  Whether the component is DRM protected. ETrue means the component is DRM protected.*/
+        IMPORT_C TBool IsDrmProtected() const;
+        
+        /** @return  Whether the component is hidden in the list of installed components. ETrue means the component is hidden. */
+        IMPORT_C TBool IsHidden() const;
+        
+        /** @return  Whether the component has been revoked. ETrue means that a revocation check was performed
+                  during or after the installation and the component was found to be revoked.
+         */
+        IMPORT_C TBool IsKnownRevoked() const;
+        
+        /** @return  Whether the installer has verified the originator of the component. ETrue means the installer 
+                         has verified the originator of the software component by using appropriate checking mechanisms.
+         */
+        IMPORT_C TBool IsOriginVerified()const;
+        
+    private:
+        CComponentEntry();
+        void ConstructL(const TComponentId& aId, const TDesC& aName, const TDesC& aVendor, const TDesC& aSwType, const TDesC& aGlobalId, TBool aRemovable, 
+                        TInt64 aSize, const TScomoState& aScomoState, const TDriveList& aInstalledDrives, const TDesC& aVersion, const TDesC& aInstallTime,
+                        TBool aDrmProtected, TBool aHidden, TBool aKnownRevoked, TBool aOriginVerified);
+    private:
+        TComponentId iComponentId;   ///< The unique id of the software component.
+        HBufC* iName;                ///< Name of the software component.
+        HBufC* iVendor;              ///< Vendor of the software component.
+        HBufC* iSwType;              ///< Software type name of the component.
+        HBufC* iGlobalId;            ///< Globally unique component identifier.
+        TBool iRemovable;            ///< Whether the component is removable.
+        TInt64 iSize;                ///< The total size of the component at installation time in bytes.
+        TScomoState iScomoState;     ///< SCOMO state of the component.
+        TDriveList iInstalledDrives; ///< The set of drives that files for the software component were installed to.
+        HBufC* iVersion;             ///< Version identifier of the software component
+        HBufC* iInstallTime;         ///< The install time of the component. 
+        TBool iDrmProtected;         ///< Whether the component is DRM protected.
+        TBool iHidden;               ///< Whether the component is hidden in the list of installed components.
+        TBool iKnownRevoked;         ///< Whether the component has been revoked.
+        TBool iOriginVerified;       ///< Whether the installer has verified the originator of the component.
+        };
+        
+    class CPropertyEntry : public CBase
+    /**
+        Abstract base class for a software component property entry. 
+        Specifies the type of a software component property. Before getting a property value, 
+        the base property object must be converted to a derived property object (e.g. CIntPropertyEntry). 
+     */
+        {
+    public:
+    /** 
+        Enumeration to indicate the type of the property.
+     */
+    enum TPropertyType
+        {
+        EBinaryProperty = 1,    ///< The property value is binary data. See @see CBinaryPropertyEntry.
+        EIntProperty,       ///< The property value is integer. See @see CIntPropertyEntry.
+        ELocalizedProperty,  ///< The property is a localizable string. See @see CLocalizablePropertyEntry.
+        };  
+    
+    public:
+        /**
+            Creates a base software component property object from a stream.
+            @param aStream The stream to read the software property object from.
+            @return A pointer to the newly allocated software property object, if creation is successful.
+            @internalComponent
+         */
+        IMPORT_C static CPropertyEntry* NewL(RReadStream& aStream);
+        
+        /** @return The name of the property. */
+        IMPORT_C const TDesC& PropertyName() const;
+        
+        /** Virtual destructor for the component property object*/
+        IMPORT_C virtual ~CPropertyEntry();
+        
+        /**
+            Externalises a base/derived property object to a write stream.
+            @param aStream The stream to which the object is externalised.
+            @internalComponent
+        */
+        IMPORT_C void ExternalizeL(RWriteStream& aStream) const;         
+        
+        /** @return The type of the property object. Implemented by derived classes. */
+        virtual CPropertyEntry::TPropertyType PropertyType() const = 0;
+        
+    protected:
+        CPropertyEntry();
+        void ConstructL(const TDesC& aPropertyName);
+    
+    private:
+        virtual void DoExternalizeL(RWriteStream &aStream) const = 0;
+        virtual void DoInternalizeL(RReadStream& aStream) = 0;
+        
+    private:    
+        HBufC* iPropertyName;         ///< The name of the property entry.
+        };
+    
+    class CIntPropertyEntry : public CPropertyEntry
+    /**
+        Class that represents an integer component property. 
+     */
+        {
+    public:
+        /**
+            Creates an integer component property object.
+            
+            @param aPropertyName The name of the property.
+            @param aPropertyValue The value of the property.
+            @return A pointer to the newly allocated component property object, if creation is successful.
+         */
+        IMPORT_C static CIntPropertyEntry* NewL(const TDesC& aPropertyName, TInt64 aPropertyValue);
+        
+        /**
+            Creates an integer component property object.
+            
+            @param aPropertyName The name of the property.
+            @param aPropertyValue The value of the property.
+            @return A pointer to the newly allocated component property object, if creation is successful.
+                    The pointer is also put onto the cleanup stack.
+         */
+        IMPORT_C static CIntPropertyEntry* NewLC(const TDesC& aPropertyName, TInt64 aPropertyValue);
+        
+        IMPORT_C ~CIntPropertyEntry();
+        
+        /**
+            The implementation of pure virtual function from @see Usif::CPropertyEntry.
+            @return The type of the property object.
+         */
+        IMPORT_C CPropertyEntry::TPropertyType PropertyType() const;
+        
+        /** @return The 32-bit integer value. */ 
+        IMPORT_C TInt IntValue();
+        
+        /** @return The 64-bit integer value. */ 
+        IMPORT_C TInt64 Int64Value();
+        
+    private:
+        void DoExternalizeL(RWriteStream& aStream) const;
+        void DoInternalizeL(RReadStream& aStream);
+        
+        CIntPropertyEntry();
+        CIntPropertyEntry(TInt64 aPropertyIntValue);
+        void ConstructL(const TDesC& aPropertyName);
+        static CIntPropertyEntry* NewLC();
+        friend CPropertyEntry* CPropertyEntry::NewL(RReadStream& aStream);
+        
+    private:
+        TInt64 iIntValue;   ///< The integer property value.
+        };
+    
+    class CBinaryPropertyEntry : public CPropertyEntry
+    /**
+        Class that represents a binary non-localizable 8-bit descriptor component property.     
+    */
+        {
+    public:
+        /**
+            Creates a binary component property object.
+                
+            @param aPropertyName The name of the property.
+            @param aPropertyValue The value of the property.
+            @return A pointer to the newly allocated component property object, if creation is successful.
+         */
+        IMPORT_C static CBinaryPropertyEntry* NewL(const TDesC& aPropertyName, const TDesC8& aPropertyValue);
+        
+        /**
+            Creates a binary component property object.
+                        
+            @param aPropertyName The name of the property.
+            @param aPropertyValue The value of the property.
+            @return A pointer to the newly allocated component property object, if creation is successful.
+                    The pointer is also put onto the cleanup stack.
+         */
+        IMPORT_C static CBinaryPropertyEntry* NewLC(const TDesC& aPropertyName, const TDesC8& aPropertyValue);
+        
+        IMPORT_C ~CBinaryPropertyEntry(); 
+        
+        /**
+            The implementation of pure virtual function from @see Usif::CPropertyEntry.
+            @return The type of the property object.
+         */
+        IMPORT_C TPropertyType PropertyType() const;
+        
+        /** @return The binary property value. */ 
+        IMPORT_C const TDesC8& BinaryValue();
+    
+    private:
+        CBinaryPropertyEntry();
+        void ConstructL(const TDesC& aPropertyName, const TDesC8& aPropertyValue);
+        void DoExternalizeL(RWriteStream& aStream) const;
+        void DoInternalizeL(RReadStream& aStream);
+    
+        static CBinaryPropertyEntry* NewLC();
+        friend CPropertyEntry* CPropertyEntry::NewL(RReadStream& aStream);
+        
+    private:
+        HBufC8* iValue; ///< The value of the binary property.
+        };
+    
+    NONSHARABLE_CLASS(CLocalizablePropertyEntry) : public CPropertyEntry
+    /**
+        Class that represents a localizable string component property.
+        
+        A localized component property is a string property which can have different values 
+        for different locales. A particular instance of a localized component property includes 
+        both the localized string value and the locale in question.
+     */
+        {
+    public:
+        /**
+            Creates a localizable component property object.
+                    
+            @param aPropertyName The name of the property.
+            @param aPropertyValue The value of the property.
+            @param aLocale The locale of the property.
+            @return A pointer to the newly allocated component property object, if creation is successful.
+         */
+        IMPORT_C static CLocalizablePropertyEntry* NewL(const TDesC& aPropertyName, const TDesC& aPropertyValue, TLanguage aLocale);
+        
+        /**
+            Creates a localizable component property object.
+                            
+            @param aPropertyName The name of the property.
+            @param aPropertyValue The value of the property.
+            @param aLocale The locale of the property.
+            @return A pointer to the newly allocated component property object, if creation is successful.
+                    The pointer is also put onto the cleanup stack.
+         */
+        IMPORT_C static CLocalizablePropertyEntry* NewLC( const TDesC& aPropertyName, const TDesC& aPropertyValue, TLanguage aLocale);
+        
+        IMPORT_C ~CLocalizablePropertyEntry();
+        
+        /** The locale of the localizable property object. */
+        IMPORT_C TLanguage LocaleL() const;
+        
+        /**
+            The implementation of pure virtual function from @see Usif::CPropertyEntry.
+            @return The type of the property object.
+         */
+        IMPORT_C TPropertyType PropertyType() const;
+        
+        /** @return The string property value. */
+        IMPORT_C const TDesC& StrValue() const;     
+        
+    private:
+        CLocalizablePropertyEntry();
+        CLocalizablePropertyEntry(TLanguage aLocale);
+        void DoExternalizeL(RWriteStream &aStream) const;
+        void DoInternalizeL(RReadStream& aStream);
+        static CLocalizablePropertyEntry* NewLC();
+        friend CPropertyEntry* CPropertyEntry::NewL(RReadStream& aStream);
+        void ConstructL(const TDesC& aPropertyName, const TDesC& aPropertyValue);
+        
+    private:
+        TLanguage iLocale; ///< The language code of the locale.
+        HBufC* iStrValue; ///< The string value of the property
+        };
+    
+    NONSHARABLE_CLASS(CComponentFilter) : public CBase
+    /**
+        A filter class which is used to filter the software components stored in the SCR.
+        An empty filter object is first created and then required filter keys are set separately.
+     */
+        {
+        friend class CScrRequestImpl;
+    public:
+        
+        enum TDbOperator
+            {
+            EEqual = 1,
+            ELike
+            };
+        
+        /**
+            Creates an empty component filter object.
+            @return A pointer to the newly allocated component filter object, if creation is successful.
+         */
+        IMPORT_C static CComponentFilter* NewL();
+        
+        /**
+            Creates an empty component filter object.
+            @return A pointer to the newly allocated component filter object, if creation is successful.
+                    The pointer is also put onto the cleanup stack.
+         */
+        IMPORT_C static CComponentFilter* NewLC();
+        
+        /**
+            Creates a component filter object from a stream.
+            @param aStream The stream to read the component filter object from
+            @return A pointer to the newly allocated component filter object, if creation is successful.
+            @internalComponent
+         */
+        IMPORT_C static CComponentFilter* NewL(RReadStream& aStream);
+        
+        ~CComponentFilter();
+        
+        /**
+            Restricts the returned component names in the filter.
+            Please note that wildcards are not supported and matching is case-sensitive.
+            @param aName The name of the software component.
+         */
+        IMPORT_C void SetNameL(const TDesC& aName);
+        
+        /**
+            Restricts the returned component vendor names in the filter.
+            Please note that wildcards are not supported and matching is case-sensitive.
+            @param aVendor The vendor name of the software component.
+         */
+        IMPORT_C void SetVendorL(const TDesC& aVendor);
+        
+        /**
+            Restricts the returned component software types in the filter.
+            @param aSwType The software type name of the software component (e.g. @see Usif::KSoftwareTypeNative and @see Usif::KSoftwareTypeJava). 
+        */
+        IMPORT_C void SetSoftwareTypeL(const TDesC& aSwType);
+        
+        /**
+            Sets whether the software component which is being searched for is removable.
+            @param aValue ETrue, if the software component is removable. Otherwise, EFalse.
+         */
+        IMPORT_C void SetRemovable(TBool aValue);
+        
+        /**
+            Sets whether the software component which is being searched for is DRM protected.
+            @param aValue ETrue, if the software component is DRM protected. Otherwise, EFalse.
+         */
+        IMPORT_C void SetDrmProtected(TBool aValue);
+        
+        /**
+            Sets whether the software component which is being searched for is hidden.
+            @param aValue ETrue, if the software component is hidden. Otherwise, EFalse.
+         */
+        IMPORT_C void SetHidden(TBool aValue);
+        
+        /**
+            Sets whether the software component which is being searched for is known-revoked.
+            @param aValue ETrue, if the software component is known-revoked. Otherwise, EFalse.
+         */
+        IMPORT_C void SetKnownRevoked(TBool aValue);
+        
+        /**
+            Sets whether the software component which is being searched for is origin-verified.
+            @param aValue ETrue, if the software component is origin-verified. Otherwise, EFalse.
+         */
+        IMPORT_C void SetOriginVerified(TBool aValue);
+        
+        /**
+            Restricts the returned component SCOMO states in the filter.
+            See @see Usif::TScomoState for the list of SCOMO states.
+            @param aScomoState The SCOMO state of the software component.
+         */
+        IMPORT_C void SetScomoStateL(TScomoState aScomoState);
+        
+        /**
+            Sets the set of drives that files of the software components were installed to.
+            If more than one drive is supplied, all software components which files were installed to
+            any of these drives are returned.
+         */
+        IMPORT_C void SetInstalledDrivesL(const TDriveList& aDrives);
+        
+        /**
+            Adds a localizable property to the filter. Only the software components having 
+            this property with the specified value are returned by the filter. It is possible to 
+            add more than one property. In this case, the software components possessing all provided 
+            properties with the specified values are returned by the filter.
+            
+            For more information about searching for current locale variant of properties look at 
+            @see RSoftwareComponentRegistry::GetComponentPropertyL.
+            
+            If the locale is provided, the component will be returned only if the property exists 
+            for the specified locale. If the locale is not provided, or is equal to KUnspecifiedLocale,
+            then all software components which have the property with the specified value for any locale will
+            match this condition.
+            
+            @param aName The name of the property. Please note that matching is case-insensitive.
+            @param aValue The value of the property.    
+            @param aLocale Optional. The language code of the property value.
+            @param aNameOperator The comparison operator (TDbOperator type) to be associated with the name.
+            @param aValueOperator The comparison operator (TDbOperator type) to be associated with the value.          
+                    
+         */
+        IMPORT_C void AddPropertyL(const TDesC& aName, const TDesC& aValue, TLanguage aLocale=KUnspecifiedLocale, 
+                TDbOperator aNameOperator = EEqual, TDbOperator aValueOperator = EEqual);
+        
+        /**
+            Adds an integer property to the filter. The software components having this
+            property with the specified value are enumerated. It is possible to add more than one property. 
+            In this case, the software components possessing all provided properties with the specified 
+            values are enumerated.
+            
+            @param aName The name of the property. Please note that matching is case-insensitive.
+            @param aValue The value of the property.
+            @param aNameOperator The comparison operator (TDbOperator type) to be associated with the name.
+            @param aValueOperator The comparison operator (TDbOperator type) to be associated with the value.          
+            
+         */
+        IMPORT_C void AddPropertyL(const TDesC& aName, TInt64 aValue, TDbOperator aNameOperator = EEqual, 
+                TDbOperator aValueOperator = EEqual);
+        
+        /**
+            Adds a binary 8-bit descriptor property to the filter. The software components having this
+            property with the specified value are enumerated. It is possible to add more than one property. 
+            In this case, the software components possessing all provided properties with the specified 
+            values are enumerated.
+            
+            @param aName The name of the property. Please note that matching is case-insensitive.
+            @param aValue The value of the property.
+            @param aNameOperator The comparison operator (TDbOperator type) to be associated with the name.
+            @param aValueOperator The comparison operator (TDbOperator type) to be associated with the value.          
+            
+         */
+        IMPORT_C void AddPropertyL(const TDesC& aName, const TDesC8& aValue, TDbOperator aNameOperator = EEqual, 
+                TDbOperator aValueOperator = EEqual);       
+        
+        /**
+            Sets a file name to filter the software components having registered this file.
+            Please note that wildcards are not supported and matching is case-insensitive.
+            
+            N.B. This call can be invoked multiple times for the same filter in order to request components which register a particular set of files.
+            @param aFile The fully qualified file path.
+         */
+        IMPORT_C void SetFileL(const TDesC& aFile);
+        
+        /**
+            Externalises a component filter object to a write stream.
+            @param aStream The stream to which the object is externalised.
+            @internalComponent
+        */
+        IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+        
+    private:
+        CComponentFilter();
+        void ConstructL();
+        void InternalizeL(RReadStream& aStream);
+        
+        enum TFieldsFlag
+            {
+            EName           = 0x0001,
+            EVendor         = 0x0002,
+            ESoftwareType   = 0x0004,
+            ERemovable      = 0x0008,
+            EScomoState     = 0x0010,
+            EInstalledDrive = 0x0020,
+            EProperty       = 0x0040,
+            EFile           = 0x0080,
+            EDrmProtected   = 0x0100,
+            EHidden         = 0x0200,
+            EKnownRevoked   = 0x0400,
+            EOriginVerified = 0x0800
+            };
+        
+        class TPropertyOperator
+            {
+        public:
+            IMPORT_C TPropertyOperator(TDbOperator aNameOperator = EEqual, TDbOperator aValueOperator = EEqual);
+            void ExternalizeL(RWriteStream& aStream) const;
+            IMPORT_C void InternalizeL(RReadStream& aStream);  
+            IMPORT_C TDbOperator NameOperator() const;
+            IMPORT_C TDbOperator ValueOperator() const;
+        
+        private:
+            TDbOperator iNameOperator;
+            TDbOperator iValueOperator;
+            };
+        
+    private:
+        TUint16 iSetFlag;            ///< Flag variable that shows what fields have been set
+        HBufC* iName;                ///< Name for the software component
+        HBufC* iVendor;              ///< Vendor for the software component
+        HBufC* iSwType;              ///< Software type of the component.
+        TBool iRemovable;            ///< Whether the software component is removable
+        TScomoState iScomoState;     ///< SCOMO state for the software component
+        TDriveList iInstalledDrives; ///< Installed drives for the software component
+        RPointerArray<CPropertyEntry> iPropertyList; ///< The list of key properties
+        HBufC* iFile;               ///< The full name of the file owned by the component
+        TBool iDrmProtected;         ///< Whether the component is DRM protected.
+        TBool iHidden;               ///< Whether the component is displayed in the list of installed components.
+        TBool iKnownRevoked;         ///< Whether the component has been revoked.
+        TBool iOriginVerified;       ///< Whether the installer has verified the originator of the component.
+        RArray<TPropertyOperator> iPropertyOperatorList; ///< The list of operators associated with each property. 
+        };
 
-	
-	class CLocalizableCommonData : public CBase
-	/**
-		Base class which provides common functionality for localized information classes (e.g. CLocalizableComponentInfo). 
-		Please note that this class cannot be instantiated.
-	 */
-		{
-	public:
-		~CLocalizableCommonData();	
-		
-		/** @return The locale of the data. */
-		IMPORT_C TLanguage Locale() const;
-		
-	protected:
-		CLocalizableCommonData();
-		CLocalizableCommonData(TLanguage aLocale);
-		
-		void ExternalizeL(RWriteStream& aStream) const;
-		void InternalizeL(RReadStream& aStream);
-		
-	private:
-		TLanguage iLocale; ///< The language code of the locale.
-		};
-		
-	NONSHARABLE_CLASS(CLocalizableComponentInfo) : public CLocalizableCommonData
-	/**
-		This class contains the localizable information of a software component.
-		Component names and vendor names are localizable names and transferred to the SCR 
-		with the objects of this class.
-	 */
-		{
-	public:
-		/**
-			Creates a localizable component information object.
-			@param aName The name of the component.
-			@param aVendor The vendor of the component.
-			@param aLocale The language code of the object's locale.
-			@return A pointer to the newly allocated localizable component info object, if creation is successful.
-		 */
-		IMPORT_C static CLocalizableComponentInfo* NewL(const TDesC& aName, const TDesC& aVendor, TLanguage aLocale);
-		
-		/**
-			Creates a localizable component information object.
-			@param aName The name of the component.
-			@param aVendor The vendor of the component.
-			@param aLocale The language code of the object's locale.
-			@return A pointer to the newly allocated component information object, if creation is successful.
-					The pointer is also put onto the cleanup stack.
-		 */
-		IMPORT_C static CLocalizableComponentInfo* NewLC(const TDesC& aName, const TDesC& aVendor, TLanguage aLocale);
-		
-		/**
-			Creates a localizable component information from a stream.
-			@param aStream The stream to read the component information object from.
-			@return A pointer to the newly allocated component information object, if creation is successful.
-			@internalComponent
-		 */
-		IMPORT_C static CLocalizableComponentInfo* NewL(RReadStream& aStream);
-		
-		~CLocalizableComponentInfo();
-		
-		/**
-			Externalises a localizable component information object to a write stream.
-			@param aStream The stream to which the object is externalised.
-			@internalComponent
-		 */
-		IMPORT_C void ExternalizeL(RWriteStream& aStream) const;	
-		
-		/** @return The localizable name of the component. */
-		IMPORT_C const TDesC& NameL() const;
-		
-		/** @return The localizable vendor name of the component. */
-		IMPORT_C const TDesC& VendorL() const;
-		
-	private:
-		CLocalizableComponentInfo();
-		CLocalizableComponentInfo(TLanguage aLocale);
-		void ConstructL(const TDesC& aName, const TDesC& aVendor);
-		void InternalizeL(RReadStream& aStream);
-		
-	private:
-		HBufC* iName;	   ///< The localizable component name.
-		HBufC* iVendor;    ///< The localizable component vendor name.
-		};
-	
-#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS	
-	NONSHARABLE_CLASS(CLocalizedSoftwareTypeName) : public CLocalizableCommonData
-		/**
-			This class contains localized software type names.
-			Software type names are localizable names and transferred to the SCR 
-			with the objects of this class.
-			
-			@internalTechnology
-		 */
-			{
-		public:	
-			/**
-				Creates a localized software type name object.
-				@param aName The name of the software type.
-				@param aLocale The language code of the object's locale.
-				@return A pointer to the newly allocated localized software type name object, if creation is successful.
-			 */
-			IMPORT_C static CLocalizedSoftwareTypeName* NewL(const TDesC& aName, TLanguage aLocale);
-			
-			/**
-				Creates a localized software type name object.
-				@param aName The name of the software type.
-				@param aLocale The language code of the object's locale.
-				@return A pointer to the newly allocated localized software type name object, if creation is successful.
-						The pointer is also put onto the cleanup stack.
-			 */
-			IMPORT_C static CLocalizedSoftwareTypeName* NewLC(const TDesC& aName, TLanguage aLocale);
-			
-			/**
-				Creates a localized software type name object from a stream.
-				@param aStream The stream to read the localized software type name object from.
-				@return A pointer to the newly allocated localized software type name object, if creation is successful.
-				@internalComponent
-			 */
-			IMPORT_C static CLocalizedSoftwareTypeName* NewL(RReadStream& aStream);
-			
-			~CLocalizedSoftwareTypeName();
-			
-			/**
-				Externalises a localized software type name object to a write stream.
-				@param aStream The stream to which the object is externalised.
-				@internalComponent
-			 */
-			IMPORT_C void ExternalizeL(RWriteStream& aStream) const;	
-			
-			/** @return The localized software type name. */
-			IMPORT_C const TDesC& NameL() const;
-			
-		private:
-			CLocalizedSoftwareTypeName();
-			CLocalizedSoftwareTypeName(TLanguage aLocale);
-			void ConstructL(const TDesC& aName);
-			void InternalizeL(RReadStream& aStream);
-			
-		private:
-			HBufC* iName;	   ///< The localized software type name.
-			};
-#endif //SYMBIAN_ENABLE_SPLIT_HEADERS	
-	
-	enum TScrComponentOperationType
-	/**
-		The type of the operation being performed on an SCR component. 
-	 */
-		{
-		EScrCompInstall =0,		///< A new SCR component is added.
-		EScrCompUnInstall,		///< A existing SCR component is removed.
-		EScrCompUpgrade,		///< An existing SCR component is updated.
-		EScrCompHidden			///< The component operation is hidden to the user. N.B. SCR doesn't save logs for this type of operation.
-		};
-	
-#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS	
-	NONSHARABLE_CLASS (CScrLogEntry) : public CBase
-	/**
-		Class that represents a software component log record generated by the SCR.
-	 */ 
-		{
-		friend class CScrRequestImpl;
-	public:
-		/**
-			Creates a log entry object.
-			@param aComponentName The name of the component.
-			@param aUniqueSwTypeName The non-localized, unique software type name, such as @see Usif::KSoftwareTypeNative and @see Usif::KSoftwareTypeJava.
-			@param aGlobalId The global Id of the component.
-			@param aVersion The version of the component.
-			@param aCompOpType The type of the component operation. @see Usif::TScrComponentOperationType
-			@return A pointer to the newly allocated log entry object, if creation is successful.
-			@internalComponent
-		 */
-		IMPORT_C static CScrLogEntry* NewL(const TDesC& aComponentName, const TDesC& aUniqueSwTypeName, const TDesC& aGlobalId, const TDesC& aVersion, const TScrComponentOperationType aCompOpType);
-		
-		/**
-			Creates a log entry object.
-			@param aComponentName The name of the component.
-			@param aUniqueSwTypeName The non-localized, unique software type name, such as @see Usif::KSoftwareTypeNative and @see Usif::KSoftwareTypeJava.
-			@param aGlobalId The global Id of the component.
-			@param aVersion The version of the component.
-			@param aCompOpType The type of the component operation. @see Usif::TScrComponentOperationType
-			@return A pointer to the newly allocated log entry object, if creation is successful.
-					The pointer is also put onto the cleanup stack.
-			@internalComponent		
-		 */
-		IMPORT_C static CScrLogEntry* NewLC(const TDesC& aComponentName, const TDesC& aUniqueSwTypeName, const TDesC& aGlobalId, const TDesC& aVersion, const TScrComponentOperationType aCompOpType);
+    
+    class CLocalizableCommonData : public CBase
+    /**
+        Base class which provides common functionality for localized information classes (e.g. CLocalizableComponentInfo). 
+        Please note that this class cannot be instantiated.
+     */
+        {
+    public:
+        ~CLocalizableCommonData();  
+        
+        /** @return The locale of the data. */
+        IMPORT_C TLanguage Locale() const;
+        
+    protected:
+        CLocalizableCommonData();
+        CLocalizableCommonData(TLanguage aLocale);
+        
+        void ExternalizeL(RWriteStream& aStream) const;
+        void InternalizeL(RReadStream& aStream);
+        
+    private:
+        TLanguage iLocale; ///< The language code of the locale.
+        };
+        
+    NONSHARABLE_CLASS(CLocalizableComponentInfo) : public CLocalizableCommonData
+    /**
+        This class contains the localizable information of a software component.
+        Component names and vendor names are localizable names and transferred to the SCR 
+        with the objects of this class.
+     */
+        {
+    public:
+        /**
+            Creates a localizable component information object.
+            @param aName The name of the component.
+            @param aVendor The vendor of the component.
+            @param aLocale The language code of the object's locale.
+            @return A pointer to the newly allocated localizable component info object, if creation is successful.
+         */
+        IMPORT_C static CLocalizableComponentInfo* NewL(const TDesC& aName, const TDesC& aVendor, TLanguage aLocale);
+        
+        /**
+            Creates a localizable component information object.
+            @param aName The name of the component.
+            @param aVendor The vendor of the component.
+            @param aLocale The language code of the object's locale.
+            @return A pointer to the newly allocated component information object, if creation is successful.
+                    The pointer is also put onto the cleanup stack.
+         */
+        IMPORT_C static CLocalizableComponentInfo* NewLC(const TDesC& aName, const TDesC& aVendor, TLanguage aLocale);
+        
+        /**
+            Creates a localizable component information from a stream.
+            @param aStream The stream to read the component information object from.
+            @return A pointer to the newly allocated component information object, if creation is successful.
+            @internalComponent
+         */
+        IMPORT_C static CLocalizableComponentInfo* NewL(RReadStream& aStream);
+        
+        ~CLocalizableComponentInfo();
+        
+        /**
+            Externalises a localizable component information object to a write stream.
+            @param aStream The stream to which the object is externalised.
+            @internalComponent
+         */
+        IMPORT_C void ExternalizeL(RWriteStream& aStream) const;    
+        
+        /** @return The localizable name of the component. */
+        IMPORT_C const TDesC& NameL() const;
+        
+        /** @return The localizable vendor name of the component. */
+        IMPORT_C const TDesC& VendorL() const;
+        
+    private:
+        CLocalizableComponentInfo();
+        CLocalizableComponentInfo(TLanguage aLocale);
+        void ConstructL(const TDesC& aName, const TDesC& aVendor);
+        void InternalizeL(RReadStream& aStream);
+        
+    private:
+        HBufC* iName;      ///< The localizable component name.
+        HBufC* iVendor;    ///< The localizable component vendor name.
+        };
+    
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS    
+    NONSHARABLE_CLASS(CLocalizedSoftwareTypeName) : public CLocalizableCommonData
+        /**
+            This class contains localized software type names.
+            Software type names are localizable names and transferred to the SCR 
+            with the objects of this class.
+            
+            @internalTechnology
+         */
+            {
+        public: 
+            /**
+                Creates a localized software type name object.
+                @param aName The name of the software type.
+                @param aLocale The language code of the object's locale.
+                @return A pointer to the newly allocated localized software type name object, if creation is successful.
+             */
+            IMPORT_C static CLocalizedSoftwareTypeName* NewL(const TDesC& aName, TLanguage aLocale);
+            
+            /**
+                Creates a localized software type name object.
+                @param aName The name of the software type.
+                @param aLocale The language code of the object's locale.
+                @return A pointer to the newly allocated localized software type name object, if creation is successful.
+                        The pointer is also put onto the cleanup stack.
+             */
+            IMPORT_C static CLocalizedSoftwareTypeName* NewLC(const TDesC& aName, TLanguage aLocale);
+            
+            /**
+                Creates a localized software type name object from a stream.
+                @param aStream The stream to read the localized software type name object from.
+                @return A pointer to the newly allocated localized software type name object, if creation is successful.
+                @internalComponent
+             */
+            IMPORT_C static CLocalizedSoftwareTypeName* NewL(RReadStream& aStream);
+            
+            ~CLocalizedSoftwareTypeName();
+            
+            /**
+                Externalises a localized software type name object to a write stream.
+                @param aStream The stream to which the object is externalised.
+                @internalComponent
+             */
+            IMPORT_C void ExternalizeL(RWriteStream& aStream) const;    
+            
+            /** @return The localized software type name. */
+            IMPORT_C const TDesC& NameL() const;
+            
+        private:
+            CLocalizedSoftwareTypeName();
+            CLocalizedSoftwareTypeName(TLanguage aLocale);
+            void ConstructL(const TDesC& aName);
+            void InternalizeL(RReadStream& aStream);
+            
+        private:
+            HBufC* iName;      ///< The localized software type name.
+            };
+#endif //SYMBIAN_ENABLE_SPLIT_HEADERS   
+    
+    enum TScrComponentOperationType
+    /**
+        The type of the operation being performed on an SCR component. 
+     */
+        {
+        EScrCompInstall =0,     ///< A new SCR component is added.
+        EScrCompUnInstall,      ///< A existing SCR component is removed.
+        EScrCompUpgrade,        ///< An existing SCR component is updated.
+        EScrCompHidden          ///< The component operation is hidden to the user. N.B. SCR doesn't save logs for this type of operation.
+        };
+    
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS    
+    NONSHARABLE_CLASS (CScrLogEntry) : public CBase
+    /**
+        Class that represents a software component log record generated by the SCR.
+     */ 
+        {
+        friend class CScrRequestImpl;
+    public:
+        /**
+            Creates a log entry object.
+            @param aComponentName The name of the component.
+            @param aUniqueSwTypeName The non-localized, unique software type name, such as @see Usif::KSoftwareTypeNative and @see Usif::KSoftwareTypeJava.
+            @param aGlobalId The global Id of the component.
+            @param aVersion The version of the component.
+            @param aCompOpType The type of the component operation. @see Usif::TScrComponentOperationType
+            @return A pointer to the newly allocated log entry object, if creation is successful.
+            @internalComponent
+         */
+        IMPORT_C static CScrLogEntry* NewL(const TDesC& aComponentName, const TDesC& aUniqueSwTypeName, const TDesC& aGlobalId, const TDesC& aVersion, const TScrComponentOperationType aCompOpType);
+        
+        /**
+            Creates a log entry object.
+            @param aComponentName The name of the component.
+            @param aUniqueSwTypeName The non-localized, unique software type name, such as @see Usif::KSoftwareTypeNative and @see Usif::KSoftwareTypeJava.
+            @param aGlobalId The global Id of the component.
+            @param aVersion The version of the component.
+            @param aCompOpType The type of the component operation. @see Usif::TScrComponentOperationType
+            @return A pointer to the newly allocated log entry object, if creation is successful.
+                    The pointer is also put onto the cleanup stack.
+            @internalComponent      
+         */
+        IMPORT_C static CScrLogEntry* NewLC(const TDesC& aComponentName, const TDesC& aUniqueSwTypeName, const TDesC& aGlobalId, const TDesC& aVersion, const TScrComponentOperationType aCompOpType);
 
-	 	/**
-	 		Creates a log entry object from a stream.
-	 		@param aStream The stream to read the log entry object from.
-	 		@return A pointer to the newly allocated log entry object, if creation is successful.
-	 				The pointer is also put onto the cleanup stack.
-	 		@internalComponent
-	 	*/
-		IMPORT_C static CScrLogEntry* NewLC(RReadStream& aStream);
-		
-		~CScrLogEntry();
-		
-	 	/**
-		 	Write the object to a stream 
-		 
-		 	@param aStream The stream to write to
-		 	@internalComponent
-		 */
-		IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
-		 
-		/**
-		 	Read the object from a stream
-		 
-		 	@param aStream The stream to read from.
-		 	@internalComponent
-		 */
-		IMPORT_C void InternalizeL(RReadStream& aStream) ;
-	    
-	    /**
-			@return The name of the component for which the log was generated.
-		 */
-		IMPORT_C const TDesC& ComponentName() const; 
-		
-		/**
-			@return The non-localized, unique software type name, such as @see Usif::KSoftwareTypeNative and @see Usif::KSoftwareTypeJava.
-		 */
-		IMPORT_C const TDesC& SoftwareTypeName() const;
-		
-		/**
-			The UID.
-		 	@return The global ID of the component.
-		 */
-		IMPORT_C const TDesC& GlobalId() const; 
-				
-		/**
-			@return The version of the component.
-		 */
-		IMPORT_C const TDesC& ComponentVersion() const; 
-	    
-		/**
-			@return The time when the operation occured.
-		 */
-		IMPORT_C const TTime OperationTime() const; 
-			    
-	    /**
-		    @return The type of the component operation for the log record.
-		 */
-		IMPORT_C TScrComponentOperationType OperationType() const;
-		
-		/**
-			@return The component id of the log record.
-			@internalComponent
-		 */
-		IMPORT_C TComponentId ComponentId() const;
-	
-	private:
-		CScrLogEntry();
-		void ConstructL(const TDesC& aComponentName, const TDesC& aUniqueSwTypeName, const TDesC& aGlobalId, const TDesC& aVersion, const TScrComponentOperationType aCompOpType);
-		
-	private:	
-	    HBufC* iComponentName ;
-	    HBufC* iSwTypeName;
-		HBufC* iVersion;
-		TScrComponentOperationType iOpType ; 
-		TTime  iRecordTime ;   
-		HBufC* iGlobalId;
-		TComponentId iComponentId; 
-		};
-	
-#endif //SYMBIAN_ENABLE_SPLIT_HEADERS	
+        /**
+            Creates a log entry object from a stream.
+            @param aStream The stream to read the log entry object from.
+            @return A pointer to the newly allocated log entry object, if creation is successful.
+                    The pointer is also put onto the cleanup stack.
+            @internalComponent
+        */
+        IMPORT_C static CScrLogEntry* NewLC(RReadStream& aStream);
+        
+        ~CScrLogEntry();
+        
+        /**
+            Write the object to a stream 
+         
+            @param aStream The stream to write to
+            @internalComponent
+         */
+        IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+         
+        /**
+            Read the object from a stream
+         
+            @param aStream The stream to read from.
+            @internalComponent
+         */
+        IMPORT_C void InternalizeL(RReadStream& aStream) ;
+        
+        /**
+            @return The name of the component for which the log was generated.
+         */
+        IMPORT_C const TDesC& ComponentName() const; 
+        
+        /**
+            @return The non-localized, unique software type name, such as @see Usif::KSoftwareTypeNative and @see Usif::KSoftwareTypeJava.
+         */
+        IMPORT_C const TDesC& SoftwareTypeName() const;
+        
+        /**
+            The UID.
+            @return The global ID of the component.
+         */
+        IMPORT_C const TDesC& GlobalId() const; 
+                
+        /**
+            @return The version of the component.
+         */
+        IMPORT_C const TDesC& ComponentVersion() const; 
+        
+        /**
+            @return The time when the operation occured.
+         */
+        IMPORT_C const TTime OperationTime() const; 
+                
+        /**
+            @return The type of the component operation for the log record.
+         */
+        IMPORT_C TScrComponentOperationType OperationType() const;
+        
+        /**
+            @return The component id of the log record.
+            @internalComponent
+         */
+        IMPORT_C TComponentId ComponentId() const;
+    
+    private:
+        CScrLogEntry();
+        void ConstructL(const TDesC& aComponentName, const TDesC& aUniqueSwTypeName, const TDesC& aGlobalId, const TDesC& aVersion, const TScrComponentOperationType aCompOpType);
+        
+    private:    
+        HBufC* iComponentName ;
+        HBufC* iSwTypeName;
+        HBufC* iVersion;
+        TScrComponentOperationType iOpType ; 
+        TTime  iRecordTime ;   
+        HBufC* iGlobalId;
+        TComponentId iComponentId; 
+        };
+    
+#endif //SYMBIAN_ENABLE_SPLIT_HEADERS   
 
-	} // End of namespace Usif
+    } // End of namespace Usif
 
 #endif // SCRENTRIES_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/inc/screntries_platform.h	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,153 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: 
+* Declares entry classes for Software Components Registry interface.
+*
+*/
+
+
+/**
+ @file
+ @publishedPartner
+ @released
+*/
+
+#ifndef SCRENTRIES_PARTNER_H
+#define SCRENTRIES_PARTNER_H
+
+#include <e32base.h>
+#include <s32strm.h>
+#include <f32file.h> 
+#include <usif/usifcommon.h>
+#include <usif/scr/screntries.h>
+#include <ct/rcpointerarray.h>
+
+namespace Usif
+	{
+    class CLocalizedSoftwareTypeName;
+
+    enum TAccessMode
+        {
+        ETransactionalSid   = 0x0001,    // Sids requiring component/application transactional support, usually Installers/Execution layers
+        EMaxAccessMode      = 0xFFFF
+        };
+    
+	NONSHARABLE_CLASS (TCustomAccessInfo)
+		{
+	public:
+	    IMPORT_C TSecureId SecureId() const;
+	    IMPORT_C TAccessMode AccessMode() const;
+	    IMPORT_C TCustomAccessInfo(TSecureId aSecureId, TAccessMode aAccessMode);
+			    
+	private:
+	    TAccessMode iAccessMode;
+	    TSecureId iSecureId;
+		};
+		
+	NONSHARABLE_CLASS (CSoftwareTypeRegInfo) : public CBase
+		{
+	public:
+		IMPORT_C static CSoftwareTypeRegInfo* NewL(const TDesC& aUniqueSoftwareTypeName);
+		IMPORT_C static CSoftwareTypeRegInfo* NewL(RReadStream& aStream);
+
+		IMPORT_C virtual ~CSoftwareTypeRegInfo();
+		
+		IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+
+		inline void SetSifPluginUid(TUid aUid);
+		inline void SetCustomAccessL(TCustomAccessInfo aCustomAccessListInfo);
+		inline void SetCustomAccessL(TSecureId aSecureId, TAccessMode aAccessMode);
+		IMPORT_C void SetMimeTypeL(const TDesC& aMimeType);
+		IMPORT_C void SetLocalizedSoftwareTypeNameL(TLanguage aLanguage, const TDesC& aName);
+		IMPORT_C void SetLauncherExecutableL(const TDesC& aLauncherExecutable);
+
+		inline const TDesC& UniqueSoftwareTypeName() const;
+		inline TUid SifPluginUid() const;
+		inline RArray<TCustomAccessInfo> CustomAccessList() const;
+		
+		inline const RPointerArray<HBufC>& MimeTypes() const;
+		inline const RPointerArray<CLocalizedSoftwareTypeName>& LocalizedSoftwareTypeNames() const;
+		inline const TDesC& LauncherExecutable() const;
+
+	private:
+		CSoftwareTypeRegInfo();
+		void InternalizeL(RReadStream& aStream);
+
+		enum { EUniqueSwTypeNameMaxLength = 64,
+               ELauncherExecutableMaxLength = 512}; 
+
+		HBufC* iUniqueSoftwareTypeName;
+		TUid iSifPluginUid;
+		RArray<TCustomAccessInfo> iCustomAccessList;
+		RCPointerArray<HBufC> iMimeTypes;
+		RCPointerArray<CLocalizedSoftwareTypeName> iLocalizedSoftwareTypeNames;
+		HBufC* iLauncherExecutable;
+		};
+
+	inline void CSoftwareTypeRegInfo::SetSifPluginUid(TUid aUid)
+	    {
+	    iSifPluginUid = aUid;
+	    }
+
+	inline void CSoftwareTypeRegInfo::SetCustomAccessL(TCustomAccessInfo aCustomAccessList)
+	    {
+	    iCustomAccessList.AppendL(aCustomAccessList);
+	    }
+
+    inline void CSoftwareTypeRegInfo::SetCustomAccessL(TSecureId aSecureId, TAccessMode aAccessMode)
+        {
+        iCustomAccessList.AppendL(TCustomAccessInfo(aSecureId, aAccessMode));
+        }
+    
+	inline const TDesC& CSoftwareTypeRegInfo::UniqueSoftwareTypeName() const
+        {
+	    if (iUniqueSoftwareTypeName == NULL)
+	        {
+	        return KNullDesC;
+	        }
+	    return *iUniqueSoftwareTypeName;
+	    }
+
+	inline TUid CSoftwareTypeRegInfo::SifPluginUid() const
+        {
+	    return iSifPluginUid;
+	    }
+
+	inline RArray<TCustomAccessInfo> CSoftwareTypeRegInfo::CustomAccessList() const
+        {
+	    return iCustomAccessList;
+	    }
+	
+	const RPointerArray<HBufC>& CSoftwareTypeRegInfo::MimeTypes() const
+	    {
+	    return iMimeTypes;
+	    }
+
+	inline const RPointerArray<CLocalizedSoftwareTypeName>& CSoftwareTypeRegInfo::LocalizedSoftwareTypeNames() const
+	    {
+	    return iLocalizedSoftwareTypeNames;
+	    }
+	
+	inline const TDesC& CSoftwareTypeRegInfo::LauncherExecutable() const
+	    {
+	    if (iLauncherExecutable == NULL)
+	        {
+	        return KNullDesC;
+	        }
+	    return *iLauncherExecutable;
+	    }
+	    
+	} // End of namespace Usif
+
+#endif // SCRENTRIES_H
--- a/installationservices/swcomponentregistry/inc_private/scrrequestimpl.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swcomponentregistry/inc_private/scrrequestimpl.h	Thu Jul 22 16:35:01 2010 +0100
@@ -32,6 +32,7 @@
 #include "screntries.h"
 #include "appregentries.h"
 #include "appreginfo.h"
+#include <usif/scr/screntries_platform.h>
 
 namespace Usif
 	{
@@ -122,6 +123,7 @@
 		void FlushLogEntriesArrayL();
 		void GetIsComponentOnReadOnlyDriveL(const RMessage2& aMessage) const;
 		void GetIsComponentPresentL(const RMessage2& aMessage) const;
+		TBool IsComponentPresentL(TComponentId aComponentId) const;
 		void SetIsComponentPresentL(const RMessage2& aMessage);
 		
 		// SIF Requests
@@ -277,12 +279,6 @@
 			EFileUnregistered
 			};
 		
-		enum TAccessMode
-            {
-            ETransactionalSid   = 0x0001,    // Sids requiring component/application transactional support, usually Installers/Execution layers
-            EMaxAccessMode      = 0xFFFF
-            };
-		
 		class TRollbackParams
 			{
 		public:
@@ -326,7 +322,8 @@
 		CStatement* CreateStatementObjectWithLocaleL(const TDesC& aStatement, TLanguage aLocale, TInt aValuesNum,...) const;
 		CStatement* CreateStatementObjectWithLocaleNoDowngradeL(const TDesC& aStatement, TLanguage aLocale, TInt aValuesNum,...) const;
 		void BindStatementValuesL(CStatement& aStatement, TLanguage aLanguage, TInt aValuesNum, VA_LIST aList) const;
-		void GetComponentIdsHavingThePropertiesL(RArray<TComponentId>& aComponentIds, RPointerArray<CPropertyEntry> aProperties, TBool aDoIntersect) const;
+		void GetComponentIdsHavingThePropertiesL(RArray<TComponentId>& aComponentIds, RPointerArray<CPropertyEntry>& aProperties, RArray<CComponentFilter::TPropertyOperator>& aPropertyOperatorList, 
+                                                     TBool aDoIntersect) const;
 		CStatement* CreateStatementObjectForComponentLocalizablesLC(const TDesC& aName, const TDesC& aVendor, TUint aSetFlag, TComponentId aComponentId  = 0 ) const;
 		void GetComponentsHavingNameVendorL(RArray<TComponentId>& aComponentIds, const TDesC& aName, const TDesC& aVendor, TUint16 aSetFlag, TBool aDoIntersect) const;
 		CComponentEntry* GetNextComponentEntryL(CStatement& aStmt, CComponentFilter& aFilter, TLanguage aLocale, CCompViewSubsessionContext* aSubsessionContext) const;
@@ -348,7 +345,7 @@
 		void ReadAndSetCommonComponentPropertyL(const RMessage2& aMessage, const TDesC& aPropertyColumn);
 		TBool HasFilesOnDriveL(TDriveUnit aDrive, TComponentId aComponentId);
 		CStatement* OpenFileListStatementL(TComponentId aComponentId) const;
-		TBool IsSoftwareTypeExistingL(TUint32 aSwTypeId, TUint32 aSifPluginUid, TUint32 aInstallerSecureId, TUint32 aExecutionLayerSecureId, const RPointerArray<HBufC>& aMimeTypesArray, const RPointerArray<CLocalizedSoftwareTypeName>& aLocalizedNamesArray);
+		TBool IsSoftwareTypeExistingL(TUint32 aSwTypeId, TUint32 aSifPluginUid, RArray<TCustomAccessInfo>& aSidArray, const RPointerArray<HBufC>& aMimeTypesArray, const RPointerArray<CLocalizedSoftwareTypeName>& aLocalizedNamesArray, const TDesC& aLauncherExecutable);
 		void SubsessionAddLocalizableSoftwareTypeNameL(CStatement& aStmt, CComponentEntry& aEntry, TLanguage aLocale, CCompViewSubsessionContext* aSubsessionContext) const;
 		TBool IsDriveReadOnlyL(TInt driveIndex) const;
 		TBool CheckForMediaPresenceL(TComponentId aComponentId) const;
@@ -358,6 +355,7 @@
 		TBool GetAppUidForServiceIdL(const TInt ServiceId, TUid& aAppUid) const;
 		TBool GetNearestAppLanguageL(TLanguage aRequiredLocale,TUid aAppUid,TLanguage& aFinalAppLocale) const;
 		void GetNearestAppLanguageForOpaqueDataL(TLanguage aRequiredLocale,TUid aAppUid,TUid aServiceUid,TLanguage& aFinalAppLocale) const;
+		void GetOperatorStringL(CComponentFilter::TDbOperator aOperator, HBufC*& aOperatorString) const;
 
 		// DB Version management
 		void InitializeDbVersionL();
--- a/installationservices/swcomponentregistry/source/client/appregentries.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swcomponentregistry/source/client/appregentries.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -356,8 +356,18 @@
     }
 
 void COpaqueData::ConstructL(const TDesC8& aOpaqueData, TLanguage aLanguage)
-    {
-    iOpaqueData = aOpaqueData.AllocL();
+    {  
+	//if the length of opaque data is more than 4k, we will truncate it to 4k.
+    const TInt KMaxOpaqueDataLength = 4096;    
+    if (aOpaqueData.Length() > KMaxOpaqueDataLength)
+        {
+        iOpaqueData = HBufC8::NewL(KMaxOpaqueDataLength);
+        iOpaqueData->Des().Copy(aOpaqueData.Ptr(),KMaxOpaqueDataLength);
+        }
+    else
+        {
+        iOpaqueData = aOpaqueData.AllocL();
+        }
     iLanguage = aLanguage;
     }
 
--- a/installationservices/swcomponentregistry/source/client/scrclient.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swcomponentregistry/source/client/scrclient.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -436,49 +436,22 @@
 	return pluginUid;
 	}
 
-EXPORT_C void RSoftwareComponentRegistry::AddSoftwareTypeL(const TDesC& aUniqueSwTypeName, TUid aSifPluginUid, TSecureId aInstallerSecureId, TSecureId aExecutionLayerSecureId, const RPointerArray<HBufC>& aMimeTypes, const RPointerArray<CLocalizedSoftwareTypeName>* aLocalizedSwTypeNames)
+EXPORT_C void RSoftwareComponentRegistry::AddSoftwareTypeL(const CSoftwareTypeRegInfo& aSwTypeRegInfo)
 	{
-	DEBUG_PRINTF2(_L("Sending add a new software type (%S) request."), &aUniqueSwTypeName);
-	
-	if(!aMimeTypes.Count())
-		{
-		DEBUG_PRINTF(_L("MIME types list cannot be empty!"));
-		User::Leave(KErrArgument);
-		}
-	
-	// Concatenate aSifPluginUid, aInstallerSecureId, and aExecutionLayerSecureId in order to gain spare slots to send other data
-	RBuf8 uidString;
-	uidString.CreateL(3*KUidStringLen); // 3 UIDs will be concatenated
-	uidString.CleanupClosePushL();
-	uidString.AppendNumFixedWidth(aSifPluginUid.iUid, EHex, KUidStringLen);
-	uidString.AppendNumFixedWidth(aInstallerSecureId.iId, EHex, KUidStringLen);
-	uidString.AppendNumFixedWidth(aExecutionLayerSecureId.iId, EHex, KUidStringLen);
-	
-	// Externalize the MIME types of the newly added software type
-	HBufC8* mimeTypesBuf = ExternalizePointersArrayLC(aMimeTypes);
+	if(!aSwTypeRegInfo.MimeTypes().Count())
+	    {
+	    DEBUG_PRINTF(_L("MIME types list cannot be empty!"));
+	    User::Leave(KErrArgument);
+	    }
 	
-	// Externalize the unique and localizable names for the newly added software type
-	const RPointerArray<CLocalizedSoftwareTypeName> *localCopyOfSwTypeNames(0);
-	if(!aLocalizedSwTypeNames)
-		{// if aLocalizedSwTypeNames is not supplied, then create an empty one.
-		localCopyOfSwTypeNames = new(ELeave) RPointerArray<CLocalizedSoftwareTypeName>;
-		CleanupStack::PushL(const_cast<RPointerArray<CLocalizedSoftwareTypeName>* >(localCopyOfSwTypeNames));
-		}
-	else
-		{
-		localCopyOfSwTypeNames = aLocalizedSwTypeNames;
-		}
-	HBufC8* localizedNamesBuf = ExternalizePointersArrayLC(*localCopyOfSwTypeNames);		
-
-	TIpcArgs swTypeArgs(&aUniqueSwTypeName, &uidString, mimeTypesBuf, localizedNamesBuf);
+	RBuf8 buf;
+	buf.CleanupClosePushL();
+	ExternalizeRefObjectL(aSwTypeRegInfo, buf);
+	      
+	TIpcArgs swTypeArgs(&buf);
 	User::LeaveIfError(CallSessionFunction(EAddSoftwareType, swTypeArgs));
-	
-	CleanupStack::PopAndDestroy(localizedNamesBuf);
-	if(!aLocalizedSwTypeNames)
-		{// destroy the localCopyOfSwTypeNames if created locally
-		CleanupStack::PopAndDestroy(const_cast<RPointerArray<CLocalizedSoftwareTypeName>* >(localCopyOfSwTypeNames));
-		}
-	CleanupStack::PopAndDestroy(2, &uidString); // uidString, mimeTypesBuf
+ 
+	CleanupStack::PopAndDestroy();//buf, reginfo
 	}
 
 EXPORT_C void RSoftwareComponentRegistry::DeleteSoftwareTypeL(const TDesC& aUniqueSwTypeName, RPointerArray<HBufC>& aDeletedMimeTypes)
--- a/installationservices/swcomponentregistry/source/client/scrclientsubsessions.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swcomponentregistry/source/client/scrclientsubsessions.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -582,7 +582,7 @@
         DEBUG_PRINTF2(_L("Failed to create the subsession to the SCR server for the Application Registration view (Error:%d)"), err);
         User::Leave(err);
         }                
-    DEBUG_PRINTF(_L("Sending the request to create a component view on the server side."));
+    DEBUG_PRINTF(_L("Sending the request to create an applicaiton registry view on the server side."));
     TIpcArgs args(aLocale);
     User::LeaveIfError(CallSubsessionFunction(EOpenApplicationRegistrationInfoView, args));        
     }
@@ -599,7 +599,7 @@
         DEBUG_PRINTF2(_L("Failed to create the subsession to the SCR server for the Application Registration view with specified AppUids (Error:%d)"), err);
         User::Leave(err);
         }                
-    DEBUG_PRINTF(_L("Sending the request to create a component view on the server side."));
+    DEBUG_PRINTF(_L("Sending the request to create an applicaiton registry view on the server side."));
      
     TInt32 size = aAppRegAppUids.Count();
     const TInt32 maxBufSize= sizeof(TInt32)+ size*sizeof(TInt32);   // number of entries +  number of entry * size of AppUid stored as TUid
--- a/installationservices/swcomponentregistry/source/client/screntries.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swcomponentregistry/source/client/screntries.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -30,6 +30,7 @@
 #include "usiflog.h"
 #include <scs/streamingarray.h>
 #include <scs/cleanuputils.h>
+#include <usif/scr/screntries_platform.h>
 
 using namespace Usif;
 
@@ -841,6 +842,158 @@
 	return *iVendor;
 	}
 			
+/////////////////////////////
+// TCustomAccessInfo
+/////////////////////////////
+
+EXPORT_C TCustomAccessInfo::TCustomAccessInfo(TSecureId aSecureId, TAccessMode aAccessMode)
+    {
+    iSecureId = aSecureId;
+    iAccessMode = aAccessMode;
+    }
+
+EXPORT_C TSecureId TCustomAccessInfo::SecureId() const
+    {
+    return iSecureId;
+    }
+
+EXPORT_C TAccessMode TCustomAccessInfo::AccessMode() const
+    {
+    return iAccessMode;
+    }
+
+/////////////////////////////
+// CSoftwareTypeRegInfo
+/////////////////////////////
+
+EXPORT_C CSoftwareTypeRegInfo* CSoftwareTypeRegInfo::NewL(const TDesC& aUniqueSoftwareTypeName)
+	{
+	CSoftwareTypeRegInfo* self = new (ELeave) CSoftwareTypeRegInfo();
+	CleanupStack::PushL(self);
+	self->iUniqueSoftwareTypeName = HBufC::NewL(aUniqueSoftwareTypeName.Length());
+	self->iUniqueSoftwareTypeName->Des().Copy(aUniqueSoftwareTypeName);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CSoftwareTypeRegInfo* CSoftwareTypeRegInfo::NewL(RReadStream& aStream)
+	{
+	CSoftwareTypeRegInfo* self = new (ELeave) CSoftwareTypeRegInfo();
+	CleanupStack::PushL(self);
+	self->InternalizeL(aStream);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CSoftwareTypeRegInfo::CSoftwareTypeRegInfo()
+	{
+	}
+
+EXPORT_C CSoftwareTypeRegInfo::~CSoftwareTypeRegInfo()
+	{
+	delete iUniqueSoftwareTypeName;
+	iCustomAccessList.Close();
+	iMimeTypes.Close();
+	iLocalizedSoftwareTypeNames.Close();
+	delete iLauncherExecutable;
+	}
+
+EXPORT_C void CSoftwareTypeRegInfo::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream << *iUniqueSoftwareTypeName;
+	aStream << iSifPluginUid.iUid;
+	
+	//Sids
+	const TInt numSids = iCustomAccessList.Count();
+	aStream.WriteInt32L(numSids);
+	for (TInt i=0; i< numSids; ++i)
+	    {
+	    TUid sid = iCustomAccessList[i].SecureId();
+	    aStream << sid.iUid;
+	    aStream.WriteInt32L(iCustomAccessList[i].AccessMode());
+	    }
+	
+	// MIME types
+	const TInt numMimeTypes = iMimeTypes.Count();
+	aStream.WriteInt32L(numMimeTypes);
+	for (TInt i=0; i<numMimeTypes; ++i)
+		{
+		aStream << *iMimeTypes[i];
+		}
+	 
+	// Localized names
+	const TInt numLocalizedNames = iLocalizedSoftwareTypeNames.Count();
+	aStream.WriteInt32L(numLocalizedNames);
+	for (TInt i=0; i<numLocalizedNames; ++i)
+		{
+		aStream << *iLocalizedSoftwareTypeNames[i];
+		}
+
+	// Launcher executable
+	aStream << *iLauncherExecutable;
+	}
+
+void CSoftwareTypeRegInfo::InternalizeL(RReadStream& aStream)
+	{
+	ASSERT(iUniqueSoftwareTypeName == NULL);
+	
+	iUniqueSoftwareTypeName = HBufC::NewL(aStream, EUniqueSwTypeNameMaxLength);
+	
+	iSifPluginUid = TUid::Uid(aStream.ReadInt32L());
+	
+	// Sids
+	const TInt numSids = aStream.ReadInt32L();
+	for (TInt i=0; i<numSids; ++i)
+	    {
+	    TSecureId secId(TUid::Uid(aStream.ReadInt32L()));
+	    TCustomAccessInfo customAccessInfo(secId, static_cast<TAccessMode>(aStream.ReadInt32L()));
+	    iCustomAccessList.AppendL(customAccessInfo);
+	    }
+	        
+	// MIME types
+	const TInt numMimeTypes = aStream.ReadInt32L();
+	for (TInt i=0; i<numMimeTypes; ++i)
+		{
+		HBufC* mimeType = HBufC::NewLC(aStream, EUniqueSwTypeNameMaxLength);
+		iMimeTypes.AppendL(mimeType);
+		CleanupStack::Pop(mimeType);
+		}
+	
+	// Localized names
+	const TInt numLocalizedNames = aStream.ReadInt32L();
+	for (TInt i=0; i<numLocalizedNames; ++i)
+		{
+		CLocalizedSoftwareTypeName* name = CLocalizedSoftwareTypeName::NewL(aStream);
+		CleanupStack::PushL(name);
+		iLocalizedSoftwareTypeNames.AppendL(name);
+		CleanupStack::Pop(name);
+		}
+
+	iLauncherExecutable = HBufC::NewL(aStream, ELauncherExecutableMaxLength);
+	}
+
+EXPORT_C void CSoftwareTypeRegInfo::SetMimeTypeL(const TDesC& aMimeType)
+	{
+	HBufC* mimeType = HBufC::NewLC(aMimeType.Length());
+	mimeType->Des().Copy(aMimeType);
+	iMimeTypes.AppendL(mimeType);
+	CleanupStack::Pop(mimeType);
+	}
+
+EXPORT_C void CSoftwareTypeRegInfo::SetLocalizedSoftwareTypeNameL(TLanguage aLanguage, const TDesC& aName)
+	{
+	CLocalizedSoftwareTypeName* name = CLocalizedSoftwareTypeName::NewLC(aName, aLanguage);
+	iLocalizedSoftwareTypeNames.AppendL(name);
+	CleanupStack::Pop(name);
+	}
+
+EXPORT_C void CSoftwareTypeRegInfo::SetLauncherExecutableL(const TDesC& aLauncherExecutable)
+    {
+    HBufC* launcherExecutable = HBufC::NewLC(aLauncherExecutable.Length());
+    launcherExecutable->Des().Copy(aLauncherExecutable);
+    iLauncherExecutable = launcherExecutable;
+    CleanupStack::Pop(launcherExecutable);
+    }
 
 /////////////////////////////
 // CComponentFilter
@@ -858,6 +1011,7 @@
 	delete iSwType;
 	delete iFile;
 	iPropertyList.ResetAndDestroy();
+	iPropertyOperatorList.Reset();
 	}
 
 EXPORT_C CComponentFilter* CComponentFilter::NewL()
@@ -954,27 +1108,33 @@
 	iSetFlag |= EInstalledDrive;
 	}
 					
-EXPORT_C void CComponentFilter::AddPropertyL(const TDesC& aName, const TDesC& aValue, TLanguage aLocale)
+EXPORT_C void CComponentFilter::AddPropertyL(const TDesC& aName, const TDesC& aValue, TLanguage aLocale,
+        TDbOperator aNameOperator, TDbOperator aValueOperator)
 	{
 	CPropertyEntry *prop = CLocalizablePropertyEntry::NewLC(aName, aValue, aLocale);
 	iPropertyList.AppendL(prop);
 	CleanupStack::Pop(prop);
+	iPropertyOperatorList.AppendL(TPropertyOperator(aNameOperator, aValueOperator));
 	iSetFlag |= EProperty;
 	}
 
-EXPORT_C void CComponentFilter::AddPropertyL(const TDesC& aName, TInt64 aValue)
+EXPORT_C void CComponentFilter::AddPropertyL(const TDesC& aName, TInt64 aValue, TDbOperator aNameOperator, 
+        TDbOperator aValueOperator)
 	{
 	CPropertyEntry *prop = CIntPropertyEntry::NewLC(aName, aValue);
 	iPropertyList.AppendL(prop);
 	CleanupStack::Pop(prop);
+	iPropertyOperatorList.AppendL(TPropertyOperator(aNameOperator, aValueOperator));
 	iSetFlag |= EProperty;
 	}
 
-EXPORT_C void CComponentFilter::AddPropertyL(const TDesC& aName, const TDesC8& aValue)
+EXPORT_C void CComponentFilter::AddPropertyL(const TDesC& aName, const TDesC8& aValue, TDbOperator aNameOperator, 
+        TDbOperator aValueOperator)
 	{
 	CPropertyEntry *prop = CBinaryPropertyEntry::NewLC(aName, aValue);
 	iPropertyList.AppendL(prop);
 	CleanupStack::Pop(prop);
+	iPropertyOperatorList.AppendL(TPropertyOperator(aNameOperator, aValueOperator));
 	iSetFlag |= EProperty;	
 	}
 
@@ -995,6 +1155,7 @@
 	aStream << iInstalledDrives;
 	aStream << TCardinality(iRemovable);
 	ExternalizePointersArrayL(iPropertyList, aStream);
+	ExternalizeFixedLengthArrayL(iPropertyOperatorList, aStream);
 	aStream << *iFile;
 	aStream << TCardinality(iDrmProtected);
 	aStream << TCardinality(iHidden);
@@ -1019,6 +1180,8 @@
 	iRemovable = c;
 	iPropertyList.Reset();
 	InternalizePointersArrayL(iPropertyList, aStream);
+	iPropertyOperatorList.Reset();
+	InternalizeFixedLengthArrayL(iPropertyOperatorList, aStream);
 	DeleteObjectZ(iFile);
 	iFile = HBufC::NewL(aStream, KMaxTInt); // No restriction on length
 	// Read if it is DRM protected
@@ -1217,3 +1380,31 @@
 	{
 	return iComponentId;
 	}
+
+EXPORT_C CComponentFilter::TPropertyOperator::TPropertyOperator(TDbOperator aNameOperator, TDbOperator aValueOperator):
+        iNameOperator(aNameOperator),
+        iValueOperator(aValueOperator)
+    {
+    }
+
+void CComponentFilter::TPropertyOperator::ExternalizeL(RWriteStream& aStream) const
+    {
+    aStream.WriteInt32L(iNameOperator);
+    aStream.WriteInt32L(iValueOperator);
+    }
+
+EXPORT_C void CComponentFilter::TPropertyOperator::InternalizeL(RReadStream& aStream)
+    {
+    iNameOperator = static_cast<TDbOperator>(aStream.ReadInt32L());
+    iValueOperator = static_cast<TDbOperator>(aStream.ReadInt32L());
+    }
+
+EXPORT_C CComponentFilter::TDbOperator CComponentFilter::TPropertyOperator::NameOperator() const
+    {
+    return iNameOperator;
+    }
+
+EXPORT_C CComponentFilter::TDbOperator CComponentFilter::TPropertyOperator::ValueOperator() const
+    {
+    return iValueOperator;
+    }
--- a/installationservices/swcomponentregistry/source/server/scrrequestimpl.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swcomponentregistry/source/server/scrrequestimpl.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -2456,95 +2456,150 @@
 	CleanupStack::PopAndDestroy(&tmp);
 	}
 
-void CScrRequestImpl::GetComponentIdsHavingThePropertiesL(RArray<TComponentId>& aComponentIds, RPointerArray<CPropertyEntry> aProperties, TBool aDoIntersect) const
-	{
-	// GROUP BY is added at the end to avoid fetching twice components which have the same localizable values for different locales
-	_LIT(KFindComponentsFromProperties, "SELECT ComponentId FROM ComponentProperties WHERE Name=? AND %S GROUP BY ComponentId;");
-	_LIT(KPropertyIntValue,"IntValue=?");
-	_LIT(KPropertyStrValue,"StrValue=?");
-	_LIT(KPropertyLocalizedValue,"StrValue=? AND Locale=?");
-			
-	TInt propCount = aProperties.Count();
-
-	HBufC *statementStr(0);
-	RArray<TComponentId> propCompIds;
-	CleanupClosePushL(propCompIds);
-	
-	for(TInt i=0; i<propCount; ++i)
-		{
-		switch(aProperties[i]->PropertyType())
-			{
-			case CPropertyEntry::EIntProperty:
-				statementStr = FormatStatementLC(KFindComponentsFromProperties, KPropertyIntValue().Length(), &KPropertyIntValue());
-				break;
-			case CPropertyEntry::EBinaryProperty:
-				statementStr = FormatStatementLC(KFindComponentsFromProperties, KPropertyStrValue().Length(), &KPropertyStrValue());
-				break;
-			case CPropertyEntry::ELocalizedProperty:
-				{
-				CLocalizablePropertyEntry *localizedProp = static_cast<CLocalizablePropertyEntry *>(aProperties[i]);
-				if (localizedProp->LocaleL() == KUnspecifiedLocale) // If the locale was not specified, then we match across all locales				
-					statementStr = FormatStatementLC(KFindComponentsFromProperties, KPropertyStrValue().Length(), &KPropertyStrValue());
-				else // Otherwise we match for a specific locale
-					statementStr = FormatStatementLC(KFindComponentsFromProperties, KPropertyLocalizedValue().Length(), &KPropertyLocalizedValue());
-				}
-				break;				
-			default:
-				DEBUG_PRINTF(_L8("The property type couldn't be recognized."));
-				User::Leave(KErrAbort);	
-			}
-				
-		CStatement *stmt = iDbHandle->PrepareStatementLC(*statementStr);
-		stmt->BindStrL(1, aProperties[i]->PropertyName());
-				
-		switch(aProperties[i]->PropertyType())
-			{
-			case CPropertyEntry::EIntProperty:
-				{
-				CIntPropertyEntry *intProp = static_cast<CIntPropertyEntry *>(aProperties[i]);
-				stmt->BindInt64L(2, intProp->Int64Value());
-				break;
-				}
-			case CPropertyEntry::EBinaryProperty:
-				{
-				CBinaryPropertyEntry *binaryProp = static_cast<CBinaryPropertyEntry *>(aProperties[i]);
-				stmt->BindBinaryL(2, binaryProp->BinaryValue());
-				break;
-				}
-			case CPropertyEntry::ELocalizedProperty:
-				{
-				CLocalizablePropertyEntry *localizedProp = static_cast<CLocalizablePropertyEntry *>(aProperties[i]);
-				stmt->BindStrL(2, localizedProp->StrValue());
-				if (localizedProp->LocaleL() != KUnspecifiedLocale)
-					stmt->BindIntL(3, localizedProp->LocaleL());
-				break;
-				}
-			default:
-				DEBUG_PRINTF(_L8("The property type couldn't be recognized."));
-				User::Leave(KErrAbort);	
-			}
-		
-		while(stmt->ProcessNextRowL())
-			{
-			User::LeaveIfError(propCompIds.InsertInOrder(stmt->IntColumnL(0)));
-			}
-		
-		CleanupStack::PopAndDestroy(2, statementStr); // stmt, statementStr
-		
-		if (aDoIntersect)
-			{
-			IntersectSortedArraysL(aComponentIds, propCompIds);
-			}
-		else
-			{
-			CopyFixedLengthArrayL(aComponentIds, propCompIds);
-			aDoIntersect = ETrue; // If many properties are present in the filter, we need to intersect the component Ids on further iterations
-			}
-		
-		propCompIds.Reset();
-		}
-	CleanupStack::PopAndDestroy(&propCompIds);
-	}
+void CScrRequestImpl::GetOperatorStringL(CComponentFilter::TDbOperator aOperator, HBufC*& aOperatorString) const
+    {
+    _LIT(KEqualOperator, "=");
+    _LIT(KLikeOperator, "LIKE");
+    
+    switch(aOperator)
+        {
+        case CComponentFilter::EEqual:
+            aOperatorString = KEqualOperator().AllocL();
+            break;
+            
+        case CComponentFilter::ELike:
+            aOperatorString = KLikeOperator().AllocL();
+            break;   
+            
+        default:
+            User::Leave(KErrArgument);
+			        
+        }      
+    }
+
+void CScrRequestImpl::GetComponentIdsHavingThePropertiesL(RArray<TComponentId>& aComponentIds, RPointerArray<CPropertyEntry>& aProperties, 
+                                                              RArray<CComponentFilter::TPropertyOperator>& aPropertyOperatorList, TBool aDoIntersect) const
+    {
+    // GROUP BY is added at the end to avoid fetching twice components which have the same localizable values for different locales
+    
+    _LIT(KFindComponentsFromProperties, "SELECT ComponentId FROM ComponentProperties WHERE NAME %S ? AND %S GROUP BY ComponentId;");
+
+    _LIT(KPropertyIntValue, "IntValue %S ?");
+    _LIT(KPropertyStrValue, "StrValue %S ?");
+    _LIT(KPropertyLocalizedValue, "StrValue %S ? AND Locale = ?");
+            
+    TInt propCount = aProperties.Count();
+
+    RArray<TComponentId> propCompIds;
+    CleanupClosePushL(propCompIds);
+    
+    for(TInt i=0; i<propCount; ++i)
+        {
+        //Retrieve the operators to be used to form this query.
+        CComponentFilter::TPropertyOperator propOperator = aPropertyOperatorList[i];
+       
+	   // Get the name operator.
+	    HBufC* nameOperator(0);
+        GetOperatorStringL(aPropertyOperatorList[i].NameOperator(), nameOperator);
+        CleanupStack::PushL(nameOperator);     
+        
+        // Get the value operator.
+        HBufC* valueOperator(0);
+        GetOperatorStringL(aPropertyOperatorList[i].ValueOperator(), valueOperator);
+        CleanupStack::PushL(valueOperator);
+        
+        // Create the value string based on the property type.
+        HBufC* valueString(0);
+        switch(aProperties[i]->PropertyType())
+            {            
+            case CPropertyEntry::EIntProperty:
+                {
+                valueString = FormatStatementLC(KPropertyIntValue, valueOperator->Length(), valueOperator);               
+                }
+
+                break;
+                
+            case CPropertyEntry::EBinaryProperty:
+                {
+                valueString = FormatStatementLC(KPropertyStrValue, valueOperator->Length(), valueOperator);            
+                }
+
+                break;
+            case CPropertyEntry::ELocalizedProperty:
+                {
+                CLocalizablePropertyEntry *localizedProp = static_cast<CLocalizablePropertyEntry *>(aProperties[i]);
+                if (localizedProp->LocaleL() == KUnspecifiedLocale) // If the locale was not specified, then we match across all locales  
+                    {
+                    valueString = FormatStatementLC(KPropertyStrValue, valueOperator->Length(), valueOperator);        
+                    }
+                else
+                    {
+                    valueString = FormatStatementLC(KPropertyLocalizedValue, valueOperator->Length(), valueOperator);                
+                    }
+                }
+                break;              
+            default:
+                DEBUG_PRINTF(_L8("The property type couldn't be recognized."));
+                User::Leave(KErrAbort); 
+            }
+        
+        // Prepare full statement using the name operator and the value string.
+        HBufC *statementStr = FormatStatementLC(KFindComponentsFromProperties, nameOperator->Length()+ valueString->Length(), 
+                                                    nameOperator, valueString); 
+        
+        // Create Sql statement.
+        CStatement *stmt = iDbHandle->PrepareStatementLC(*statementStr);
+        stmt->BindStrL(1, aProperties[i]->PropertyName());
+                
+        switch(aProperties[i]->PropertyType())
+            {
+            case CPropertyEntry::EIntProperty:
+                {
+                CIntPropertyEntry *intProp = static_cast<CIntPropertyEntry *>(aProperties[i]);
+                stmt->BindInt64L(2, intProp->Int64Value());
+                break;
+                }
+            case CPropertyEntry::EBinaryProperty:
+                {
+                CBinaryPropertyEntry *binaryProp = static_cast<CBinaryPropertyEntry *>(aProperties[i]);
+                stmt->BindBinaryL(2, binaryProp->BinaryValue());
+                break;
+                }
+            case CPropertyEntry::ELocalizedProperty:
+                {
+                CLocalizablePropertyEntry *localizedProp = static_cast<CLocalizablePropertyEntry *>(aProperties[i]);
+                stmt->BindStrL(2, localizedProp->StrValue());
+                if (localizedProp->LocaleL() != KUnspecifiedLocale)
+                    stmt->BindIntL(3, localizedProp->LocaleL());
+                break;
+                }
+            default:
+                DEBUG_PRINTF(_L8("The property type couldn't be recognized."));
+                User::Leave(KErrAbort); 
+            }
+        
+        while(stmt->ProcessNextRowL())
+            {
+            User::LeaveIfError(propCompIds.InsertInOrder(stmt->IntColumnL(0)));
+            }
+        
+        CleanupStack::PopAndDestroy(5, nameOperator);
+        
+        if (aDoIntersect)
+            {
+            IntersectSortedArraysL(aComponentIds, propCompIds);
+            }
+        else
+            {
+            CopyFixedLengthArrayL(aComponentIds, propCompIds);
+            aDoIntersect = ETrue; // If many properties are present in the filter, we need to intersect the component Ids on further iterations
+            }
+        
+        propCompIds.Reset();
+        }
+    CleanupStack::PopAndDestroy(&propCompIds);
+    }
+
 
 void ReallocStatementIfNeededL(RBuf& aStatementStr, TInt aAddedLength)
 	{
@@ -2700,7 +2755,7 @@
 	
 	if(aFilter.iSetFlag & CComponentFilter::EProperty)
 		{
-		GetComponentIdsHavingThePropertiesL(aComponentFilterSuperset, aFilter.iPropertyList, doIntersect);
+		GetComponentIdsHavingThePropertiesL(aComponentFilterSuperset, aFilter.iPropertyList, aFilter.iPropertyOperatorList, doIntersect);
 		// Inside the function, componentIds array is intersected with the components Ids which have the given properties.
 		doIntersect = ETrue;
 		aFilterSupersetInUse = ETrue;
@@ -2790,7 +2845,7 @@
 		  // and the provided names are retrieved from the ComponentLocalizables table.
 		CStatement *stmt = CreateStatementObjectForComponentLocalizablesLC(*aFilter.iName, *aFilter.iVendor, aFilter.iSetFlag, aComponentId);
 		TBool res = stmt->ProcessNextRowL();
-		// If the name and the vendor are not found, it means that there is a defect in this class, the filter shouldn't have returned the component in the first place		
+		// If the name and the vendor are not found, leave with KErrNotFound.
 		__ASSERT_ALWAYS(res, User::Leave(KErrNotFound)); 		
 		DeleteObjectZ(aEntry.iName);
 		aEntry.iName = stmt->StrColumnL(1).AllocL(); // Ownership is transferred to the entry object
@@ -2871,7 +2926,17 @@
 	TLanguage locale = TLanguage(aMessage.Int0());
 	
 	DeleteObjectZ(aEntry);
-	aEntry = GetNextComponentEntryL(*aStmt, *aFilter, locale, aSubsessionContext);
+	
+	TInt err(0);
+	do {
+       TRAP(err, aEntry = GetNextComponentEntryL(*aStmt, *aFilter, locale, aSubsessionContext));
+       }while(err == KErrNotFound);
+	
+	if(KErrNone != err)
+	    {
+        User::Leave(err);
+	    }
+	
 	TInt sizeSlot = 1;
 	if(!aEntry)
 		{
@@ -2898,9 +2963,19 @@
 	TLanguage locale = TLanguage(aMessage.Int1());
 	
 	aEntryList.ResetAndDestroy();
+	CComponentEntry *entry(0);
+	TInt err(0);
 	for(TInt i=0; i<maxArraySize; ++i)
 		{
-		CComponentEntry *entry = GetNextComponentEntryL(*aStmt, *aFilter, locale, aSubsessionContext);
+        do {
+           TRAP(err, entry = GetNextComponentEntryL(*aStmt, *aFilter, locale, aSubsessionContext));
+           }while(err == KErrNotFound);
+        
+        if(KErrNone != err)
+            {
+            User::Leave(err);
+            }		
+        
 		if(!entry)
 			{
 			break;
@@ -2912,6 +2987,7 @@
 	WriteArraySizeL(aMessage, 2, aEntryList);
 	}
 
+
 void CScrRequestImpl::NextComponentSetDataL(const RMessage2& aMessage, RPointerArray<CComponentEntry>& aEntryList) const
 	{
 	DEBUG_PRINTF(_L8("Returning the next component entry set."));
@@ -3121,14 +3197,16 @@
 	return !aLeft.CompareF(aRight);
 	}
 
-TBool CScrRequestImpl::IsSoftwareTypeExistingL(TUint32 aSwTypeId, TUint32 aSifPluginUid, TUint32 aInstallerSecureId, TUint32 aExecutionLayerSecureId, const RPointerArray<HBufC>& aMimeTypesArray, const RPointerArray<CLocalizedSoftwareTypeName>& aLocalizedNamesArray)
+TBool CScrRequestImpl::IsSoftwareTypeExistingL(TUint32 aSwTypeId, TUint32 aSifPluginUid, RArray<TCustomAccessInfo>& aSidArray, const RPointerArray<HBufC>& aMimeTypesArray, const RPointerArray<CLocalizedSoftwareTypeName>& aLocalizedNamesArray, const TDesC& aLauncherExecutable)
 	{
+	//Check if software type id exists
     if(!IsSoftwareTypeExistingL(aSwTypeId))
         {
         DEBUG_PRINTF2(_L8("IsSoftwareTypeExistingL: Software Type Id (%d) doesn't exist in the SCR."), aSwTypeId);
         return EFalse;
         }
     
+    //Check if sif plugin uid for the software type id is the same 
     TInt pluginUid(0);
     if(!GetSifPluginUidIInternalL(aSwTypeId, pluginUid))
         {
@@ -3141,33 +3219,50 @@
         DEBUG_PRINTF2(_L8("IsSoftwareTypeExistingL: SIF Plugin Uid doesn't match with the one in the SCR."), pluginUid);
         return EFalse;
         }
-        
-    TBool isInstallerSidPresent = EFalse;
-    TBool isExecutionLayerSidPresent = EFalse;
+    
+    //Check if launcher executable for the software type id is the same
+    HBufC *launcherExe;
+    _LIT(KSelectLauncherExecutable, "SELECT LauncherExecutable FROM SoftwareTypes WHERE SoftwareTypeId=?;");
+    CStatement* stmt = iDbHandle->PrepareStatementLC(KSelectLauncherExecutable);
+    stmt->BindIntL(1, aSwTypeId);
+
+    if(stmt->ProcessNextRowL())
+        {
+        launcherExe = stmt->StrColumnL(0).AllocLC();
+        if(launcherExe->Compare(aLauncherExecutable) != 0)
+            {
+            DEBUG_PRINTF(_L8("IsSoftwareTypeExistingL: Launcher Executable doesn't match with the one in the SCR."));
+            CleanupStack::PopAndDestroy(2, stmt);
+            return EFalse;
+            }
+        CleanupStack::PopAndDestroy(2, stmt);
+        }
+    else
+        {
+        DEBUG_PRINTF2(_L8("IsSoftwareTypeExistingL: Launcher Executable doesn't exist in the SCR for TypeId %d."), aSwTypeId);
+        CleanupStack::PopAndDestroy(stmt);
+        return EFalse;
+        }
+            
+    //Check if associated installer sid's for the software type id is the same
+    
     RArray<TSecureId> installerSids;
     CleanupClosePushL(installerSids);
     if(GetSidsForSoftwareTypeIdL(aSwTypeId, installerSids))
         {
-        TInt count = installerSids.Count();
-        for (TInt i = 0; i < count; i++)
+        for(TInt i=0; i<aSidArray.Count(); ++i)
             {
-            if (aInstallerSecureId == installerSids[i])
-                isInstallerSidPresent = ETrue;
-            if (aExecutionLayerSecureId == installerSids[i])
-                isExecutionLayerSidPresent = ETrue;
-
-			if(isInstallerSidPresent && isExecutionLayerSidPresent)
-				break;
+            if(KErrNotFound == installerSids.Find(aSidArray[i].SecureId()))
+                {
+                DEBUG_PRINTF(_L8("IsSoftwareTypeExistingL: One of the Sid doesn't match with the one in the SCR."));
+                CleanupStack::PopAndDestroy(&installerSids);
+                return EFalse;
+                }
             }
         }
     CleanupStack::PopAndDestroy(&installerSids);
     
-	if(!isInstallerSidPresent || !isExecutionLayerSidPresent)
-		{
-		DEBUG_PRINTF(_L8("IsSoftwareTypeExistingL: One of the UIDs is different from the one in the database."));
-		return EFalse;
-		}
-	
+	//Check if localized software type name for the software type id is the same
 	_LIT(KSelectSwTypeNames, "SELECT Locale,Name FROM SoftwareTypeNames WHERE SoftwareTypeId=? AND Locale!=?;");
 	CStatement* stmtNames = iDbHandle->PrepareStatementLC(KSelectSwTypeNames);
 	stmtNames->BindIntL(1, aSwTypeId);
@@ -3194,6 +3289,7 @@
 		return EFalse;
 		}
 	
+	//Check if mime type for the software type id is the same
 	_LIT(KSelectMimeTypes, "SELECT MimeType FROM MimeTypes WHERE SoftwareTypeId=?;");
 	CStatement* stmtMimes = iDbHandle->PrepareStatementLC(KSelectMimeTypes);
 	stmtMimes->BindIntL(1, aSwTypeId);
@@ -3235,54 +3331,46 @@
 	// the software type id of an installer. If the uniqe software type name of the installer is known, its hash
 	// is simply calculated to obtain its software type id.
 	
-	// Slot-0 contains Unique Software Type Name
-	HBufC *uniqueSwTypeName = ReadDescLC(aMessage, 0);
-	TUint32 swTypeId = HashCaseSensitiveL(*uniqueSwTypeName);
-	
-	// Slot-1 contains the concatenated values of SifPluginUid, InstallerSecureId and ExecutionLayerSecureId in turn.
-	HBufC8 *uidString = ReadDesc8LC(aMessage, 1);
+	CSoftwareTypeRegInfo *regInfo = ReadObjectFromMessageLC<CSoftwareTypeRegInfo>(aMessage, 0);
+	
+	HBufC* uniqueSwTypeName = HBufC::NewLC(regInfo->UniqueSoftwareTypeName().Length());
+	uniqueSwTypeName->Des().Copy(regInfo->UniqueSoftwareTypeName());
+
+	TUint32 swTypeId = HashCaseSensitiveL(regInfo->UniqueSoftwareTypeName());
+	    
 	TUint32 sifPluginUid (0);
-	TUint32 installerSecureId (0);
-	TUint32 executionLayerSecureId (0);
-	ParseUidHexStringL(*uidString, sifPluginUid, installerSecureId, executionLayerSecureId);
-	CleanupStack::PopAndDestroy(uidString);
-	
-	// Slot-2 contains the list of MIME types
-	RIpcReadStream mimeTypesReader;
-	CleanupClosePushL(mimeTypesReader);
-	mimeTypesReader.Open(aMessage, 2);
-				
-	RPointerArray<HBufC> mimeTypesArray;
-	CleanupResetAndDestroyPushL(mimeTypesArray);
-	InternalizePointersArrayL(mimeTypesArray, mimeTypesReader);
-	
-	// Slot-3 contains Localized Software Type Names
-	RIpcReadStream localizedNamesReader;
-	CleanupClosePushL(localizedNamesReader);
-	localizedNamesReader.Open(aMessage, 3);
-				
-	RPointerArray<CLocalizedSoftwareTypeName> localizedNamesArray;
-	CleanupResetAndDestroyPushL(localizedNamesArray);
-	InternalizePointersArrayL(localizedNamesArray, localizedNamesReader);
-	
-	if (IsSoftwareTypeExistingL(swTypeId, sifPluginUid, installerSecureId, executionLayerSecureId, mimeTypesArray, localizedNamesArray))
+	sifPluginUid = regInfo->SifPluginUid().iUid;
+	
+	RArray<TCustomAccessInfo> sidArray;
+	sidArray = regInfo->CustomAccessList();
+	
+	RPointerArray<HBufC> mimeTypesArray = regInfo->MimeTypes();
+	
+	RPointerArray<CLocalizedSoftwareTypeName> localizedNamesArray = regInfo->LocalizedSoftwareTypeNames();
+	
+	HBufC* launcherExecutable = HBufC::NewLC(regInfo->LauncherExecutable().Length());
+	launcherExecutable->Des().Copy(regInfo->LauncherExecutable());
+
+	if (IsSoftwareTypeExistingL(swTypeId, sifPluginUid, sidArray, mimeTypesArray, localizedNamesArray, *launcherExecutable))
 		{ // If the software type exists, do nothing and return;	
-		CleanupStack::PopAndDestroy(5, uniqueSwTypeName); // uniqueSwTypeName, mimeTypesReader, mimeTypesArray, localizedNamesReader, localizedNamesArray
+		CleanupStack::PopAndDestroy(3, regInfo); // uniqueSwTypeName, launcherExecutable, regInfo
 		return; 
 		}
 	
 	// First, insert the main record to SoftwareTypes table
-	// TODO: Have to insert the Launcher Executable name here
-	_LIT(KInsertSwType, "INSERT INTO SoftwareTypes(SoftwareTypeId,SifPluginUid) VALUES(?,?);");
-	TInt numberOfValuesSwType = 2;
-	ExecuteStatementL(KInsertSwType(), numberOfValuesSwType, EValueInteger, swTypeId, EValueInteger, sifPluginUid);
+	_LIT(KInsertSwType, "INSERT INTO SoftwareTypes(SoftwareTypeId,SifPluginUid,LauncherExecutable) VALUES(?,?,?);");
+	TInt numberOfValuesSwType = 3;
+	ExecuteStatementL(KInsertSwType(), numberOfValuesSwType, EValueInteger, swTypeId, EValueInteger, sifPluginUid, EValueString, launcherExecutable);
 	
 	_LIT(KInsertCustomAccess, "INSERT INTO CustomAccessList(SoftwareTypeId,SecureId,AccessMode) VALUES(?,?,?);");
 	TInt numberOfValuesCustomAccess = 3;
-	// TODO: This should be modified to insert more than 2 Sids
-	ExecuteStatementL(KInsertCustomAccess(), numberOfValuesCustomAccess, EValueInteger, swTypeId, EValueInteger, installerSecureId, EValueInteger, (TInt)ETransactionalSid);
-	ExecuteStatementL(KInsertCustomAccess(), numberOfValuesCustomAccess, EValueInteger, swTypeId, EValueInteger, executionLayerSecureId, EValueInteger, (TInt)ETransactionalSid);
-	
+	for(TInt i=0; i<sidArray.Count(); ++i)
+		{
+		TUint32 sid = sidArray[i].SecureId();
+		TAccessMode accessMode = sidArray[i].AccessMode();
+		ExecuteStatementL(KInsertCustomAccess(), numberOfValuesCustomAccess, EValueInteger, swTypeId, EValueInteger, sid, EValueInteger, accessMode);
+		}
+
 	// Then, insert MIME types of this software type into MimeTypes table
 	_LIT(KInsertMimeType, "INSERT INTO MimeTypes(SoftwareTypeId,MimeType) VALUES(?,?);");
 	TInt numberOfValuesMimeType = 2;
@@ -3304,7 +3392,7 @@
 		const TDesC& name = localizedNamesArray[i]->NameL();
 		ExecuteStatementL(KInsertSwTypeName(), numberOfValuesSwTypeName, EValueInteger, swTypeId, EValueInteger, locale, EValueString, &name);
 		}	
-	CleanupStack::PopAndDestroy(5, uniqueSwTypeName); // uniqueSwTypeName, mimeTypesReader, mimeTypesArray, localizedNamesReader, localizedNamesArray
+	CleanupStack::PopAndDestroy(3, regInfo); // uniqueSwTypeName, launcherExecutable, regInfo
 	}
 
 void CScrRequestImpl::DeleteSoftwareTypeL(const RMessage2& aMessage)
@@ -3580,30 +3668,37 @@
 void CScrRequestImpl::GetIsComponentPresentL(const RMessage2& aMessage) const
 	{
 	TComponentId componentId = GetComponentIdFromMsgL(aMessage);
-	DEBUG_PRINTF2(_L8("Checking if the component(%d) is available."), componentId);
-	
-	_LIT(KSelectCompPresent, "SELECT CompPresence FROM Components WHERE ComponentId=?;");
-	CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectCompPresent);
-	stmt->BindIntL(1, componentId);
-	if(!stmt->ProcessNextRowL())
-		{
-		DEBUG_PRINTF2(_L8("Component (%d) couldn't be found in the SCR database."), componentId);
-		User::Leave(KErrNotFound);
-		}
-	TBool result = (stmt->IntColumnL(0) == 1);
-	CleanupStack::PopAndDestroy(stmt);
-	
-	// The default value for CompPresence is ETrue. So when we find that the SCR DB contains the 
-	// default property value we check if the drives registered by the component are present.   
-	if (result && !CheckForMediaPresenceL(componentId))
-		{
-		result = EFalse;
-		}
+	TBool result = IsComponentPresentL(componentId);
 				
 	TPckg<TBool> isCompPresent(result);	
 	aMessage.WriteL(1, isCompPresent);	
 	}
 
+
+TBool CScrRequestImpl::IsComponentPresentL(TComponentId componentId) const
+    {
+    DEBUG_PRINTF2(_L8("Checking if the component(%d) is available."), componentId);
+    
+    _LIT(KSelectCompPresent, "SELECT CompPresence FROM Components WHERE ComponentId=?;");
+    CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectCompPresent);
+    stmt->BindIntL(1, componentId);
+    if(!stmt->ProcessNextRowL())
+        {
+        DEBUG_PRINTF2(_L8("Component (%d) couldn't be found in the SCR database."), componentId);
+        User::Leave(KErrNotFound);
+        }
+    TBool result = (stmt->IntColumnL(0) == 1);
+    CleanupStack::PopAndDestroy(stmt);
+    
+    // The default value for CompPresence is ETrue. So when we find that the SCR DB contains the 
+    // default property value we check if the drives registered by the component are present.   
+    if (result && !CheckForMediaPresenceL(componentId))
+        {
+        result = EFalse;
+        }
+    return result;
+    }
+
 void CScrRequestImpl::SetIsComponentPresentL(const RMessage2& aMessage)
 	{
 	DEBUG_PRINTF(_L8("Setting the component as present."));
@@ -3921,32 +4016,44 @@
 
 void CScrRequestImpl::NextAppInfoSizeL(const RMessage2& aMessage, TAppRegInfo*& aAppInfo, CAppInfoViewSubsessionContext* aSubsessionContext)
     {
-    if(aSubsessionContext->iAppInfoIndex < aSubsessionContext->iApps.Count())
+    while(1)
         {
-        TInt count1 = User::CountAllocCells();
-        aAppInfo = new(ELeave) TAppRegInfo;
-        TInt count2 = User::CountAllocCells();        
-        aAppInfo->iUid = (aSubsessionContext->iApps[aSubsessionContext->iAppInfoIndex]).iAppUid;
-
-        _LIT(KSelectAppFilename, "SELECT AppFile FROM AppRegistrationInfo WHERE AppUid=?;");
-        CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectAppFilename);
-        stmt->BindIntL(1, aAppInfo->iUid.iUid);
-        stmt->ProcessNextRowL();
-        aAppInfo->iFullName = stmt->StrColumnL(0);
-        CleanupStack::PopAndDestroy(stmt);
-
-        if((aSubsessionContext->iApps[aSubsessionContext->iAppInfoIndex]).iLocale != KUnspecifiedLocale)
+        if(aSubsessionContext->iAppInfoIndex < aSubsessionContext->iApps.Count())
             {
-            GetCaptionAndShortCaptionInfoForLocaleL(aAppInfo->iUid, aSubsessionContext->iApps[aSubsessionContext->iAppInfoIndex].iLocale, aAppInfo->iShortCaption, aAppInfo->iCaption);
+            TBool isPresent = EFalse;
+            aAppInfo = new(ELeave) TAppRegInfo;               
+            aAppInfo->iUid = (aSubsessionContext->iApps[aSubsessionContext->iAppInfoIndex]).iAppUid;
+    
+            _LIT(KSelectAppFilename, "SELECT AppFile FROM AppRegistrationInfo WHERE AppUid=?;");
+            CStatement *stmt = iDbHandle->PrepareStatementLC(KSelectAppFilename);
+            stmt->BindIntL(1, aAppInfo->iUid.iUid);
+            if(stmt->ProcessNextRowL())
+                {
+                isPresent = ETrue;
+                aAppInfo->iFullName = stmt->StrColumnL(0);
+                }                   
+            CleanupStack::PopAndDestroy(stmt);
+            if(isPresent)
+                {
+                if((aSubsessionContext->iApps[aSubsessionContext->iAppInfoIndex]).iLocale != KUnspecifiedLocale)
+                    {
+                    GetCaptionAndShortCaptionInfoForLocaleL(aAppInfo->iUid, aSubsessionContext->iApps[aSubsessionContext->iAppInfoIndex].iLocale, aAppInfo->iShortCaption, aAppInfo->iCaption);
+                    }
+                aSubsessionContext->iAppInfoIndex++;
+                WriteObjectSizeL(aMessage, 1, aAppInfo);
+                break;
+                }
+            else
+                {
+                DeleteObjectZ(aAppInfo);
+                aSubsessionContext->iAppInfoIndex++;
+                }        
             }
-        aSubsessionContext->iAppInfoIndex++;
-        }
-    else
-        {
-        DEBUG_PRINTF(_L8("Reached the end of the view."));
-        }
-
-    WriteObjectSizeL(aMessage, 1, aAppInfo);
+        else
+            {
+            break;
+            }
+        }        
     }
 
 void CScrRequestImpl::NextAppInfoDataL(const RMessage2& aMessage, TAppRegInfo*& aAppInfo)
@@ -4182,7 +4289,7 @@
 void CScrRequestImpl::AddOpaqueDataL(TUid aAppUid, Usif::COpaqueData* aOpaqueDataEntry, TUid aServiceUid)
     {
 	DEBUG_PRINTF(_L8("Adding the Opaque Data details into SCR"));
-    const TInt KMaxOpaqueDataLength = 1024;
+    const TInt KMaxOpaqueDataLength = 4096;
     /* AppUid cannot be NULL since this function is invoked from AddApplicationEntryL */ 
     __ASSERT_DEBUG(aAppUid != TUid::Null(), User::Leave(KErrArgument));
     
@@ -4376,7 +4483,15 @@
     aSubsessionContext->iAppUids.Close();
     while(stmt->ProcessNextRowL())
         {
-        aSubsessionContext->iAppUids.AppendL(TUid::Uid(stmt->IntColumnL(0)));                  
+        TUid appUid = TUid::Uid(stmt->IntColumnL(0));
+        TComponentId componentId(0);
+        if(GetComponentIdForAppInternalL(appUid, componentId))
+	    	{
+	    	if(!componentId || IsComponentPresentL(componentId))
+            	{
+            	aSubsessionContext->iAppUids.AppendL(appUid);    
+            	}
+	    	}
         }
     CleanupStack::PopAndDestroy(stmt);  
     }
@@ -4404,10 +4519,14 @@
     for (TInt i =0; i<size ;i++)
         {
         TUid appUid = TUid::Uid(inStream.ReadInt32L());
-        if(CheckIfAppUidExistsL(appUid)) //Append only if AppUid is present in DB.
-            {
-            aSubsessionContext->iAppUids.AppendL(appUid);
-            }
+		TComponentId componentId(0);
+        if(GetComponentIdForAppInternalL(appUid, componentId)) // Check for application presence and fetch the corresponding ComponentId
+	    	{
+	    	if(!componentId || IsComponentPresentL(componentId)) // Check if the component is present
+            	{
+            	aSubsessionContext->iAppUids.AppendL(appUid);    
+            	}
+	    	}
         }
     
     CleanupStack::PopAndDestroy(2,bufToHoldAppUids); //bufToHoldAppUids, inStream
@@ -4448,7 +4567,7 @@
       }
     else
       {
-      DEBUG_PRINTF2(_L8("AppUid %d Not Found in th SCR"),aAppUid);       
+      DEBUG_PRINTF2(_L8("AppUid %d Not Found in the SCR"),aAppUid);       
       CleanupStack::PopAndDestroy(stmt);
       return EFalse;
       }
@@ -4569,43 +4688,54 @@
 
 void CScrRequestImpl::NextApplicationRegistrationInfoSizeL(const RMessage2& aMessage, CApplicationRegistrationData*& aApplicationRegistration, CAppRegistrySubsessionContext*  aSubsessionContext)
     {
-    DeleteObjectZ(aApplicationRegistration);
-    aApplicationRegistration = CApplicationRegistrationData::NewL();
-    if((aSubsessionContext->iAppRegIndex < aSubsessionContext->iAppUids.Count()))
+    while(1)
         {
-        TUid appUid = aSubsessionContext->iAppUids[aSubsessionContext->iAppRegIndex];
-            
-        //Populate the Application Registration Info
-        if(GetApplicationRegistrationInfoL(*aApplicationRegistration,appUid))
+        TBool dataFound = EFalse;
+        DeleteObjectZ(aApplicationRegistration);
+        aApplicationRegistration = CApplicationRegistrationData::NewL();
+        if((aSubsessionContext->iAppRegIndex < aSubsessionContext->iAppUids.Count()))
             {
-            //Populate File ownership info           
-            GetFileOwnershipInfoL(*aApplicationRegistration,appUid);
-               
-            //Populate service info
-            GetServiceInfoL(*aApplicationRegistration, appUid, aSubsessionContext->iLanguage);
-            
-            //Populate localizable appinfo including caption and icon info 
-            //and view data and its caption and icon info.            
-            GetLocalizableAppInfoL(*aApplicationRegistration,appUid, aSubsessionContext->iLanguage);
-            
-			GetAppRegOpaqueDataL(*aApplicationRegistration,appUid, aSubsessionContext->iLanguage);
-
-            GetAppPropertiesInfoL(*aApplicationRegistration,appUid, aSubsessionContext->iLanguage); 
+            TUid appUid = aSubsessionContext->iAppUids[aSubsessionContext->iAppRegIndex];
+                
+            //Populate the Application Registration Info
+            if(GetApplicationRegistrationInfoL(*aApplicationRegistration,appUid))
+                {
+                //Populate File ownership info           
+                GetFileOwnershipInfoL(*aApplicationRegistration,appUid);
+                   
+                //Populate service info
+                GetServiceInfoL(*aApplicationRegistration, appUid, aSubsessionContext->iLanguage);
+                
+                //Populate localizable appinfo including caption and icon info 
+                //and view data and its caption and icon info.            
+                GetLocalizableAppInfoL(*aApplicationRegistration,appUid, aSubsessionContext->iLanguage);
+                
+                GetAppRegOpaqueDataL(*aApplicationRegistration,appUid, aSubsessionContext->iLanguage);
+    
+                GetAppPropertiesInfoL(*aApplicationRegistration,appUid, aSubsessionContext->iLanguage); 
+                dataFound = ETrue;
+                }
+            else
+                {
+                DeleteObjectZ(aApplicationRegistration);
+                }
+                        
+            //Incrementing the index
+            aSubsessionContext->iAppRegIndex++;
+                        
+            if(dataFound)
+                {
+                WriteObjectSizeL(aMessage, 1, aApplicationRegistration);
+                break;
+                }
             }
         else
             {
+            DEBUG_PRINTF(_L8("Reached the end of the view."));
+            WriteIntValueL(aMessage, 1, 0);                
             DeleteObjectZ(aApplicationRegistration);
+            break;
             }
-        
-        //Incrementing the index
-        aSubsessionContext->iAppRegIndex++;
-        WriteObjectSizeL(aMessage, 1, aApplicationRegistration);  
-        }
-    else
-        {
-        DEBUG_PRINTF(_L8("Reached the end of the view."));
-        WriteIntValueL(aMessage, 1, 0);                
-        DeleteObjectZ(aApplicationRegistration);
         }
     }
 
--- a/installationservices/swcomponentregistry/source/server/scrsession.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swcomponentregistry/source/server/scrsession.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -400,12 +400,7 @@
 			if(aServer.IsTransactionInProgress())
 				{// A new transaction cannot be started if there is another in progress
 				User::Leave(KErrScrWriteOperationInProgress);
-				}
-			if(aServer.SubsessionCount() && !aServer.IsTheOnlySubsessionOwner(this))
-				{// If there is a subsession owned by another session, it is not allowed to start a new transaction.
-				 // Beacuse it is also not allowed to create a subsession if a transaction owned by another session is in progress.
-				User::Leave(KErrScrReadOperationInProgress);
-				}
+				}			
 			break;
 			}
 		case ERollbackTransaction:
@@ -437,8 +432,7 @@
 		case EAddComponentDependency:
 		case EDeleteComponentDependency:
 		case ESetIsComponentPresent:
-			{ 
-			ApplySubsessionConstraintL(aServer);
+			{ 			
 			// These mutating operations consist of a single mutating database statement.
 			// So, no need to create an implicit transaction
 			TBool createImplicitTransaction = EFalse; 
@@ -455,8 +449,7 @@
 		case EAddApplicationEntry:
 		case EDeleteApplicationEntries:
 		case EDeleteApplicationEntry:
-			{
-			ApplySubsessionConstraintL(aServer);
+			{			
 			// These mutating operations consist of two or more mutating database statements.
 			// Therefore, an implicit transaction is begun if an explicit one doesn't exist.
 			TBool createImplicitTransaction = ETrue; 
@@ -486,19 +479,29 @@
 	@return					New, initialized instance of CScrSubsession, ownership is transferred.
  */
 	{
+
 	TScrSessionFunction f = static_cast<TScrSessionFunction>(aFunction);
-	CScrServer *server = static_cast<CScrServer*>(&iServer);
-	
-	if(server->IsTransactionInProgress() && !server->IsTransactionOwner(this)) 
-		{
-		DEBUG_PRINTF(_L8("Transaction from another session is in progress. Subsession cannot be created!"));
-		User::Leave(KErrScrWriteOperationInProgress);
-		}
-	
+    CScrServer *server = static_cast<CScrServer*>(&iServer);
+    
 	switch(f)
 		{
+	    // Allow read operation even if another transaction is in progress for these views.
 		case ESubSessCreateComponentsView:
 			return CComponentViewSubsession::NewL(*this);
+        case ESubSessCreateAppRegistryView:
+            return CAppRegistrySubsession::NewL(*this);
+		}
+		
+	 // A read operation is disallowed for the following views incase a transaction from another session 
+	 // is already in progress. 
+    if(server->IsTransactionInProgress() && !server->IsTransactionOwner(this)) 
+        {
+        DEBUG_PRINTF(_L8("Transaction from another session is in progress. Subsession cannot be created!"));
+        User::Leave(KErrScrWriteOperationInProgress);
+        }   
+    
+	switch(f)
+	    {  
 		case ESubSessCreateFileList:
 			return CFileListSubsession::NewL(*this);
 		case ESubSessCreateAppInfoView:
@@ -507,8 +510,6 @@
 			return CApplicationRegInfoSubsession::NewL(*this);
 		case ESubSessCreateRegInfoForApp:
 		    return CRegInfoForApplicationSubsession::NewL(*this);
-		case ESubSessCreateAppRegistryView:
-		    return CAppRegistrySubsession::NewL(*this);
 		default:
 			User::Leave(KErrNotSupported);
 			/*lint -unreachable */
Binary file installationservices/swcomponentregistry/test/testdb/scr.db has changed
--- a/installationservices/swcomponentregistry/test/tscr/scripts/tscr.ini	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swcomponentregistry/test/tscr/scripts/tscr.ini	Thu Jul 22 16:35:01 2010 +0100
@@ -3147,6 +3147,8 @@
 [add_localized_software_type_with_missing_mime]
 OperationType=LocalizedMissingMime
 
+[add_multiple_sid_with_launcher_executable]
+OperationType=MultipleSidAndLauncherExecutable
 
 // SEC-SCR-API-0064
 [drives_management_register_files]
--- a/installationservices/swcomponentregistry/test/tscr/scripts/tscr.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swcomponentregistry/test/tscr/scripts/tscr.script	Thu Jul 22 16:35:01 2010 +0100
@@ -22,3 +22,4 @@
 RUN_SCRIPT z:\tusif\tscr\tscr_versioning.script
 RUN_SCRIPT z:\tusif\tscr\tscr_appreginfo.script
 RUN_SCRIPT z:\tusif\tscr\tscrapparc.script
+
--- a/installationservices/swcomponentregistry/test/tscr/scripts/tscr_api.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swcomponentregistry/test/tscr/scripts/tscr_api.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 //
-// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -538,7 +538,7 @@
 START_TESTCASE API-SEC-SCR-API-0031
 
 // First, try to create a reading sub-session while a transaction owned by another session is in progress
-RUN_TEST_STEP !Result=-10320 100 tscr SCRCreateTransaction z:\tusif\tscr\tscr.ini begin_before_subsession
+RUN_TEST_STEP 100 tscr SCRCreateTransaction z:\tusif\tscr\tscr.ini begin_before_subsession
 // Then, try to create a reading sub-session while a transaction owned by the same session is in progress
 // Also, try creating a transaction while a sub-session is in progress (opposite order)
 RUN_TEST_STEP 100 tscr SCRCreateTransaction z:\tusif\tscr\tscr.ini open_reading_in_same_session
@@ -552,9 +552,9 @@
 START_TESTCASE API-SEC-SCR-API-0032
 
 // First, try to begin a transaction while a reading sub-session created in another session is in progress
-RUN_TEST_STEP !Result=-10321 100 tscr SCRCreateTransaction z:\tusif\tscr\tscr.ini begin_after_subsession
+RUN_TEST_STEP 100 tscr SCRCreateTransaction z:\tusif\tscr\tscr.ini begin_after_subsession
 // Try doing a mutating operation while a subsession is in progress
-RUN_TEST_STEP !Result=-10321 100 tscr SCRCreateTransaction z:\tusif\tscr\tscr.ini mutating_operation_with_subsession
+RUN_TEST_STEP 100 tscr SCRCreateTransaction z:\tusif\tscr\tscr.ini mutating_operation_with_subsession
 // Then, try to begin a transaction while a reading sub-session created in the same session is in progress
 RUN_TEST_STEP 100 tscr SCRCreateTransaction z:\tusif\tscr\tscr.ini begin_after_subsession_in_same_session
 
@@ -1161,7 +1161,8 @@
 RUN_TEST_STEP 100 tscr SCRAddSoftwareType z:\tusif\tscr\tscr.ini add_localized_software_type_with_missing_name
 RUN_TEST_STEP 100 tscr SCRAddSoftwareType z:\tusif\tscr\tscr.ini add_localized_software_type_with_extra_mime
 RUN_TEST_STEP 100 tscr SCRAddSoftwareType z:\tusif\tscr\tscr.ini add_localized_software_type_with_missing_mime
-
+// Add multiple sid with launcher executable
+RUN_TEST_STEP 100 tscr SCRAddSoftwareType z:\tusif\tscr\tscr.ini add_multiple_sid_with_launcher_executable
 END_TESTCASE API-SEC-SCR-API-0063
 
 
--- a/installationservices/swcomponentregistry/test/tscr/scripts/tscr_performance.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swcomponentregistry/test/tscr/scripts/tscr_performance.script	Thu Jul 22 16:35:01 2010 +0100
@@ -46,3 +46,5 @@
 RUN_TEST_STEP 100 tscr SCRCopyDbFile z:\tusif\tscr\tscr.ini scr_restore_db
 RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini backup_file 
 
+// Run scr performance with app registration info
+RUN_SCRIPT z:\tusif\tscr\tscr_app_performance_cases.script
--- a/installationservices/swcomponentregistry/test/tscr/source/pluginmanagementsteps.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swcomponentregistry/test/tscr/source/pluginmanagementsteps.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -47,6 +47,7 @@
 	_LIT(KLocalizedSwTypeMissingName, "LocalizedWithMissingName");
 	_LIT(KLocalizedSwTypeExtraMime, "LocalizedExtraMime");
 	_LIT(KLocalizedSwTypeMissingMime, "LocalizedMissingMime");
+	_LIT(KMultipleSidAndLauncherExecutable, "MultipleSidAndLauncherExecutable");
 	
 	RScrAccessor::TAccessorOperationResult opResult = RScrAccessor::EOpSucessful;
 	
@@ -87,6 +88,10 @@
 		{
 		iScrAccessor.AddSoftwareTypeL(RScrAccessor::EAddLocalizedSoftwareTypeWithMissingMime, opResult, iTimeMeasuredExternally);
 		}
+	else if(KMultipleSidAndLauncherExecutable() == operationType)
+	    {
+	    iScrAccessor.AddSoftwareTypeL(RScrAccessor::EAddMultipleSidWithLauncherExecutable, opResult, iTimeMeasuredExternally);
+	    }
 	else
 		{
 		ERR_PRINTF2(_L("The operation type (%S) couldn't be recognised!"), &operationType);
--- a/installationservices/swcomponentregistry/test/tscr/source/subsessionsteps.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swcomponentregistry/test/tscr/source/subsessionsteps.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -388,6 +388,8 @@
     // Check if we need to verify the returned components
     // Performance tests don't need verification.
     TBool isVerification = EFalse;
+    TInt noOfEntriesMatched = 0;
+    TInt totalExpectedEntriesCount = aExpectedEntries.Count();
     GetBoolFromConfig(ConfigSection(), _L("IsVerification"), isVerification);
     while (1)
             {
@@ -396,7 +398,7 @@
             TInt returnedAppRegInfoCount = appRegInfoSet.Count(); 
             if (returnedAppRegInfoCount <= 0)
                 {
-                INFO_PRINTF2(_L("May be negative case... no entries found ...Entries count read is %d "),returnedAppRegInfoCount);
+                INFO_PRINTF2(_L("May be negative case... no entries found ...Entries count read is %d "),returnedAppRegInfoCount);                
 				appRegInfoSet.Close();
                 break;
                 }
@@ -418,28 +420,20 @@
                     
             for (TInt i = 0; i < returnedAppRegInfoCount; ++i)
                 {
-                if (!VerifyMatchingL(appRegInfoSet[i], aExpectedEntries))
-                   {
-                   
-                   SetTestStepResult(EFail);
-                   ERR_PRINTF2(_L("The API returned an unexpected entry with id 0x%x "), appRegInfoSet[i]->Uid());
-                   TAppRegInfo* tp=NULL;
-                   for (TInt i = 0; i<returnedAppRegInfoCount; i++ )
-                       {
-                       tp=appRegInfoSet[i];
-                       delete tp;
-                       }
-                   appRegInfoSet.Close();
-                   return;
-                   }
-                }
-                                TAppRegInfo* tp=NULL;
-                               for (TInt i = 0; i<returnedAppRegInfoCount; i++ )
-                                   {
-                               tp=appRegInfoSet[i];
-                               delete tp;
-                                   }
-            appRegInfoSet.Close();
+                if (VerifyMatchingL(appRegInfoSet[i], aExpectedEntries))                    
+                    {                                          
+                    ++noOfEntriesMatched;
+                    }
+                }            
+            TAppRegInfo* tp=NULL;
+            for(TInt i = 0; i<returnedAppRegInfoCount; ++i)
+               {
+               tp=appRegInfoSet[i];
+               delete tp;
+               }
+            appRegInfoSet.Close();     
+            if(noOfEntriesMatched == totalExpectedEntriesCount)
+                break;
             }
         
     VerifyNonReturnedEntriesL(aExpectedEntries); 
@@ -490,8 +484,8 @@
 	if(appinfoFilter)
 	    delete appinfoFilter;
 
-	TRAPD(err1,TestSessionL(noOfEntries, subSession, expectedAppRegEntries));
-	
+    TRAPD(err1,TestSessionL(noOfEntries, subSession, expectedAppRegEntries));
+
 	TInt count = expectedAppRegEntries.Count();
 	TAppRegInfo* tp=NULL;
 	for (TInt i = 0; i<count; i++ )
--- a/installationservices/swcomponentregistry/test/tscr/source/transactionmanagementsteps.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swcomponentregistry/test/tscr/source/transactionmanagementsteps.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -164,7 +164,7 @@
 		OpenSessionLC(session2);
 		OpenSubsessionLC(session1, subsession);
 		CreateTransactionL(session2);
-		CleanupStack::PopAndDestroy(3, &subsession);
+		CleanupStack::PopAndDestroy(3, &session1);
 		}
 	
 	TBool isBeginTransactionInTheSameSession(EFalse);
@@ -174,7 +174,7 @@
 		OpenSessionLC(session1);
 		OpenSubsessionLC(session1, subsession);
 		CreateTransactionL(session1);
-		CleanupStack::PopAndDestroy(2, &subsession);
+		CleanupStack::PopAndDestroy(2, &session1);
 		}
 		
 	TBool isBeginAfterAnotherBegin(EFalse);
--- a/installationservices/swcomponentregistry/test/tscraccessor/inc/tscraccessor_client.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swcomponentregistry/test/tscraccessor/inc/tscraccessor_client.h	Thu Jul 22 16:35:01 2010 +0100
@@ -43,6 +43,7 @@
 		EAddLocalizedSoftwareTypeWithMissingName,
 		EAddLocalizedSoftwareTypeWithExtraMime,
 		EAddLocalizedSoftwareTypeWithMissingMime,
+		EAddMultipleSidWithLauncherExecutable
 		};
 	
 	enum TAccessorOperationResult
--- a/installationservices/swcomponentregistry/test/tscraccessor/source/tscraccessor_server_session.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swcomponentregistry/test/tscraccessor/source/tscraccessor_server_session.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -31,7 +31,7 @@
 #endif //SYMBIAN_ENABLE_SPLIT_HEADERS
 #include <scs/cleanuputils.h>
 #include <usif/usiferror.h>
-
+#include <usif/scr/screntries_platform.h>
 using namespace Usif;
 
 /////////////////////// Utility functions //////////////////////////////
@@ -167,7 +167,7 @@
 	CleanupStack::PopAndDestroy(&buf);
 	}
 
-TInt AddSoftwareTypeL(RSoftwareComponentRegistry& aScrSession, const TDesC& aUniqueSwTypeName, TUid aSifPluginUid, TSecureId aInstallerSid, TSecureId aExecutionLayerSid, const TDesC& aBaseMimeTypeName, TInt aMimeTypeNum, const TDesC& aBaseSwTypeName, TInt aSwTypesNum, RScrAccessor::TAccessorOperationResult& aOpResult)
+TInt AddSoftwareTypeL(RSoftwareComponentRegistry& aScrSession, const TDesC& aUniqueSwTypeName, TUid aSifPluginUid, RArray<TCustomAccessInfo> aInstallerSids, const TDesC& aBaseMimeTypeName, TInt aMimeTypeNum, const TDesC& aBaseSwTypeName, TInt aSwTypesNum, const TDesC& aLauncherExecutable, RScrAccessor::TAccessorOperationResult& aOpResult)
 	{
 	RPointerArray<HBufC> mimeTypesArray;
 	CleanupResetAndDestroyPushL(mimeTypesArray);
@@ -186,9 +186,33 @@
 	else
 		mimeType2BChecked = KNullDesC().AllocLC();
 	
-	TRAPD(err, aScrSession.AddSoftwareTypeL(aUniqueSwTypeName, aSifPluginUid, aInstallerSid, aExecutionLayerSid, mimeTypesArray, plocalizedSwNames));
+	Usif::CSoftwareTypeRegInfo* swType = Usif::CSoftwareTypeRegInfo::NewL(aUniqueSwTypeName);
+	CleanupStack::PushL(swType);
+	swType->SetSifPluginUid(aSifPluginUid);
+	for(TInt i=0;i<aInstallerSids.Count(); ++i)
+		{
+		swType->SetCustomAccessL(aInstallerSids[i]);
+		}
+	if(aMimeTypeNum)
+	    {
+	    for(TInt i=0;i<mimeTypesArray.Count(); ++i)
+	        {
+	        swType->SetMimeTypeL(mimeTypesArray[i]->Des());
+	        }
+        }
+	
+	swType->SetLauncherExecutableL(aLauncherExecutable);
+	if(plocalizedSwNames)
+	    {
+	    for(TInt i=0;i<plocalizedSwNames->Count(); ++i)
+	        {
+	        swType->SetLocalizedSoftwareTypeNameL(plocalizedSwNames->operator [](i)->Locale(), plocalizedSwNames->operator [](i)->NameL());
+	        }
+	    }
+	
+	TRAPD(err, aScrSession.AddSoftwareTypeL(*swType));
 	VerifySoftwareTypeAdditionL(err, aOpResult, aScrSession, *mimeType2BChecked, aSifPluginUid);
-	CleanupStack::PopAndDestroy(3, &mimeTypesArray); // mimeTypesArray, localizedSwNames, mimeType2BChecked
+	CleanupStack::PopAndDestroy(4, &mimeTypesArray); // mimeTypesArray, localizedSwNames, mimeType2BChecked
 	return err;
 	}
 
@@ -217,7 +241,12 @@
 			RScrAccessor::TAccessorOperationType opType = static_cast<RScrAccessor::TAccessorOperationType>(aMessage.Int0());
 			
 			TUid localizedSifPluginUid = {0xA01B7222};
-			_LIT_SECURE_ID(localizedInstallerSid, 0x10285BC9);					
+			RArray<TCustomAccessInfo> locSidArray;
+			CleanupClosePushL(locSidArray);
+			               
+			TCustomAccessInfo id1(TSecureId(0x10285BC9), static_cast<TAccessMode>(1));
+			locSidArray.AppendL(id1);
+			                    
 			_LIT(KMimeTypeBaseNameLocalized, "test_mimetype_localizedinstaller");
 			_LIT(KSwTypeBaseLocalizableName, "test_localizedinstaller_name");
 			_LIT(KSwTypeUniqueNameLocalized, "test_localizedinstaller_uniquename");
@@ -227,67 +256,100 @@
 				case RScrAccessor::EAddNonLocalizedSoftwareType:
 					{	
 					TUid sifPluginUid = {0xA01B7211};
-					_LIT_SECURE_ID(installerSid, 0x10285BC9);
-					_LIT_SECURE_ID(executionLayerSid, 0xAAEEDD11);
-					
+			
+					RArray<TCustomAccessInfo> sidArray;
+					CleanupClosePushL(sidArray);
+					    
+					TCustomAccessInfo id1(TSecureId(0x10285BC9), static_cast<TAccessMode>(1));
+					TCustomAccessInfo id2(TSecureId(0xAAEEDD11), static_cast<TAccessMode>(1));
+					sidArray.AppendL(id1);
+					sidArray.AppendL(id2);
+					    
 					_LIT(KMimeTypeBaseName, "test_mimetype_nonlocalizedinstaller");
 					_LIT(KSwTypeUniqueName, "test_nonlocalizedinstaller_uniquename");
 										
-					err = AddSoftwareTypeL(Server().ScrSession(), KSwTypeUniqueName, sifPluginUid, installerSid, executionLayerSid, KMimeTypeBaseName, 2, KNullDesC, 0, opResult);
+					err = AddSoftwareTypeL(Server().ScrSession(), KSwTypeUniqueName, sifPluginUid, sidArray,  KMimeTypeBaseName, 2, KNullDesC, 0, KNullDesC, opResult);
+					CleanupStack::PopAndDestroy(&sidArray);
 					break;
 					}
 				case RScrAccessor::EAddLocalizedSoftwareType:
 					{
-					err = AddSoftwareTypeL(Server().ScrSession(), KSwTypeUniqueNameLocalized, localizedSifPluginUid, localizedInstallerSid, localizedInstallerSid, KMimeTypeBaseNameLocalized, 2, KSwTypeBaseLocalizableName, 2, opResult);
+					err = AddSoftwareTypeL(Server().ScrSession(), KSwTypeUniqueNameLocalized, localizedSifPluginUid, locSidArray, KMimeTypeBaseNameLocalized, 2, KSwTypeBaseLocalizableName, 2, KNullDesC, opResult);
 					break;
 					}
 				case RScrAccessor::EAddSofwtareTypeWithoutMimeTypes:
 					{
 					TUid sifPluginUid = {0xA01B7333};
-					_LIT_SECURE_ID(installerSid, 0x10285BC9);
-										
+					RArray<TCustomAccessInfo> sidArray;
+					CleanupClosePushL(sidArray);
+					                    
+					TCustomAccessInfo id1(TSecureId(0x10285BC9), static_cast<TAccessMode>(1));
+					sidArray.AppendL(id1);	
 					_LIT(KSwTypeUniqueName, "test_nomimeinstaller_uniquename");
 					
-					err = AddSoftwareTypeL(Server().ScrSession(), KSwTypeUniqueName, sifPluginUid, installerSid, installerSid, KNullDesC, 0, KNullDesC, 0, opResult);
+					err = AddSoftwareTypeL(Server().ScrSession(), KSwTypeUniqueName, sifPluginUid, sidArray, KNullDesC, 0, KNullDesC, 0, KNullDesC, opResult);
+					CleanupStack::PopAndDestroy(&sidArray);
 					break;
 					} 
 				case RScrAccessor::EAddLocalizedSoftwareTypeWithDifferentPluginUid:
 					{
 					TUid localizedDifferentSifPluginUid = {0xCC1B7333};
-					err = AddSoftwareTypeL(Server().ScrSession(), KSwTypeUniqueNameLocalized, localizedDifferentSifPluginUid, localizedInstallerSid, localizedInstallerSid, KMimeTypeBaseNameLocalized, 2, KSwTypeBaseLocalizableName, 2, opResult);
+					err = AddSoftwareTypeL(Server().ScrSession(), KSwTypeUniqueNameLocalized, localizedDifferentSifPluginUid, locSidArray, KMimeTypeBaseNameLocalized, 2, KSwTypeBaseLocalizableName, 2, KNullDesC, opResult);
 					if(KErrAlreadyExists == err)
 						err = KErrNone; // The expected result is KErrAlreadyExists. So return no error to the test client.
 					break;
 					}
 				case RScrAccessor::EAddLocalizedSoftwareTypeWithExtraName:
 					{
-					err = AddSoftwareTypeL(Server().ScrSession(), KSwTypeUniqueNameLocalized, localizedSifPluginUid, localizedInstallerSid, localizedInstallerSid, KMimeTypeBaseNameLocalized, 2, KSwTypeBaseLocalizableName, 3, opResult);
+					err = AddSoftwareTypeL(Server().ScrSession(), KSwTypeUniqueNameLocalized, localizedSifPluginUid, locSidArray, KMimeTypeBaseNameLocalized, 2, KSwTypeBaseLocalizableName, 3, KNullDesC, opResult);
 					if(KErrAlreadyExists == err)
 						err = KErrNone; // The expected result is KErrAlreadyExists. So return no error to the test client.
 					break;
 					}
 				case RScrAccessor::EAddLocalizedSoftwareTypeWithMissingName:
 					{
-					err = AddSoftwareTypeL(Server().ScrSession(), KSwTypeUniqueNameLocalized, localizedSifPluginUid, localizedInstallerSid, localizedInstallerSid, KMimeTypeBaseNameLocalized, 2, KSwTypeBaseLocalizableName, 1, opResult);
+					err = AddSoftwareTypeL(Server().ScrSession(), KSwTypeUniqueNameLocalized, localizedSifPluginUid, locSidArray, KMimeTypeBaseNameLocalized, 2, KSwTypeBaseLocalizableName, 1, KNullDesC, opResult);
 					if(KErrAlreadyExists == err)
 						err = KErrNone; // The expected result is KErrAlreadyExists. So return no error to the test client.
 					break;
 					}
 				case RScrAccessor::EAddLocalizedSoftwareTypeWithExtraMime:
 					{
-					err = AddSoftwareTypeL(Server().ScrSession(), KSwTypeUniqueNameLocalized, localizedSifPluginUid, localizedInstallerSid, localizedInstallerSid, KMimeTypeBaseNameLocalized, 3, KSwTypeBaseLocalizableName, 2, opResult);
+					err = AddSoftwareTypeL(Server().ScrSession(), KSwTypeUniqueNameLocalized, localizedSifPluginUid, locSidArray, KMimeTypeBaseNameLocalized, 3, KSwTypeBaseLocalizableName, 2, KNullDesC, opResult);
 					if(KErrAlreadyExists == err)
 						err = KErrNone; // The expected result is KErrAlreadyExists. So return no error to the test client.
 					break;
 					}
 				case RScrAccessor::EAddLocalizedSoftwareTypeWithMissingMime:
 					{
-					err = AddSoftwareTypeL(Server().ScrSession(), KSwTypeUniqueNameLocalized, localizedSifPluginUid, localizedInstallerSid, localizedInstallerSid, KMimeTypeBaseNameLocalized, 1, KSwTypeBaseLocalizableName, 2, opResult);
+					err = AddSoftwareTypeL(Server().ScrSession(), KSwTypeUniqueNameLocalized, localizedSifPluginUid, locSidArray, KMimeTypeBaseNameLocalized, 1, KSwTypeBaseLocalizableName, 2, KNullDesC, opResult);
 					if(KErrAlreadyExists == err)
 						err = KErrNone; // The expected result is KErrAlreadyExists. So return no error to the test client.
 					break;
-					}				
+					}
+				case RScrAccessor::EAddMultipleSidWithLauncherExecutable:
+				    {
+				    TUid sifPluginUid = {0xA01B7212};
+				    _LIT(KSwTypeUniqueName, "test_uniquename");
+				    _LIT(KMimeTypeBaseName, "test_mimetype");
+				    _LIT(KLauncherExecutable, "LauncherExecutable");
+				    RArray<TCustomAccessInfo> sidArray;
+				    CleanupClosePushL(sidArray);
+				                            
+				    TCustomAccessInfo id1(TSecureId(0x10285BC9), static_cast<TAccessMode>(1));
+				    TCustomAccessInfo id2(TSecureId(0xAAEEDD11), static_cast<TAccessMode>(1));
+				    TCustomAccessInfo id3(TSecureId(0xAAEEEE11), static_cast<TAccessMode>(1));
+
+				    sidArray.AppendL(id1);
+				    sidArray.AppendL(id2);
+				    sidArray.AppendL(id3);
+				    
+				    err = AddSoftwareTypeL(Server().ScrSession(), KSwTypeUniqueName, sifPluginUid, sidArray, KMimeTypeBaseName, 1, KNullDesC, 0, KLauncherExecutable, opResult);
+				    CleanupStack::PopAndDestroy(&sidArray);
+				    break;
+				    }
 				} // switch(opType)
+			CleanupStack::PopAndDestroy(&locSidArray);
 			actualTestDuration = StopTimer(timer);
 			break;
 			}
--- a/installationservices/swcomponentregistry/test/tscrapparc/source/appreginfoapparcsteps.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swcomponentregistry/test/tscrapparc/source/appreginfoapparcsteps.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1093,6 +1093,10 @@
         isFinish = ETrue;
         }
         
+    if(isFinish)
+        {
+        break;
+        }
     
     if (count != actualAppRegDataCount)
         {
@@ -1118,7 +1122,7 @@
       index++;
         }
     
-    if(isFinish || isError)
+    if(isError)
         {
         break;
         }    
--- a/installationservices/swi/bwins/sislauncherclientU.DEF	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/bwins/sislauncherclientU.DEF	Thu Jul 22 16:35:01 2010 +0100
@@ -10,7 +10,7 @@
 	?StartDocumentL@RSisLauncherSession@Swi@@QAEXABVTDesC16@@H@Z @ 9 NONAME ; void Swi::RSisLauncherSession::StartDocumentL(class TDesC16 const &, int)
 	?NotifyNewAppsL@RSisLauncherSession@Swi@@QAEXABV?$RPointerArray@VTDesC16@@@@@Z @ 10 NONAME ; void Swi::RSisLauncherSession::NotifyNewAppsL(class RPointerArray<class TDesC16> const &)
 	?CheckApplicationInUseL@RSisLauncherSession@Swi@@QAEXVTUid@@@Z @ 11 NONAME ABSENT ; void Swi::RSisLauncherSession::CheckApplicationInUseL(class TUid)
-	?ParseSwTypeRegFileL@RSisLauncherSession@Swi@@QAEXAAVRFile@@AAV?$RPointerArray@VCSoftwareTypeRegInfo@Swi@@@@@Z @ 12 NONAME ; void Swi::RSisLauncherSession::ParseSwTypeRegFileL(class RFile &, class RPointerArray<class Swi::CSoftwareTypeRegInfo> &)
+	?ParseSwTypeRegFileL@RSisLauncherSession@Swi@@QAEXAAVRFile@@AAV?$RPointerArray@VCSoftwareTypeRegInfo@Usif@@@@@Z @ 12 NONAME ; void Swi::RSisLauncherSession::ParseSwTypeRegFileL(class RFile &, class RPointerArray<class USif::CSoftwareTypeRegInfo> &)
 	?UnregisterSifLauncherMimeTypesL@RSisLauncherSession@Swi@@QAEXABV?$RPointerArray@VHBufC8@@@@@Z @ 13 NONAME ; void Swi::RSisLauncherSession::UnregisterSifLauncherMimeTypesL(class RPointerArray<class HBufC8> const &)
 	?RegisterSifLauncherMimeTypesL@RSisLauncherSession@Swi@@QAEXABV?$RPointerArray@VHBufC8@@@@@Z @ 14 NONAME ; void Swi::RSisLauncherSession::RegisterSifLauncherMimeTypesL(class RPointerArray<class HBufC8> const &)
 	?RunAfterEcomNotificationL@RSisLauncherSession@Swi@@QAEXABV?$RPointerArray@VCSisRegistryFileDescription@Swi@@@@@Z @ 15 NONAME ; void Swi::RSisLauncherSession::RunAfterEcomNotificationL(class RPointerArray<class Swi::CSisRegistryFileDescription> const &)
--- a/installationservices/swi/bwins/sisregistryclient_v2U.def	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/bwins/sisregistryclient_v2U.def	Thu Jul 22 16:35:01 2010 +0100
@@ -182,8 +182,8 @@
 	?RollbackTransactionL@RSisRegistryWritableSession@Swi@@QAEXXZ @ 181 NONAME ; void Swi::RSisRegistryWritableSession::RollbackTransactionL(void)
 	?SerializedSize@CSisRegistryFileDescription@Swi@@QBEKXZ @ 182 NONAME ; unsigned long Swi::CSisRegistryFileDescription::SerializedSize(void) const
 	?IsFileRegisteredL@RSisRegistrySession@Swi@@QAEHABVTDesC16@@@Z @ 183 NONAME ; int Swi::RSisRegistrySession::IsFileRegisteredL(class TDesC16 const &)
-	?UpdateEntryL@RSisRegistryWritableSession@Swi@@QAEXABVCApplication@2@ABVTDesC8@@ABV?$RPointerArray@VCSoftwareTypeRegInfo@Swi@@@@_J@Z @ 184 NONAME ; void Swi::RSisRegistryWritableSession::UpdateEntryL(class Swi::CApplication const &, class TDesC8 const &, class RPointerArray<class Swi::CSoftwareTypeRegInfo> const &, long long)
-	?AddEntryL@RSisRegistryWritableSession@Swi@@QAEXABVCApplication@2@ABVTDesC8@@ABV?$RPointerArray@VCSoftwareTypeRegInfo@Swi@@@@_J@Z @ 185 NONAME ; void Swi::RSisRegistryWritableSession::AddEntryL(class Swi::CApplication const &, class TDesC8 const &, class RPointerArray<class Swi::CSoftwareTypeRegInfo> const &, long long)
+	?UpdateEntryL@RSisRegistryWritableSession@Swi@@QAEXABVCApplication@2@ABVTDesC8@@ABV?$RPointerArray@VCSoftwareTypeRegInfo@Usif@@@@_J@Z @ 184 NONAME ; void Swi::RSisRegistryWritableSession::UpdateEntryL(class Swi::CApplication const &, class TDesC8 const &, class RPointerArray<class Usif::CSoftwareTypeRegInfo> const &, long long)
+	?AddEntryL@RSisRegistryWritableSession@Swi@@QAEXABVCApplication@2@ABVTDesC8@@ABV?$RPointerArray@VCSoftwareTypeRegInfo@Usif@@@@_J@Z @ 185 NONAME ; void Swi::RSisRegistryWritableSession::AddEntryL(class Swi::CApplication const &, class TDesC8 const &, class RPointerArray<class Usif::CSoftwareTypeRegInfo> const &, long long)
 	?GetComponentIdForUidL@RSisRegistrySession@Swi@@QAEHABVTUid@@@Z @ 186 NONAME ; int Swi::RSisRegistrySession::GetComponentIdForUidL(class TUid const &)
 	?SetNameL@CSisRegistryPackage@Swi@@QAEXABVTDesC16@@@Z @ 187 NONAME ; void Swi::CSisRegistryPackage::SetNameL(class TDesC16 const &)
 	??0RSisRegistryHelper@Swi@@QAE@XZ @ 188 NONAME ABSENT ; Swi::RSisRegistryHelper::RSisRegistryHelper(void)
@@ -197,4 +197,5 @@
 	?GetAppUidsForComponentL@RSisRegistrySession@Swi@@QAEXAAHAAV?$RArray@VTUid@@@@@Z @ 196 NONAME ; void Swi::RSisRegistrySession::GetAppUidsForComponentL(int &, class RArray<class TUid> &)
 	?GetComponentIdForPackageL@RSisRegistrySession@Swi@@QBEHABVTDesC16@@0@Z @ 197 NONAME ; int Swi::RSisRegistrySession::GetComponentIdForPackageL(class TDesC16 const &, class TDesC16 const &) const
 	?AddEntryL@RSisRegistryWritableSession@Swi@@QAEXABVCApplicationRegistrationData@Usif@@ABVCSisRegistryPackage@2@@Z @ 198 NONAME ; void Swi::RSisRegistryWritableSession::AddEntryL(class Usif::CApplicationRegistrationData const &, class Swi::CSisRegistryPackage const &)
+	?SetComponentPresenceL@RSisRegistryWritableSession@Swi@@QAEXHH@Z @ 199 NONAME ; void Swi::RSisRegistryWritableSession::SetComponentPresenceL(int, int)
 
--- a/installationservices/swi/bwins/sisregistryclient_v2_legacyU.def	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/bwins/sisregistryclient_v2_legacyU.def	Thu Jul 22 16:35:01 2010 +0100
@@ -192,4 +192,10 @@
 	?GetEquivalentLanguagesL@RSisRegistryHelper@Swi@@QAEXW4TLanguage@@AAV?$RArray@W4TLanguage@@@@@Z @ 191 NONAME ; void Swi::RSisRegistryHelper::GetEquivalentLanguagesL(enum TLanguage, class RArray<enum TLanguage> &)
 	?GetMatchingSupportedLanguagesL@RSisRegistryWritableEntry@Swi@@QAEXAAV?$RArray@W4TLanguage@@@@@Z @ 192 NONAME ; void Swi::RSisRegistryWritableEntry::GetMatchingSupportedLanguagesL(class RArray<enum TLanguage> &)
 	?RegistryFilesL@RSisRegistryEntry@Swi@@QAEXAAV?$RPointerArray@VHBufC16@@@@@Z @ 193 NONAME ; void Swi::RSisRegistryEntry::RegistryFilesL(class RPointerArray<class HBufC16> &)
+	?GetComponentIdsForUidL@RSisRegistrySession@Swi@@QAEXAAVTUid@@AAV?$RArray@H@@@Z @ 194 NONAME ABSENT ; void Swi::RSisRegistrySession::GetComponentIdsForUidL(class TUid &, class RArray<int> &)
+	?UpdateEntryL@RSisRegistryWritableSession@Swi@@QAEXABVCApplication@2@ABVCApplicationRegistrationData@Usif@@ABVCSisRegistryPackage@2@@Z @ 195 NONAME ABSENT ; void Swi::RSisRegistryWritableSession::UpdateEntryL(class Swi::CApplication const &, class Usif::CApplicationRegistrationData const &, class Swi::CSisRegistryPackage const &)
+	?GetAppUidsForComponentL@RSisRegistrySession@Swi@@QAEXAAHAAV?$RArray@VTUid@@@@@Z @ 196 NONAME ABSENT ; void Swi::RSisRegistrySession::GetAppUidsForComponentL(int &, class RArray<class TUid> &)
+	?GetComponentIdForPackageL@RSisRegistrySession@Swi@@QBEHABVTDesC16@@0@Z @ 197 NONAME ABSENT ; int Swi::RSisRegistrySession::GetComponentIdForPackageL(class TDesC16 const &, class TDesC16 const &) const
+	?AddEntryL@RSisRegistryWritableSession@Swi@@QAEXABVCApplicationRegistrationData@Usif@@ABVCSisRegistryPackage@2@@Z @ 198 NONAME ABSENT ; void Swi::RSisRegistryWritableSession::AddEntryL(class Usif::CApplicationRegistrationData const &, class Swi::CSisRegistryPackage const &)
+	?SetComponentPresenceL@RSisRegistryWritableSession@Swi@@QAEXHH@Z @ 199 NONAME ABSENT ; void Swi::RSisRegistryWritableSession::SetComponentPresenceL(int, int)
 
--- a/installationservices/swi/bwins/swtypereginfou.def	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/bwins/swtypereginfou.def	Thu Jul 22 16:35:01 2010 +0100
@@ -1,19 +1,7 @@
 EXPORTS
-	?SetLocalizedSoftwareTypeNameL@CSoftwareTypeRegInfo@Swi@@QAEXW4TLanguage@@ABVTDesC16@@@Z @ 1 NONAME ; void Swi::CSoftwareTypeRegInfo::SetLocalizedSoftwareTypeNameL(enum TLanguage, class TDesC16 const &)
-	?UnserializeUniqueSwTypeNamesL@SoftwareTypeRegInfoUtils@Swi@@SAXABVTDesC16@@AAV?$RArray@VTPtrC16@@@@@Z @ 2 NONAME ; void Swi::SoftwareTypeRegInfoUtils::UnserializeUniqueSwTypeNamesL(class TDesC16 const &, class RArray<class TPtrC16> &)
-	??1CLocalizedSoftwareTypeName@Swi@@UAE@XZ @ 3 NONAME ; Swi::CLocalizedSoftwareTypeName::~CLocalizedSoftwareTypeName(void)
-	?ExternalizeL@CLocalizedSoftwareTypeName@Swi@@QBEXAAVRWriteStream@@@Z @ 4 NONAME ; void Swi::CLocalizedSoftwareTypeName::ExternalizeL(class RWriteStream &) const
-	?SerializeArrayL@SoftwareTypeRegInfoUtils@Swi@@SAXABV?$RPointerArray@VCSoftwareTypeRegInfo@Swi@@@@AAVRBuf8@@@Z @ 5 NONAME ; void Swi::SoftwareTypeRegInfoUtils::SerializeArrayL(class RPointerArray<class Swi::CSoftwareTypeRegInfo> const &, class RBuf8 &)
-	?NewL@CLocalizedSoftwareTypeName@Swi@@SAPAV12@AAVRReadStream@@@Z @ 6 NONAME ; class Swi::CLocalizedSoftwareTypeName * Swi::CLocalizedSoftwareTypeName::NewL(class RReadStream &)
-	?SerializeUniqueSwTypeNamesL@SoftwareTypeRegInfoUtils@Swi@@SAXABV?$RPointerArray@VCSoftwareTypeRegInfo@Swi@@@@AAVRBuf16@@@Z @ 7 NONAME ; void Swi::SoftwareTypeRegInfoUtils::SerializeUniqueSwTypeNamesL(class RPointerArray<class Swi::CSoftwareTypeRegInfo> const &, class RBuf16 &)
-	??1CSoftwareTypeRegInfo@Swi@@UAE@XZ @ 8 NONAME ; Swi::CSoftwareTypeRegInfo::~CSoftwareTypeRegInfo(void)
-	?UnserializeArrayL@SoftwareTypeRegInfoUtils@Swi@@SAXAAVRReadStream@@AAV?$RPointerArray@VCSoftwareTypeRegInfo@Swi@@@@@Z @ 9 NONAME ; void Swi::SoftwareTypeRegInfoUtils::UnserializeArrayL(class RReadStream &, class RPointerArray<class Swi::CSoftwareTypeRegInfo> &)
-	?NewL@CLocalizedSoftwareTypeName@Swi@@SAPAV12@ABVTDesC16@@W4TLanguage@@@Z @ 10 NONAME ; class Swi::CLocalizedSoftwareTypeName * Swi::CLocalizedSoftwareTypeName::NewL(class TDesC16 const &, enum TLanguage)
-	?NewL@CSoftwareTypeRegInfo@Swi@@SAPAV12@ABVTDesC16@@@Z @ 11 NONAME ; class Swi::CSoftwareTypeRegInfo * Swi::CSoftwareTypeRegInfo::NewL(class TDesC16 const &)
-	?NewL@CSoftwareTypeRegInfo@Swi@@SAPAV12@AAVRReadStream@@@Z @ 12 NONAME ; class Swi::CSoftwareTypeRegInfo * Swi::CSoftwareTypeRegInfo::NewL(class RReadStream &)
-	?ExtractMimeTypesL@SoftwareTypeRegInfoUtils@Swi@@SAXABV?$RPointerArray@VCSoftwareTypeRegInfo@Swi@@@@AAV?$RPointerArray@VHBufC8@@@@@Z @ 13 NONAME ; void Swi::SoftwareTypeRegInfoUtils::ExtractMimeTypesL(class RPointerArray<class Swi::CSoftwareTypeRegInfo> const &, class RPointerArray<class HBufC8> &)
-	?ExternalizeL@CSoftwareTypeRegInfo@Swi@@QBEXAAVRWriteStream@@@Z @ 14 NONAME ; void Swi::CSoftwareTypeRegInfo::ExternalizeL(class RWriteStream &) const
-	?NewLC@CLocalizedSoftwareTypeName@Swi@@SAPAV12@ABVTDesC16@@W4TLanguage@@@Z @ 15 NONAME ; class Swi::CLocalizedSoftwareTypeName * Swi::CLocalizedSoftwareTypeName::NewLC(class TDesC16 const &, enum TLanguage)
-	?SetMimeTypeL@CSoftwareTypeRegInfo@Swi@@QAEXABVTDesC16@@@Z @ 16 NONAME ; void Swi::CSoftwareTypeRegInfo::SetMimeTypeL(class TDesC16 const &)
-	?ExternalizedSize@CSoftwareTypeRegInfo@Swi@@QBEHXZ @ 17 NONAME ; int Swi::CSoftwareTypeRegInfo::ExternalizedSize(void) const
+	?UnserializeUniqueSwTypeNamesL@SoftwareTypeRegInfoUtils@Swi@@SAXABVTDesC16@@AAV?$RArray@VTPtrC16@@@@@Z @ 1 NONAME ; void Swi::SoftwareTypeRegInfoUtils::UnserializeUniqueSwTypeNamesL(class TDesC16 const &, class RArray<class TPtrC16> &)
+	?SerializeArrayL@SoftwareTypeRegInfoUtils@Swi@@SAXABV?$RPointerArray@VCSoftwareTypeRegInfo@Usif@@@@AAVRBuf8@@@Z @ 2 NONAME ; void Swi::SoftwareTypeRegInfoUtils::SerializeArrayL(class RPointerArray<class Usif::CSoftwareTypeRegInfo> const &, class RBuf8 &)
+	?ExtractMimeTypesL@SoftwareTypeRegInfoUtils@Swi@@SAXABV?$RPointerArray@VCSoftwareTypeRegInfo@Usif@@@@AAV?$RPointerArray@VHBufC8@@@@@Z @ 3 NONAME ; void Swi::SoftwareTypeRegInfoUtils::ExtractMimeTypesL(class RPointerArray<class Usif::CSoftwareTypeRegInfo> const &, class RPointerArray<class HBufC8> &)
+	?SerializeUniqueSwTypeNamesL@SoftwareTypeRegInfoUtils@Swi@@SAXABV?$RPointerArray@VCSoftwareTypeRegInfo@Usif@@@@AAVRBuf16@@@Z @ 4 NONAME ; void Swi::SoftwareTypeRegInfoUtils::SerializeUniqueSwTypeNamesL(class RPointerArray<class Usif::CSoftwareTypeRegInfo> const &, class RBuf16 &)
+	?UnserializeArrayL@SoftwareTypeRegInfoUtils@Swi@@SAXAAVRReadStream@@AAV?$RPointerArray@VCSoftwareTypeRegInfo@Usif@@@@@Z @ 5 NONAME ; void Swi::SoftwareTypeRegInfoUtils::UnserializeArrayL(class RReadStream &, class RPointerArray<class Usif::CSoftwareTypeRegInfo> &)
 
--- a/installationservices/swi/bwins/uissclientU.DEF	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/bwins/uissclientU.DEF	Thu Jul 22 16:35:01 2010 +0100
@@ -97,7 +97,7 @@
 	?UpdateProgressBarL@RUiHandler@Swi@@QAEXABVTAppInfo@2@H@Z @ 96 NONAME ; void Swi::RUiHandler::UpdateProgressBarL(class Swi::TAppInfo const &, int)
 	?NewL@CDisplayText@Swi@@SAPAV12@ABVTAppInfo@2@W4TFileTextOption@2@ABVTDesC8@@@Z @ 97 NONAME ; class Swi::CDisplayText * Swi::CDisplayText::NewL(class Swi::TAppInfo const &, enum Swi::TFileTextOption, class TDesC8 const &)
 	?NewLC@CDisplayText@Swi@@SAPAV12@ABVTAppInfo@2@W4TFileTextOption@2@ABVTDesC8@@@Z @ 98 NONAME ; class Swi::CDisplayText * Swi::CDisplayText::NewLC(class Swi::TAppInfo const &, enum Swi::TFileTextOption, class TDesC8 const &)
-	?UpdateProgressBarValueL@CProgressBarValuePublisher@Swi@@QAEXH@Z @ 99 NONAME ; void Swi::CProgressBarValuePublisher::UpdateProgressBarValueL(int)
+	?UpdateProgressBarValueL@CProgressBarValuePublisher@Swi@@QAEHH@Z @ 99 NONAME ; void Swi::CProgressBarValuePublisher::UpdateProgressBarValueL(int)
 	?SetFinalProgressBarValue@CProgressBarValuePublisher@Swi@@QAEXH@Z @ 100 NONAME ; void Swi::CProgressBarValuePublisher::SetFinalProgressBarValue(int)
 	?SetProgressBarValuePublisher@RUiHandler@Swi@@QAEXPAVCProgressBarValuePublisher@2@@Z @ 101 NONAME ; void Swi::RUiHandler::SetProgressBarValuePublisher(class Swi::CProgressBarValuePublisher *)
 	?NewL@CProgressBarValuePublisher@Swi@@SAPAV12@XZ @ 102 NONAME ; class Swi::CProgressBarValuePublisher * Swi::CProgressBarValuePublisher::NewL(void)
--- a/installationservices/swi/eabi/sislauncherclientU.DEF	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/eabi/sislauncherclientU.DEF	Thu Jul 22 16:35:01 2010 +0100
@@ -9,7 +9,7 @@
 	_ZN3Swi19RSisLauncherSession7ConnectEv @ 8 NONAME
 	_ZN3Swi19RSisLauncherSession9ShutdownLERK6RArrayI4TUidEi @ 9 NONAME
 	_ZN3Swi19RSisLauncherSession14NotifyNewAppsLERK13RPointerArrayI7TDesC16E @ 10 NONAME
-	_ZN3Swi19RSisLauncherSession19ParseSwTypeRegFileLER5RFileR13RPointerArrayINS_20CSoftwareTypeRegInfoEE @ 11 NONAME
+	_ZN3Swi19RSisLauncherSession19ParseSwTypeRegFileLER5RFileR13RPointerArrayIN4Usif20CSoftwareTypeRegInfoEE @ 11 NONAME
 	_ZN3Swi19RSisLauncherSession29RegisterSifLauncherMimeTypesLERK13RPointerArrayI6HBufC8E @ 12 NONAME
 	_ZN3Swi19RSisLauncherSession31UnregisterSifLauncherMimeTypesLERK13RPointerArrayI6HBufC8E @ 13 NONAME
 	_ZN3Swi19RSisLauncherSession25RunAfterEcomNotificationLERK13RPointerArrayINS_27CSisRegistryFileDescriptionEE @ 14 NONAME
--- a/installationservices/swi/eabi/sisregistryclient_v2U.def	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/eabi/sisregistryclient_v2U.def	Thu Jul 22 16:35:01 2010 +0100
@@ -204,8 +204,8 @@
 	_ZN3Swi27RSisRegistryWritableSession20RollbackTransactionLEv @ 203 NONAME
 	_ZNK3Swi27CSisRegistryFileDescription14SerializedSizeEv @ 204 NONAME
 	_ZN3Swi19RSisRegistrySession17IsFileRegisteredLERK7TDesC16 @ 205 NONAME
-	_ZN3Swi27RSisRegistryWritableSession12UpdateEntryLERKNS_12CApplicationERK6TDesC8RK13RPointerArrayINS_20CSoftwareTypeRegInfoEEx @ 206 NONAME
-	_ZN3Swi27RSisRegistryWritableSession9AddEntryLERKNS_12CApplicationERK6TDesC8RK13RPointerArrayINS_20CSoftwareTypeRegInfoEEx @ 207 NONAME
+	_ZN3Swi27RSisRegistryWritableSession12UpdateEntryLERKNS_12CApplicationERK6TDesC8RK13RPointerArrayIN4Usif20CSoftwareTypeRegInfoEEx @ 206 NONAME
+	_ZN3Swi27RSisRegistryWritableSession9AddEntryLERKNS_12CApplicationERK6TDesC8RK13RPointerArrayIN4Usif20CSoftwareTypeRegInfoEEx @ 207 NONAME
 	_ZN3Swi19RSisRegistrySession21GetComponentIdForUidLERK4TUid @ 208 NONAME
 	_ZN3Swi19CSisRegistryPackage8SetNameLERK7TDesC16 @ 209 NONAME
 	_ZN3Swi18RSisRegistryHelper23GetEquivalentLanguagesLE9TLanguageR6RArrayIS1_E @ 210 NONAME ABSENT
@@ -220,4 +220,5 @@
 	_ZN3Swi27RSisRegistryWritableSession12UpdateEntryLERKNS_12CApplicationERKN4Usif28CApplicationRegistrationDataERKNS_19CSisRegistryPackageE @ 219 NONAME
 	_ZN3Swi27RSisRegistryWritableSession9AddEntryLERKN4Usif28CApplicationRegistrationDataERKNS_19CSisRegistryPackageE @ 220 NONAME
 	_ZNK3Swi19RSisRegistrySession25GetComponentIdForPackageLERK7TDesC16S3_ @ 221 NONAME
+	_ZN3Swi27RSisRegistryWritableSession21SetComponentPresenceLEii @ 222 NONAME
 
--- a/installationservices/swi/eabi/sisregistryclient_v2_legacyU.def	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/eabi/sisregistryclient_v2_legacyU.def	Thu Jul 22 16:35:01 2010 +0100
@@ -215,4 +215,10 @@
 	_ZN3Swi18RSisRegistryHelperC2Ev @ 214 NONAME
 	_ZN3Swi25RSisRegistryWritableEntry30GetMatchingSupportedLanguagesLER6RArrayI9TLanguageE @ 215 NONAME
 	_ZN3Swi17RSisRegistryEntry14RegistryFilesLER13RPointerArrayI7HBufC16E @ 216 NONAME
+	_ZN3Swi19RSisRegistrySession22GetComponentIdsForUidLER4TUidR6RArrayIiE @ 217 NONAME ABSENT
+	_ZN3Swi19RSisRegistrySession23GetAppUidsForComponentLERiR6RArrayI4TUidE @ 218 NONAME ABSENT
+	_ZN3Swi27RSisRegistryWritableSession12UpdateEntryLERKNS_12CApplicationERKN4Usif28CApplicationRegistrationDataERKNS_19CSisRegistryPackageE @ 219 NONAME ABSENT
+	_ZN3Swi27RSisRegistryWritableSession9AddEntryLERKN4Usif28CApplicationRegistrationDataERKNS_19CSisRegistryPackageE @ 220 NONAME ABSENT
+	_ZNK3Swi19RSisRegistrySession25GetComponentIdForPackageLERK7TDesC16S3_ @ 221 NONAME ABSENT
+	_ZN3Swi27RSisRegistryWritableSession21SetComponentPresenceLEii @ 222 NONAME ABSENT
 
--- a/installationservices/swi/eabi/swtypereginfou.def	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/eabi/swtypereginfou.def	Thu Jul 22 16:35:01 2010 +0100
@@ -1,27 +1,7 @@
 EXPORTS
-	_ZN3Swi20CSoftwareTypeRegInfo12SetMimeTypeLERK7TDesC16 @ 1 NONAME
-	_ZN3Swi20CSoftwareTypeRegInfo29SetLocalizedSoftwareTypeNameLE9TLanguageRK7TDesC16 @ 2 NONAME
-	_ZN3Swi20CSoftwareTypeRegInfo4NewLER11RReadStream @ 3 NONAME
-	_ZN3Swi20CSoftwareTypeRegInfo4NewLERK7TDesC16 @ 4 NONAME
-	_ZN3Swi20CSoftwareTypeRegInfoD0Ev @ 5 NONAME
-	_ZN3Swi20CSoftwareTypeRegInfoD1Ev @ 6 NONAME
-	_ZN3Swi20CSoftwareTypeRegInfoD2Ev @ 7 NONAME
-	_ZN3Swi24SoftwareTypeRegInfoUtils15SerializeArrayLERK13RPointerArrayINS_20CSoftwareTypeRegInfoEER5RBuf8 @ 8 NONAME
-	_ZN3Swi24SoftwareTypeRegInfoUtils17ExtractMimeTypesLERK13RPointerArrayINS_20CSoftwareTypeRegInfoEERS1_I6HBufC8E @ 9 NONAME
-	_ZN3Swi24SoftwareTypeRegInfoUtils17UnserializeArrayLER11RReadStreamR13RPointerArrayINS_20CSoftwareTypeRegInfoEE @ 10 NONAME
-	_ZN3Swi24SoftwareTypeRegInfoUtils27SerializeUniqueSwTypeNamesLERK13RPointerArrayINS_20CSoftwareTypeRegInfoEER6RBuf16 @ 11 NONAME
-	_ZN3Swi24SoftwareTypeRegInfoUtils29UnserializeUniqueSwTypeNamesLERK7TDesC16R6RArrayI7TPtrC16E @ 12 NONAME
-	_ZN3Swi26CLocalizedSoftwareTypeName4NewLER11RReadStream @ 13 NONAME
-	_ZN3Swi26CLocalizedSoftwareTypeName4NewLERK7TDesC169TLanguage @ 14 NONAME
-	_ZN3Swi26CLocalizedSoftwareTypeName5NewLCERK7TDesC169TLanguage @ 15 NONAME
-	_ZN3Swi26CLocalizedSoftwareTypeNameD0Ev @ 16 NONAME
-	_ZN3Swi26CLocalizedSoftwareTypeNameD1Ev @ 17 NONAME
-	_ZN3Swi26CLocalizedSoftwareTypeNameD2Ev @ 18 NONAME
-	_ZNK3Swi20CSoftwareTypeRegInfo12ExternalizeLER12RWriteStream @ 19 NONAME
-	_ZNK3Swi20CSoftwareTypeRegInfo16ExternalizedSizeEv @ 20 NONAME
-	_ZNK3Swi26CLocalizedSoftwareTypeName12ExternalizeLER12RWriteStream @ 21 NONAME
-	_ZTIN3Swi20CSoftwareTypeRegInfoE @ 22 NONAME
-	_ZTIN3Swi26CLocalizedSoftwareTypeNameE @ 23 NONAME
-	_ZTVN3Swi20CSoftwareTypeRegInfoE @ 24 NONAME
-	_ZTVN3Swi26CLocalizedSoftwareTypeNameE @ 25 NONAME
+	_ZN3Swi24SoftwareTypeRegInfoUtils15SerializeArrayLERK13RPointerArrayIN4Usif20CSoftwareTypeRegInfoEER5RBuf8 @ 1 NONAME
+	_ZN3Swi24SoftwareTypeRegInfoUtils17ExtractMimeTypesLERK13RPointerArrayIN4Usif20CSoftwareTypeRegInfoEERS1_I6HBufC8E @ 2 NONAME
+	_ZN3Swi24SoftwareTypeRegInfoUtils17UnserializeArrayLER11RReadStreamR13RPointerArrayIN4Usif20CSoftwareTypeRegInfoEE @ 3 NONAME
+	_ZN3Swi24SoftwareTypeRegInfoUtils27SerializeUniqueSwTypeNamesLERK13RPointerArrayIN4Usif20CSoftwareTypeRegInfoEER6RBuf16 @ 4 NONAME
+	_ZN3Swi24SoftwareTypeRegInfoUtils29UnserializeUniqueSwTypeNamesLERK7TDesC16R6RArrayI7TPtrC16E @ 5 NONAME
 
--- a/installationservices/swi/group/bld.inf	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/group/bld.inf	Thu Jul 22 16:35:01 2010 +0100
@@ -61,6 +61,7 @@
 ../inc/swi/ipcutil.h 	  SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(swi/ipcutil.h)
 
 // ROMKIT include
+../inc/swidaemon.iby /epoc32/rom/include/swidaemon.iby
 ../inc/swi.iby /epoc32/rom/include/swi.iby
 // swi.iby split into two part swi.iby and swiplugin.iby, swiplugin can be used by other team for implementing swi observer plug-in independently
 ../inc/swiplugin.iby /epoc32/rom/include/swiplugin.iby
@@ -123,7 +124,9 @@
 installserver.mmp
 uiss.mmp
 backuprestore.mmp
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 swisidchecker.mmp
+#endif
 pkgremover.mmp
 #ifndef __WINS__
 sishelper_tshell.mmp
@@ -461,6 +464,9 @@
 ../test/tuiscriptadaptors/scripts/testwritableswicertstore.script /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/testwritableswicertstore.script
 ../test/tuiscriptadaptors/scripts/tuiscriptadaptors.ini /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/tuiscriptadaptors.ini
 ../test/tuiscriptadaptors/scripts/tuiscriptadaptors.script /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/tuiscriptadaptors.script
+../test/tuiscriptadaptors/scripts/nonusiftuiscriptadaptors.script /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/nonusiftuiscriptadaptors.script
+../test/tuiscriptadaptors/scripts/tuiscriptadaptors_app_performance.ini /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/tuiscriptadaptors_app_performance.ini
+../test/tuiscriptadaptors/scripts/tuiscriptadaptors_app_performance.script /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/tuiscriptadaptors_app_performance.script
 ../test/tuiscriptadaptors/scripts/tuiscriptadaptors_winscw.script /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/tuiscriptadaptors_winscw.script
 ../test/tuiscriptadaptors/scripts/testvids.script /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/testvids.script
 ../test/tuiscriptadaptors/scripts/testvids.ini /epoc32/winscw/c/tswi/tuiscriptadaptors/scripts/testvids.ini
--- a/installationservices/swi/group/security_swi.mrp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/group/security_swi.mrp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,19 +1,3 @@
-#
-# 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: 
-#
-
 component	security_swi
 source	\sf\mw\appinstall\installationservices\swi\bwins
 source \sf\mw\appinstall\installationservices\swi\docs
--- a/installationservices/swi/group/sisregistryserver.mmp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/group/sisregistryserver.mmp	Thu Jul 22 16:35:01 2010 +0100
@@ -28,6 +28,8 @@
 // minimum 4KB maximum 2MB (twice the maximum default)
 EPOCHEAPSIZE	0x1000 0x200000
 
+epocprocesspriority low
+
 target sisregistryserver.exe
 targettype exe
 
--- a/installationservices/swi/group/swtypereginfo.mmp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/group/swtypereginfo.mmp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -34,8 +34,11 @@
 SOURCE swtypereginfo.cpp
 
 USERINCLUDE ../inc/swi
+USERINCLUDE ../source/sisregistry/common
 
 MW_LAYER_SYSTEMINCLUDE_SYMBIAN
 
 LIBRARY euser.lib efsrv.lib estor.lib
+LIBRARY 	scrclient.lib
+LIBRARY 	ipcstream.lib
 SMPSAFE
--- a/installationservices/swi/inc/progressbar.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/inc/progressbar.h	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -31,11 +31,14 @@
 	const static TInt KProgressBarUninstallAmount=1;
 	
 	/// How many bytes to copy before updating the progress bar by one increment
-	const static TInt KProgressBarInstallChunkSize=32767;
+	const static TInt KProgressBarInstallChunkSize=1048576;  //1MB
 
 	/// The extra increment we add onto the end to make there always be some progress.
 	const static TInt KProgressBarEndIncrement=1;
 	
+	/// Percentage of completion required before updating the progress bar.
+    const static TInt KProgressBarIncrement=1;
+
 	/**
 	 * Utility function to get how much to update the progress bar for a certain
 	 * size of file copied. The smallest increment is KProgressBarEndIncrement since we always want to show that 
--- a/installationservices/swi/inc/sislauncherclient.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/inc/sislauncherclient.h	Thu Jul 22 16:35:01 2010 +0100
@@ -31,6 +31,7 @@
 #include "sislauncherdefs.h"
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK  
 #include <usif/scr/appregentries.h>
+#include <usif/scr/screntries_platform.h>
 #endif
 const TInt KDefaultShutdownTimeout = 10000000;
 
@@ -142,7 +143,7 @@
     IMPORT_C void RunAfterEcomNotificationL(const RPointerArray<CSisRegistryFileDescription>& aFileList);
 
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-    IMPORT_C void ParseSwTypeRegFileL(RFile& aFile, RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray);
+    IMPORT_C void ParseSwTypeRegFileL(RFile& aFile, RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray);
 
     IMPORT_C void RegisterSifLauncherMimeTypesL(const RPointerArray<HBufC8>& aMimeTypes);
 
--- a/installationservices/swi/inc/sisregistrywritablesession.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/inc/sisregistrywritablesession.h	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -31,9 +31,11 @@
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 #include <usif/usifcommon.h>
 #include <usif/scr/appregentries.h>
+#include <usif/scr/screntries_platform.h>
 #endif
 namespace Swi
 {
+
 class CApplication;
 class CSisRegistryPackage;
 
@@ -178,6 +180,18 @@
 	*
 	*/
 	IMPORT_C void DeactivateComponentL(TComponentId aComponentId);
+	
+	/**
+    * Sets the component presence property for a given component id (If a package contains files 
+    * installed to a removable media, the package is considered as not fully present if the same
+    * media is not present. This property will be used to filter out applications, that are not
+    * fully present, from being diaplayed in the AppLib Menu.).
+    *
+    * @param aComponentId       Identifies a installed component
+    * @param aState             True, if the component is fully present, else False.
+    *
+    */
+	IMPORT_C void SetComponentPresenceL(TComponentId aComponentId, TBool aState);
 
 	/**
 	 * Adds a registry entry representing a package containing a Layered Execution Environment
@@ -188,7 +202,7 @@
 	 * @param aTransactionID The TransactionID for IntegrityServices provided by Swis of TInt64 type
 	 *
 	 */
-	IMPORT_C void AddEntryL(const CApplication& aApplication, const TDesC8& aController, const RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, TInt64 aTransactionID);
+	IMPORT_C void AddEntryL(const CApplication& aApplication, const TDesC8& aController, const RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, TInt64 aTransactionID);
 
 	/**
 	 * Updates the registry entry representing a package containing a Layered Execution Environment.
@@ -202,7 +216,7 @@
 	 * @param aTransactionID The TransactionID for IntegrityServices provided by Swis of TInt64 type
 	 *
 	 */
-	IMPORT_C void UpdateEntryL(const CApplication& aApplication, const TDesC8& aController, const RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, TInt64 aTransactionID);
+	IMPORT_C void UpdateEntryL(const CApplication& aApplication, const TDesC8& aController, const RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, TInt64 aTransactionID);
 
 	IMPORT_C void AddEntryL(const Usif::CApplicationRegistrationData& aApparcRegFileData, const CSisRegistryPackage& aSisRegistryPackage);
 	IMPORT_C void UpdateEntryL(const CApplication& aApplication, const Usif::CApplicationRegistrationData& aApparcRegFileData, const CSisRegistryPackage& aSisRegistryPackage);
--- a/installationservices/swi/inc/swi.iby	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/inc/swi.iby	Thu Jul 22 16:35:01 2010 +0100
@@ -29,7 +29,6 @@
 file=ABI_DIR\BUILD_DIR\sisresult.dll			sys\bin\sisresult.dll
 file=ABI_DIR\BUILD_DIR\uiss.dll				sys\bin\uiss.dll
 file=ABI_DIR\BUILD_DIR\uissclient.dll		sys\bin\uissclient.dll
-file=ABI_DIR\BUILD_DIR\swidaemon.exe			sys\bin\swidaemon.exe
 file=ABI_DIR\BUILD_DIR\sisregistryclient.dll		sys\bin\sisregistryclient.dll
 file=ABI_DIR\BUILD_DIR\sisregistryserver.exe		sys\bin\sisregistryserver.exe
 file=ABI_DIR\BUILD_DIR\sislauncherclient.dll		sys\bin\sislauncherclient.dll
@@ -67,8 +66,11 @@
 
 ECOM_PLUGIN(recsisx.dll, 0x10202DD0.rsc)
 
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 ECOM_PLUGIN(swisidchecker.dll, 10281FBC.rsc)
+#endif
 
 #include "swiconfig.iby"
+#include "swidaemon.iby"
 
 #endif
--- a/installationservices/swi/inc/swi/sisuihandler.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/inc/swi/sisuihandler.h	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -835,7 +835,7 @@
 		IMPORT_C void SetFinalProgressBarValue(TInt aValue);
 		
 		/** Updates the value of the progress bar value property by adding the given value to the current value. */
-		IMPORT_C void UpdateProgressBarValueL(TInt aValue);
+		IMPORT_C TInt UpdateProgressBarValueL(TInt aValue);
 	
 	private:
 		CProgressBarValuePublisher();
@@ -844,6 +844,8 @@
 	private:
 		TInt iCurrentProgressValue;
 		TInt iFinalProgressValue;
+		TInt iLastPercentCompletion;
+		TInt iLastProgressValue;
 		};
 #endif
 
--- a/installationservices/swi/inc/swi/swtypereginfo.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/inc/swi/swtypereginfo.h	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -29,152 +29,23 @@
 #include <e32base.h>
 #include <s32mem.h>
 #include <ct/rcpointerarray.h>
+#include <usif/scr/screntries_platform.h>
 
 namespace Swi
 	{
 	_LIT(KTxtSoftwareTypeComponentProperty, "softwareTypes");
 
-	class CLocalizedSoftwareTypeName : public CBase
-		{
-	public:
-		IMPORT_C static CLocalizedSoftwareTypeName* NewL(const TDesC& aName, TLanguage aLocale);
-		IMPORT_C static CLocalizedSoftwareTypeName* NewLC(const TDesC& aName, TLanguage aLocale);
-		IMPORT_C static CLocalizedSoftwareTypeName* NewL(RReadStream& aStream);
-		
-		IMPORT_C virtual ~CLocalizedSoftwareTypeName();
-		
-		IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
-		
-		inline const TDesC& Name() const;
-		inline TLanguage Locale() const;
-		
-	private:
-		CLocalizedSoftwareTypeName();
-		CLocalizedSoftwareTypeName(TLanguage aLocale);
-
-		void InternalizeL(RReadStream& aStream);
-		
-	private:
-		HBufC* iName;
-		TLanguage iLocale;
-		};
-
-// ##########################################################################################
-
-	class CSoftwareTypeRegInfo : public CBase
-		{
-	public:
-		IMPORT_C static CSoftwareTypeRegInfo* NewL(const TDesC& aUniqueSoftwareTypeName);
-		IMPORT_C static CSoftwareTypeRegInfo* NewL(RReadStream& aStream);
-
-		IMPORT_C virtual ~CSoftwareTypeRegInfo();
-		
-		IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
-		IMPORT_C TInt ExternalizedSize() const;
-
-		inline void SetSifPluginUid(TUid aUid);
-		inline void SetInstallerSecureId(TSecureId aSecureId);
-		inline void SetExecutionLayerSecureId(TSecureId aSecureId);
-		IMPORT_C void SetMimeTypeL(const TDesC& aMimeType);
-		IMPORT_C void SetLocalizedSoftwareTypeNameL(TLanguage aLanguage, const TDesC& aName);
-
-		inline const TDesC& UniqueSoftwareTypeName() const;
-		inline TUid SifPluginUid() const;
-		inline TSecureId InstallerSecureId() const;
-		inline TSecureId ExecutionLayerSecureId() const;
-		inline const RPointerArray<HBufC>& MimeTypes() const;
-		inline const RPointerArray<CLocalizedSoftwareTypeName>& LocalizedSoftwareTypeNames() const;
-
-	private:
-		CSoftwareTypeRegInfo();
-		void InternalizeL(RReadStream& aStream);
-
-		enum { EUniqueSwTypeNameMaxLength = 32 }; 
-
-		HBufC* iUniqueSoftwareTypeName;
-		TUid iSifPluginUid;
-		TSecureId iInstallerSecureId;
-		TSecureId iExecutionLayerSecureId;
-		RCPointerArray<HBufC> iMimeTypes;
-		RCPointerArray<CLocalizedSoftwareTypeName> iLocalizedSoftwareTypeNames;
-		};
-
-// ##########################################################################################
-
 	class SoftwareTypeRegInfoUtils
 		{
 	public:
-		IMPORT_C static void SerializeArrayL(const RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RBuf8& aSerializedArray);
-		IMPORT_C static void UnserializeArrayL(RReadStream& aStream, RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray);
-		IMPORT_C static void SerializeUniqueSwTypeNamesL(const RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RBuf& aSerializedNames);
+		IMPORT_C static void SerializeArrayL(const RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RBuf8& aSerializedArray);
+		IMPORT_C static void UnserializeArrayL(RReadStream& aStream, RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray);
+		IMPORT_C static void SerializeUniqueSwTypeNamesL(const RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RBuf& aSerializedNames);
 		IMPORT_C static void UnserializeUniqueSwTypeNamesL(const TDesC& aSerializedNames, RArray<TPtrC>& aUniqueSwTypeNames);
-		IMPORT_C static void ExtractMimeTypesL(const RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RPointerArray<HBufC8>& aMimeTypes);
+		IMPORT_C static void ExtractMimeTypesL(const RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RPointerArray<HBufC8>& aMimeTypes);
 	public:
 		enum { KUniqueNameSeparator = 0x1E };  // 'record separator'
 		};
-
-// ##########################################################################################
-
-	inline const TDesC& CLocalizedSoftwareTypeName::Name() const
-		{
-		return *iName;
-		}
-
-	inline TLanguage CLocalizedSoftwareTypeName::Locale() const
-		{
-		return iLocale;
-		}
-
-// ##########################################################################################
-
-	inline void CSoftwareTypeRegInfo::SetSifPluginUid(TUid aUid)
-		{
-		iSifPluginUid = aUid;
-		}
-
-	inline void CSoftwareTypeRegInfo::SetInstallerSecureId(TSecureId aSecureId)
-		{
-		iInstallerSecureId = aSecureId;
-		}
-
-	inline void CSoftwareTypeRegInfo::SetExecutionLayerSecureId(TSecureId aSecureId)
-		{
-		iExecutionLayerSecureId = aSecureId;
-		}
-
-	inline const TDesC& CSoftwareTypeRegInfo::UniqueSoftwareTypeName() const
-		{
-		if (iUniqueSoftwareTypeName == NULL)
-			{
-			return KNullDesC;
-			}
-		return *iUniqueSoftwareTypeName;
-		}
-
-	inline TUid CSoftwareTypeRegInfo::SifPluginUid() const
-		{
-		return iSifPluginUid;
-		}
-
-	TSecureId CSoftwareTypeRegInfo::InstallerSecureId() const
-		{
-		return iInstallerSecureId;
-		}
-
-	TSecureId CSoftwareTypeRegInfo::ExecutionLayerSecureId() const
-		{
-		return iInstallerSecureId;
-		}
-
-	const RPointerArray<HBufC>& CSoftwareTypeRegInfo::MimeTypes() const
-		{
-		return iMimeTypes;
-		}
-
-	const RPointerArray<CLocalizedSoftwareTypeName>& CSoftwareTypeRegInfo::LocalizedSoftwareTypeNames() const
-		{
-		return iLocalizedSoftwareTypeNames;
-		}
 	}
 
 #endif // SWTYPEREGINFO_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/inc/swidaemon.iby	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:
+* SWIDAEMON.IBY	
+*/
+
+#ifndef __SWIDAEMON_IBY__
+#define __SWIDAEMON_IBY__
+
+REM SWIDAEMON.IBY
+
+file=ABI_DIR\BUILD_DIR\swidaemon.exe			sys\bin\swidaemon.exe
+
+#endif
+
--- a/installationservices/swi/inc/switextshell.iby	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/inc/switextshell.iby	Thu Jul 22 16:35:01 2010 +0100
@@ -30,7 +30,9 @@
 #include <ocsp.iby>
 
 // This iby file also includes the http libraries needed for ocsp testing
+#ifndef __APPARC_IBY__
 #include <http.iby>
+#endif
 #include "hash.iby"
 
 #include "ups.iby" // Security utilities 9.5
@@ -63,35 +65,43 @@
 
 // Core SWI code
 file=ABI_DIR\BUILD_DIR\installserver.exe			sys\bin\installserver.exe
-file=ABI_DIR\BUILD_DIR\plan.dll 				sys\bin\plan.dll
 file=ABI_DIR\BUILD_DIR\sishelper_tshell.dll			sys\bin\sishelper.dll
-file=ABI_DIR\BUILD_DIR\swidataprovider.dll 			sys\bin\swidataprovider.dll 
 file=ABI_DIR\BUILD_DIR\sisxfile.dll 				sys\bin\sisxfile.dll 
-file=ABI_DIR\BUILD_DIR\siscontroller.dll 			sys\bin\siscontroller.dll 
 file=ABI_DIR\BUILD_DIR\sisresult.dll				sys\bin\sisresult.dll
 file=ABI_DIR\BUILD_DIR\uiss.dll					sys\bin\uiss.dll
+
+#ifndef __APPARC_IBY__
+file=ABI_DIR\BUILD_DIR\plan.dll 				sys\bin\plan.dll
+file=ABI_DIR\BUILD_DIR\swidataprovider.dll 			sys\bin\swidataprovider.dll 
+file=ABI_DIR\BUILD_DIR\siscontroller.dll 			sys\bin\siscontroller.dll 
 file=ABI_DIR\BUILD_DIR\uissclient.dll 				sys\bin\uissclient.dll 
 
 file=ABI_DIR\BUILD_DIR\sisregistryclient.dll			sys\bin\sisregistryclient.dll
 file=ABI_DIR\BUILD_DIR\sisregistryserver.exe			sys\bin\sisregistryserver.exe
 file=ABI_DIR\BUILD_DIR\sislauncherclient.dll			sys\bin\sislauncherclient.dll
 file=ABI_DIR\BUILD_DIR\sislauncherserver_tshell.exe		sys\bin\sislauncherserver.exe
+#endif
 
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+#ifndef __APPARC_IBY__
 file=ABI_DIR\BUILD_DIR\apprscparser.dll			sys\bin\apprscparser.dll
 file=ABI_DIR\BUILD_DIR\swtypereginfo.dll		sys\bin\swtypereginfo.dll
 #endif
+#endif
 
 #ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 file=ABI_DIR\BUILD_DIR\integrityservices.dll			sys\bin\integrityservices.dll
 #endif
 
+#ifndef __APPARC_IBY__
 file=ABI_DIR\BUILD_DIR\ocspsupport.exe				sys\bin\ocspsupport.exe
 file=ABI_DIR\BUILD_DIR\ocspsupportclient.dll 			sys\bin\ocspsupportclient.dll 
 file=ABI_DIR\BUILD_DIR\devinfosupportcommon.dll			sys\bin\devinfosupportcommon.dll
 file=ABI_DIR\BUILD_DIR\devinfosupport.exe			sys\bin\devinfosupport.exe
 file=ABI_DIR\BUILD_DIR\devinfosupportclient.dll 		sys\bin\devinfosupportclient.dll 
 file=ABI_DIR\BUILD_DIR\securitymanager.dll			sys\bin\securitymanager.dll
+#endif
+
 file=ABI_DIR\BUILD_DIR\backuprestore.dll			sys\bin\backuprestore.dll
 file=ABI_DIR\BUILD_DIR\cafdataprovider.dll			sys\bin\cafdataprovider.dll
 file=ABI_DIR\BUILD_DIR\pkgremover.dll				sys\bin\pkgremover.dll
@@ -100,9 +110,10 @@
 // Core SWI - 9.5
 REM Including swiplugin.iby instead explicitly mentioning the files to avoid duplicate includes 
 #include "swiplugin.iby"
+#ifndef __APPARC_IBY__
 file=ABI_DIR\BUILD_DIR\swiobserverclient.dll 			sys\bin\swiobserverclient.dll
 file=ABI_DIR\BUILD_DIR\swiobserver.exe 				sys\bin\swiobserver.exe
-
+#endif
 
 
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
--- a/installationservices/swi/inc/tswi.iby	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/inc/tswi.iby	Thu Jul 22 16:35:01 2010 +0100
@@ -317,8 +317,12 @@
 #endif //SECURITY_NORMAL_SWICERTSTORE__
 
 // tuiscriptadaptors (unit test for SWIS)
+
 data = \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini \tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini
 data = \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.script \tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.script
+data = \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini \tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini
+data = \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.script \tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.script
+data = \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\nonusiftuiscriptadaptors.script \tswi\tuiscriptadaptors\scripts\nonusiftuiscriptadaptors.script
 data = \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\tuileavedialog.script \tswi\tuiscriptadaptors\scripts\tuileavedialog.script
 data = \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\tuileavedialogasync.script \tswi\tuiscriptadaptors\scripts\tuileavedialogasync.script
 data = \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\leavedialog_armv5.ini \tswi\tuiscriptadaptors\scripts\leavedialog.ini
@@ -347,6 +351,7 @@
 data = \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini \tswi\tuiscriptadaptors\scripts\testdevicelanguages.ini
 data = \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\testdevicelanguages.script \tswi\tuiscriptadaptors\scripts\testdevicelanguages.script
 #ifdef __SECURITY_NORMAL_SWICERTSTORE__
+
 data = \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\testpreinstalled_h2.script \tswi\tuiscriptadaptors\scripts\testpreinstalled.script
 #else
 data = \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\testpreinstalled_delete.script \tswi\tuiscriptadaptors\scripts\testpreinstalled_delete.script
--- a/installationservices/swi/source/apprscparser/apprscparser.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/apprscparser/apprscparser.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -526,9 +526,10 @@
                 CResourceFile* currLocalizableFile = iLocalizableRscArray[i]->iRscFile;                
                 currLocalizableFile->ConfirmSignatureL();
                 HBufC8* data = NULL;
-                TRAPD(err, data = currLocalizableFile->AllocReadL(aResourceId));                
+                TRAPD(err, data = currLocalizableFile->AllocReadL(aResourceId));                  
                 if(err == KErrNone)
                     {
+                    DEBUG_PRINTF3(_L8("Opaque Data read (length %d) from the localizable resouce file : %S"), data->Length(), data);
                     CleanupStack::PushL(data);
                     Usif::COpaqueData* opaqueData = Usif::COpaqueData::NewL(*data, iLocalizableRscArray[i]->iLanguage);
                     aOpaqueDataArray.AppendL(opaqueData);
@@ -541,6 +542,7 @@
             // Expecting opaque data to be in the registration file
             __ASSERT_ALWAYS(aRegistrationFile, Panic(EPanicNullPointer));
             HBufC8* data = aRegistrationFile->AllocReadLC(aResourceId);
+            DEBUG_PRINTF3(_L8("Opaque Data read (length %d) from the registration resouce file : %S"), data->Length(), data);
             Usif::COpaqueData* opaqueData = Usif::COpaqueData::NewL(*data, TLanguage(0));
             aOpaqueDataArray.AppendL(opaqueData);
             CleanupStack::PopAndDestroy(data);
--- a/installationservices/swi/source/backuprestore/backupsession.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/backuprestore/backupsession.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -216,7 +216,7 @@
 
 			// Appending ELangNone at the end as marker for the end of the language IDs
 			// as we also append the language ID's from other Augmentations
-			matchingSupportedLanguagesArray.Append(ELangNone);
+			matchingSupportedLanguagesArray.AppendL(ELangNone);
 
 			CleanupStack::PopAndDestroy(2, &augmentation);
 			}
--- a/installationservices/swi/source/certstoretobin/Swicertstoretobin.pl	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/certstoretobin/Swicertstoretobin.pl	Thu Jul 22 16:35:01 2010 +0100
@@ -2,7 +2,7 @@
 # Copyright (c) 2005-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"
+# under the terms of the License "Eclipse Public License v1.0"
 # which accompanies this distribution, and is available
 # at the URL "http://www.eclipse.org/legal/epl-v10.html".
 #
--- a/installationservices/swi/source/pkgremover/pkgremover.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/pkgremover/pkgremover.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -25,6 +25,7 @@
 #include "installclientserver.h"
 #include <swi/pkgremover.h>
 #include <connect/sbdefs.h>
+#include "cleanuputils.h"
 
 // Maximum buffer size
 const TInt KMaxBufferSize = 1024;
@@ -43,6 +44,7 @@
 /*static*/
 EXPORT_C void UninstalledSisPackages::ListL(TDriveNumber aDrive, RPointerArray<CUninstalledPackageEntry>& aPackageList)
 	{
+	CleanupResetAndDestroyPushL(aPackageList);
 	aPackageList.ResetAndDestroy();
 
 	// Check if SWIS is busy
@@ -150,6 +152,7 @@
 
 	// Shutdown InstallServer and SisHelper
 	CleanupStack::PopAndDestroy(2, &server);
+	CleanupStack::Pop(&aPackageList);
 	}
 
 /*static*/
--- a/installationservices/swi/source/sisfile/swtypereginfo.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/sisfile/swtypereginfo.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -17,237 +17,49 @@
 
 
 #include "swtypereginfo.h"
-
+#include "arrayutils.h"
+#include "ipcutil.h"
 using namespace Swi;
 
-CLocalizedSoftwareTypeName::CLocalizedSoftwareTypeName()
-	{
-	}
-
-CLocalizedSoftwareTypeName::CLocalizedSoftwareTypeName(TLanguage aLocale)
-	:	iLocale(aLocale)
-	{
-	}
-
-EXPORT_C CLocalizedSoftwareTypeName::~CLocalizedSoftwareTypeName()
-	{
-	delete iName;
-	}
-
-EXPORT_C CLocalizedSoftwareTypeName* CLocalizedSoftwareTypeName::NewL(const TDesC& aName, TLanguage aLocale)
-	{
-	CLocalizedSoftwareTypeName *self = CLocalizedSoftwareTypeName::NewLC(aName, aLocale);
-	CleanupStack::Pop(self);
-	return self;
-	}
-
-EXPORT_C CLocalizedSoftwareTypeName* CLocalizedSoftwareTypeName::NewLC(const TDesC& aName, TLanguage aLocale)
-	{
-	CLocalizedSoftwareTypeName *self = new(ELeave) CLocalizedSoftwareTypeName(aLocale);
-	CleanupStack::PushL(self);
-	self->iName = aName.AllocL();
-	return self;
-	}
-
-EXPORT_C CLocalizedSoftwareTypeName* CLocalizedSoftwareTypeName::NewL(RReadStream& aStream)
-	{
-	CLocalizedSoftwareTypeName* self = new(ELeave) CLocalizedSoftwareTypeName();
-	CleanupStack::PushL(self);
-	self->InternalizeL(aStream);
-	CleanupStack::Pop(self);
-	return self;
-	}
-
-EXPORT_C void CLocalizedSoftwareTypeName::ExternalizeL(RWriteStream& aStream) const
-	{
-	aStream.WriteInt32L(iLocale);
-	aStream << *iName;
-	}
-
-void CLocalizedSoftwareTypeName::InternalizeL(RReadStream& aStream)
-	{
-	TLanguage locale = static_cast<TLanguage>(aStream.ReadInt32L());
-	iLocale = locale;
-
-	delete iName;
-	iName = HBufC::NewL(aStream, KMaxTInt); // No restriction on length
-	}
-
-// ##########################################################################################
-
-EXPORT_C CSoftwareTypeRegInfo* CSoftwareTypeRegInfo::NewL(const TDesC& aUniqueSoftwareTypeName)
-	{
-	CSoftwareTypeRegInfo* self = new (ELeave) CSoftwareTypeRegInfo();
-	CleanupStack::PushL(self);
-	self->iUniqueSoftwareTypeName = HBufC::NewL(aUniqueSoftwareTypeName.Length());
-	self->iUniqueSoftwareTypeName->Des().Copy(aUniqueSoftwareTypeName);
-	CleanupStack::Pop(self);
-	return self;
-	}
-
-EXPORT_C CSoftwareTypeRegInfo* CSoftwareTypeRegInfo::NewL(RReadStream& aStream)
-	{
-	CSoftwareTypeRegInfo* self = new (ELeave) CSoftwareTypeRegInfo();
-	CleanupStack::PushL(self);
-	self->InternalizeL(aStream);
-	CleanupStack::Pop(self);
-	return self;
-	}
-
-CSoftwareTypeRegInfo::CSoftwareTypeRegInfo()
-	{
-	}
-
-EXPORT_C CSoftwareTypeRegInfo::~CSoftwareTypeRegInfo()
-	{
-	delete iUniqueSoftwareTypeName;
-	iMimeTypes.Close();
-	iLocalizedSoftwareTypeNames.Close();
-	}
-
-EXPORT_C void CSoftwareTypeRegInfo::ExternalizeL(RWriteStream& aStream) const
-	{
-	aStream << *iUniqueSoftwareTypeName;
-	aStream << iSifPluginUid.iUid;
-	
-	TUid installerUid = iInstallerSecureId;
-	aStream << installerUid.iUid;
-	
-	TUid executionLayerUid = iExecutionLayerSecureId;
-	aStream << executionLayerUid.iUid;
-	
-	// MIME types
-	const TInt numMimeTypes = iMimeTypes.Count();
-	aStream.WriteInt32L(numMimeTypes);
-	for (TInt i=0; i<numMimeTypes; ++i)
-		{
-		aStream << *iMimeTypes[i];
-		}
-	 
-	// Localized names
-	const TInt numLocalizedNames = iLocalizedSoftwareTypeNames.Count();
-	aStream.WriteInt32L(numLocalizedNames);
-	for (TInt i=0; i<numLocalizedNames; ++i)
-		{
-		aStream << *iLocalizedSoftwareTypeNames[i];
-		}
-	}
-
-EXPORT_C TInt CSoftwareTypeRegInfo::ExternalizedSize() const
-	{
-	TInt size = sizeof(TUid) + sizeof(TSecureId) + sizeof(TSecureId);
-	size += sizeof(TInt) + iUniqueSoftwareTypeName->Size();
-	
-	// MIME types
-	const TInt numMimeTypes = iMimeTypes.Count();
-	size += sizeof(TInt);
-	for (TInt i=0; i<numMimeTypes; ++i)
-		{
-		size += sizeof(TInt) + iMimeTypes[i]->Size();
-		}
-	 
-	// Localized names
-	const TInt numLocalizedNames = iLocalizedSoftwareTypeNames.Count();
-	size += sizeof(TInt);
-	for (TInt i=0; i<numLocalizedNames; ++i)
-		{
-		size += sizeof(TInt) + sizeof(TInt) + iLocalizedSoftwareTypeNames[i]->Name().Size();
-		}
-
-	return size;
-	}
-
-void CSoftwareTypeRegInfo::InternalizeL(RReadStream& aStream)
-	{
-	ASSERT(iUniqueSoftwareTypeName == NULL);
-	
-	iUniqueSoftwareTypeName = HBufC::NewL(aStream, EUniqueSwTypeNameMaxLength);
-	
-	iSifPluginUid = TUid::Uid(aStream.ReadInt32L());
-	iInstallerSecureId = TUid::Uid(aStream.ReadInt32L());
-	iExecutionLayerSecureId = TUid::Uid(aStream.ReadInt32L());
-	
-	// MIME types
-	const TInt numMimeTypes = aStream.ReadInt32L();
-	for (TInt i=0; i<numMimeTypes; ++i)
-		{
-		HBufC* mimeType = HBufC::NewLC(aStream, EUniqueSwTypeNameMaxLength);
-		iMimeTypes.AppendL(mimeType);
-		CleanupStack::Pop(mimeType);
-		}
-	
-	// Localized names
-	const TInt numLocalizedNames = aStream.ReadInt32L();
-	for (TInt i=0; i<numLocalizedNames; ++i)
-		{
-		CLocalizedSoftwareTypeName* name = CLocalizedSoftwareTypeName::NewL(aStream);
-		CleanupStack::PushL(name);
-		iLocalizedSoftwareTypeNames.AppendL(name);
-		CleanupStack::Pop(name);
-		}
-	}
-
-EXPORT_C void CSoftwareTypeRegInfo::SetMimeTypeL(const TDesC& aMimeType)
-	{
-	HBufC* mimeType = HBufC::NewLC(aMimeType.Length());
-	mimeType->Des().Copy(aMimeType);
-	iMimeTypes.AppendL(mimeType);
-	CleanupStack::Pop(mimeType);
-	}
-
-EXPORT_C void CSoftwareTypeRegInfo::SetLocalizedSoftwareTypeNameL(TLanguage aLanguage, const TDesC& aName)
-	{
-	CLocalizedSoftwareTypeName* name = CLocalizedSoftwareTypeName::NewLC(aName, aLanguage);
-	iLocalizedSoftwareTypeNames.AppendL(name);
-	CleanupStack::Pop(name);
-	}
-
-// ##########################################################################################
-
-EXPORT_C void SoftwareTypeRegInfoUtils::SerializeArrayL(const RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RBuf8& aSerializedArray)
+EXPORT_C void SoftwareTypeRegInfoUtils::SerializeArrayL(const RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RBuf8& aSerializedArray)
 	{
 	TInt bufLen = sizeof(TInt);
 	const TInt count = aSwTypeRegInfoArray.Count();
 	for (TInt i=0; i<count; ++i)
-		{
-		bufLen += aSwTypeRegInfoArray[i]->ExternalizedSize();
-		}
+	    {
+	    bufLen += GetObjectSizeL(aSwTypeRegInfoArray[i]);
+	    }
 
 	aSerializedArray.ReAllocL(aSerializedArray.Length()+bufLen);
 	RDesWriteStream ws(aSerializedArray);
 	CleanupClosePushL(ws);
 
-	ws.WriteInt32L(count);
-	for (TInt i=0; i<count; ++i)
-		{
-		const CSoftwareTypeRegInfo& info = *aSwTypeRegInfoArray[i];
-		ws << info;
-		}
+	ExternalizePointerArrayL(aSwTypeRegInfoArray, ws);
 
 	ws.CommitL();
 	CleanupStack::PopAndDestroy(&ws);
 	}
 
-EXPORT_C void SoftwareTypeRegInfoUtils::UnserializeArrayL(RReadStream& aStream, RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray)
+EXPORT_C void SoftwareTypeRegInfoUtils::UnserializeArrayL(RReadStream& aStream, RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray)
 	{
 	const TInt numElems = aStream.ReadInt32L();
 	for (TInt i=0; i<numElems; ++i)
 		{
-		CSoftwareTypeRegInfo* info = CSoftwareTypeRegInfo::NewL(aStream);
+		Usif::CSoftwareTypeRegInfo* info = Usif::CSoftwareTypeRegInfo::NewL(aStream);
 		CleanupStack::PushL(info);
 		aSwTypeRegInfoArray.AppendL(info);
 		CleanupStack::Pop(info);
 		}
 	}
 
-EXPORT_C void SoftwareTypeRegInfoUtils::SerializeUniqueSwTypeNamesL(const RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RBuf& aSerializedNames)
+EXPORT_C void SoftwareTypeRegInfoUtils::SerializeUniqueSwTypeNamesL(const RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RBuf& aSerializedNames)
 	{
 	const TInt numNames = aSwTypeRegInfoArray.Count();
 	
 	TInt bufLen = 0;
 	for (TInt i=0; i<numNames; ++i)
 		{
-		const CSoftwareTypeRegInfo& info = *aSwTypeRegInfoArray[i];
+		const Usif::CSoftwareTypeRegInfo& info = *aSwTypeRegInfoArray[i];
 		bufLen += info.UniqueSoftwareTypeName().Length() + sizeof(TChar);
 		}
 	
@@ -255,7 +67,7 @@
 	
 	for (TInt i=0; i<numNames; ++i)
 		{
-		const CSoftwareTypeRegInfo& info = *aSwTypeRegInfoArray[i];
+		const Usif::CSoftwareTypeRegInfo& info = *aSwTypeRegInfoArray[i];
 		aSerializedNames.Append(info.UniqueSoftwareTypeName());
 		aSerializedNames.Append(static_cast<TChar>(KUniqueNameSeparator));
 		}
@@ -283,7 +95,7 @@
 		}
 	}
 
-EXPORT_C void SoftwareTypeRegInfoUtils::ExtractMimeTypesL(const RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RPointerArray<HBufC8>& aMimeTypes)
+EXPORT_C void SoftwareTypeRegInfoUtils::ExtractMimeTypesL(const RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RPointerArray<HBufC8>& aMimeTypes)
 	{
 	for (TInt i=0; i<aSwTypeRegInfoArray.Count(); ++i)
 		{
--- a/installationservices/swi/source/sislauncher/client/sislauncherclient.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/sislauncher/client/sislauncherclient.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -303,7 +303,7 @@
     }
 
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-EXPORT_C void RSisLauncherSession::ParseSwTypeRegFileL(RFile& aFile, RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray)
+EXPORT_C void RSisLauncherSession::ParseSwTypeRegFileL(RFile& aFile, RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray)
     {
     // Pack the file handle
     TIpcArgs ipcArgs;
@@ -476,35 +476,32 @@
 
 EXPORT_C void RSisLauncherSession::NotifyNewAppsL(const RArray<TAppUpdateInfo>& aAppUpdateInfo)
     {
-    if (aAppUpdateInfo.Count() > 0)
+    TInt bufLen = sizeof(TInt);
+    const TInt appCount = aAppUpdateInfo.Count();
+    for (TInt i=0; i<appCount; ++i)
         {
-        TInt bufLen = sizeof(TInt);
-        const TInt appCount = aAppUpdateInfo.Count();
-        for (TInt i=0; i<appCount; ++i)
-            {
-            bufLen += GetObjectSizeL(&aAppUpdateInfo[i]);
-            }
+        bufLen += GetObjectSizeL(&aAppUpdateInfo[i]);
+        }
 
-        HBufC8* buffer = HBufC8::NewLC(bufLen);
-        TPtr8 bufPtr(buffer->Des());
+    HBufC8* buffer = HBufC8::NewLC(bufLen);
+    TPtr8 bufPtr(buffer->Des());
 
-        RDesWriteStream ws(bufPtr);
-        CleanupClosePushL(ws);
+    RDesWriteStream ws(bufPtr);
+    CleanupClosePushL(ws);
 
-        ws.WriteInt32L(appCount);
-        for (TInt i=0; i<appCount; ++i)
-            {
-            const TAppUpdateInfo& info = aAppUpdateInfo[i];
-            ws << info;
-            }
-        ws.CommitL();
-        CleanupStack::PopAndDestroy(&ws);
-        
-        TIpcArgs ipcArgs(&bufPtr);
-        User::LeaveIfError(SendReceive(ENotifyApparcForApps, ipcArgs));
+    ws.WriteInt32L(appCount);
+    for (TInt i=0; i<appCount; ++i)
+        {
+        const TAppUpdateInfo& info = aAppUpdateInfo[i];
+        ws << info;
+        }
+    ws.CommitL();
+    CleanupStack::PopAndDestroy(&ws);
+    
+    TIpcArgs ipcArgs(&bufPtr);
+    User::LeaveIfError(SendReceive(ENotifyApparcForApps, ipcArgs));
 
-        CleanupStack::PopAndDestroy(buffer);
-        }
+    CleanupStack::PopAndDestroy(buffer);
     }
 
 EXPORT_C TAppUpdateInfo::TAppUpdateInfo()
--- a/installationservices/swi/source/sislauncher/server/sislauncherserver.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/sislauncher/server/sislauncherserver.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -561,7 +561,7 @@
     CleanupClosePushL(apaSession);
 
     // UI frameworks advise ignoring the return code
-    // Proceeding even if force registration fails so that installtion is not aborted
+    // Proceeding even if force registration fails so that installation is not aborted
     apaSession.ForceRegistration(aApplicationRegistrationData);
     CleanupStack::PopAndDestroy();
     }
--- a/installationservices/swi/source/sislauncher/server/sislaunchersession.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/sislauncher/server/sislaunchersession.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -47,6 +47,7 @@
 #include "apprscparser.h"
 #include "ipcutil.h"
 #include <usif/scr/appregentries.h>
+#include <usif/scr/screntries_platform.h>
 #include "sislauncherclient.h" 
 #endif
 
@@ -343,7 +344,7 @@
             if (Server().BootUpMode() == KTextShell) 
                 {
                 // emulator tests running in textshell or in textshell ROM (#def SWI_TEXTSHELL_ROM)
-                DEBUG_PRINTF(_L8("Sis Launcher Server - textshell - skipping notification of new applications."));
+                DEBUG_PRINTF(_L8("Sis Launcher Server - TextShell - skipping notification of new applications (ENotifyNewApps)."));
                 }
             else
                 {
@@ -417,14 +418,14 @@
             if (Server().BootUpMode() == KTextShell) 
                 {
                 // emulator tests running in textshell or in textshell ROM (#def SWI_TEXTSHELL_ROM)
-                DEBUG_PRINTF(_L8("Sis Launcher Server - textshell - skipping notification of new applications."));
+                DEBUG_PRINTF(_L8("Sis Launcher Server - TextShell - Skipping notification of force registered applications."));
                 }
             else
                 {
                 // emulatore running with GUI
                 #ifndef SWI_TEXTSHELL_ROM
                 Server().NotifyNewAppsL(appRegInfo);
-            #endif // SWI_TEXTSHELL_ROM
+                #endif // SWI_TEXTSHELL_ROM
                 }
             appRegInfo.ResetAndDestroy();
             CleanupStack::PopAndDestroy(2);
@@ -433,9 +434,17 @@
             }
         case ENotifyApparcForApps:
             {
-            #ifndef SWI_TEXTSHELL_ROM
-            NotifyApparcForAppsL(aMessage);  
-            #endif
+            if (Server().BootUpMode() == KTextShell) 
+                {
+                DEBUG_PRINTF(_L8("Sis Launcher Server - TextShell - Skipping notification of applications (ENotifyApparcForApps)."));
+                }
+            else
+                {
+                #ifndef SWI_TEXTSHELL_ROM
+                NotifyApparcForAppsL(aMessage);  
+                #endif
+                }
+            aMessage.Complete(KErrNone);
             break;
             }
 #endif // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
@@ -583,7 +592,7 @@
     User::LeaveIfError(file.Read(bufPtr));
 
     // Parse the registration file
-    RCPointerArray<CSoftwareTypeRegInfo> regInfoArray;
+	RCPointerArray<Usif::CSoftwareTypeRegInfo> regInfoArray;
     CleanupClosePushL(regInfoArray);
     
     CSoftwareTypeRegInfoParser* parser = CSoftwareTypeRegInfoParser::NewL();
@@ -602,16 +611,24 @@
 #ifndef SWI_TEXTSHELL_ROM
 void CSisLauncherSession::NotifyApparcForAppsL(const RMessage2& aMessage)
     {
+    DEBUG_PRINTF(_L8("Sending the notification to AppArc."));
     RIpcReadStream readStream;
     readStream.Open(aMessage, 0);
     CleanupClosePushL(readStream);    
     RArray<TApaAppUpdateInfo> apparcAppInfoArray;
-    CleanupClosePushL(apparcAppInfoArray);        
+    CleanupClosePushL(apparcAppInfoArray);
+    
     RApaLsSession apaSession;
-    User::LeaveIfError(apaSession.Connect());
+    TInt err = apaSession.Connect();
+    if(KErrNone != err)
+        {
+        DEBUG_PRINTF2(_L8("RApaLsSession::Connect failed with %d. Notification to AppArc failed."), err);
+        User::LeaveIfError(err);
+        }
     CleanupClosePushL(apaSession);
     TApaAppUpdateInfo::TApaAppAction appaction = TApaAppUpdateInfo::EAppNotPresent;
     const TInt numElems = readStream.ReadInt32L();
+    DEBUG_PRINTF2(_L8("Number of applications to be notified is %d."), numElems);
     //Convert the local structure into the structure required by apparc
     for (TInt i=0; i<numElems; ++i)
         {
@@ -631,14 +648,15 @@
         DEBUG_PRINTF2(_L("Action is %d"), appInfo.iAction);         
         }    
     
-    if(numElems > 0)
+    err = 0;
+    TRAP(err, err = apaSession.UpdateAppListL(apparcAppInfoArray));
+    if(KErrNone != err)
         {
-        apaSession.UpdateAppListL(apparcAppInfoArray);
+        DEBUG_PRINTF2(_L8("RApaLsSession::UpdateAppListL failed with %d. Notification to AppArc failed."), err);
+        User::LeaveIfError(err);
         }
-        
-    CleanupStack::PopAndDestroy(3, &readStream);
-    aMessage.Complete(KErrNone);
-       
+
+    CleanupStack::PopAndDestroy(3, &readStream);       
     }
 
 void CSisLauncherSession::RegisterSifLauncherMimeTypesL(const RMessage2& aMessage)
--- a/installationservices/swi/source/sislauncher/server/swtypereginfoparser.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/sislauncher/server/swtypereginfoparser.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -33,9 +33,11 @@
 	_LIT8(KNodeLocalizedName, "localizedName");
 	_LIT8(KNodeMimeType, "mimeType");
 	_LIT8(KNodeSifPluginUid, "sifPluginUid");
-	_LIT8(KNodeInstallerSecureId, "installerSecureId");
-	_LIT8(KNodeExecutionLayerSecureId, "executionLayerSecureId");
-	
+    _LIT8(KNodeCustomAcess, "CustomAcess");
+    _LIT8(KNodeSecureId, "SecureId");
+    _LIT8(KNodeAccessMode, "AccessMode");
+    _LIT8(KNodeLauncherExecutable, "launcherExecutable");
+    
 	_LIT8(KAttrSoftwareTypeName, "name");
 	_LIT8(KAttrLanguage, "language");
 
@@ -118,7 +120,7 @@
 	iNodes.Close();
 	}
 
-void CSoftwareTypeRegInfoParser::ParseL(const TDesC8& aDocument, RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray)
+void CSoftwareTypeRegInfoParser::ParseL(const TDesC8& aDocument, RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray)
 	{
 	iSwTypeRegInfoArray = &aSwTypeRegInfoArray;
 	
@@ -175,7 +177,7 @@
 			{
 			PushNodeL(ENodeSoftwareType, ENodeSoftwareTypeRegistrationData);
 			HBufC* softwareTypeName = AttributeLC(aAttributes, KAttrSoftwareTypeName);
-			CSoftwareTypeRegInfo* regInfo = CSoftwareTypeRegInfo::NewL(*softwareTypeName);
+			Usif::CSoftwareTypeRegInfo* regInfo = Usif::CSoftwareTypeRegInfo::NewL(*softwareTypeName);
 			CleanupStack::PushL(regInfo);
 			iSwTypeRegInfoArray->AppendL(regInfo);
 			CleanupStack::Pop();
@@ -202,16 +204,28 @@
 			ASSERT(iSwTypeRegInfoArray->Count() > 0);
 			PushNodeL(ENodeSifPluginUid, ENodeSoftwareType);
 			break;
-		
-		case ENodeInstallerSecureId:
-			ASSERT(iSwTypeRegInfoArray->Count() > 0);
-			PushNodeL(ENodeInstallerSecureId, ENodeSoftwareType);
-			break;
-		
-		case ENodeExecutionLayerSecureId:
-			ASSERT(iSwTypeRegInfoArray->Count() > 0);
-			PushNodeL(ENodeExecutionLayerSecureId, ENodeSoftwareType);
-			break;
+			
+		case ENodeCustomAccess:
+		    {
+		    ASSERT(iSwTypeRegInfoArray->Count() > 0);
+		    PushNodeL(ENodeCustomAccess, ENodeSoftwareType);
+		    HBufC* secureId = AttributeLC(aAttributes, KNodeSecureId);
+		    secureId->Des().TrimAll();
+		    iSecureId = TUid::Uid(Str2IntL(*secureId, EHex));
+		    CleanupStack::PopAndDestroy(secureId);
+		    
+		    HBufC* accessMode = AttributeLC(aAttributes, KNodeAccessMode);
+		    iAccessMode = static_cast<TInt>(Str2IntL(*accessMode));
+		    CleanupStack::PopAndDestroy(accessMode);
+		    }
+		    break;
+		   
+		case ENodeLauncherExecutable:
+		    {
+		    ASSERT(iSwTypeRegInfoArray->Count() > 0);
+		    PushNodeL(ENodeLauncherExecutable, ENodeSoftwareType);
+		    }
+		    break;
 
 		default:
 			User::Leave(KErrInvalidSoftwareTypeRegistrationFile);
@@ -237,13 +251,13 @@
 		}
 	iNodes.Remove(lastIdx);
 
-	RPointerArray<CSoftwareTypeRegInfo>& infoArray = *iSwTypeRegInfoArray;
+	RPointerArray<Usif::CSoftwareTypeRegInfo>& infoArray = *iSwTypeRegInfoArray;
 	switch (node)
 		{
 		case ENodeLocalizedName:
 			{
 			ASSERT(iSwTypeRegInfoArray->Count() > 0);
-			CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
+			Usif::CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
 			HBufC* name = ConvertBufferTo16bitL(*iContentChunks);
 			CleanupStack::PushL(name);
 			name->Des().TrimAll();
@@ -255,7 +269,7 @@
 		case ENodeMimeType:
 			{
 			ASSERT(iSwTypeRegInfoArray->Count() > 0);
-			CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
+			Usif::CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
 			HBufC* mimeType = ConvertBufferTo16bitL(*iContentChunks);
 			CleanupStack::PushL(mimeType);
 			mimeType->Des().TrimAll();
@@ -268,28 +282,31 @@
 			{
 			ASSERT(iSwTypeRegInfoArray->Count() > 0);
 			iContentChunks->Des().TrimAll();
-			CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
+			Usif::CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
 			regInfo.SetSifPluginUid(Str2UidL(*iContentChunks));
 			}
 			break;
-		
-		case ENodeInstallerSecureId:
-			{
-			ASSERT(iSwTypeRegInfoArray->Count() > 0);
-			iContentChunks->Des().TrimAll();
-			CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
-			regInfo.SetInstallerSecureId(Str2UidL(*iContentChunks));
-			}
-			break;
-		
-		case ENodeExecutionLayerSecureId:
-			{
-			ASSERT(iSwTypeRegInfoArray->Count() > 0);
-			iContentChunks->Des().TrimAll();
-			CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
-			regInfo.SetExecutionLayerSecureId(Str2UidL(*iContentChunks));
-			}
-			break;
+
+		case ENodeCustomAccess:
+		    {
+		    ASSERT(iSwTypeRegInfoArray->Count() > 0);
+		    iContentChunks->Des().TrimAll();
+		    Usif::CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
+		    regInfo.SetCustomAccessL(iSecureId, static_cast<Usif::TAccessMode>(iAccessMode));
+		    }
+		    break;
+		    
+		case ENodeLauncherExecutable:
+		    {
+		    ASSERT(iSwTypeRegInfoArray->Count() > 0);
+		    Usif::CSoftwareTypeRegInfo& regInfo = *infoArray[infoArray.Count()-1];
+		    HBufC* launcherExecutable = ConvertBufferTo16bitL(*iContentChunks);
+		    CleanupStack::PushL(launcherExecutable);
+		    launcherExecutable->Des().TrimAll();
+		    regInfo.SetLauncherExecutableL(*launcherExecutable);
+		    CleanupStack::PopAndDestroy(launcherExecutable);        
+		    }
+		    break;
 		}
 	
 	if (iContentChunks != NULL)
@@ -312,8 +329,8 @@
 		case ENodeLocalizedName:
 		case ENodeMimeType:
 		case ENodeSifPluginUid:
-		case ENodeInstallerSecureId:
-		case ENodeExecutionLayerSecureId:
+		case ENodeCustomAccess:  
+		case ENodeLauncherExecutable:
 			AddContentChunkL(aBytes);
 			break;
 
@@ -370,14 +387,6 @@
 		{
 		return ENodeSifPluginUid;
 		}
-	else if (aName == KNodeInstallerSecureId)
-		{
-		return ENodeInstallerSecureId;
-		}
-	else if (aName == KNodeExecutionLayerSecureId)
-		{
-		return ENodeExecutionLayerSecureId;
-		}
 	else if (aName == KNodeSoftwareType)
 		{
 		return ENodeSoftwareType;
@@ -386,6 +395,14 @@
 		{
 		return ENodeSoftwareTypeRegistrationData;
 		}
+	else if (aName == KNodeCustomAcess)
+	    {
+	    return ENodeCustomAccess;
+	    }
+	else if (aName == KNodeLauncherExecutable)
+	    {
+	    return ENodeLauncherExecutable;
+	    }
 	else
 		{
 		return ENodeNone;
--- a/installationservices/swi/source/sislauncher/server/swtypereginfoparser.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/sislauncher/server/swtypereginfoparser.h	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -38,7 +38,7 @@
 		static CSoftwareTypeRegInfoParser* NewL();
 		virtual ~CSoftwareTypeRegInfoParser();
 		
-		void ParseL(const TDesC8& aDocument, RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray);
+		void ParseL(const TDesC8& aDocument, RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray);
 
 	private:
 		// From MContentHandler
@@ -58,9 +58,11 @@
 	private:
 		CSoftwareTypeRegInfoParser();
 		
-		RPointerArray<CSoftwareTypeRegInfo>* iSwTypeRegInfoArray;
+		RPointerArray<Usif::CSoftwareTypeRegInfo>* iSwTypeRegInfoArray;
 		HBufC8* iContentChunks;
 		TLanguage iLocalizedNameLanguage;
+		TSecureId iSecureId;
+		TInt iAccessMode;
 		
 		enum TXmlNode
 			{
@@ -70,8 +72,8 @@
 			ENodeLocalizedName,
 			ENodeMimeType,
 			ENodeSifPluginUid,
-			ENodeInstallerSecureId,
-			ENodeExecutionLayerSecureId
+			ENodeCustomAccess,
+			ENodeLauncherExecutable
 			};
 		RArray<TXmlNode> iNodes;
 		
--- a/installationservices/swi/source/sisregistry/client/sisregistryentry.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/sisregistry/client/sisregistryentry.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -315,6 +315,8 @@
 
 EXPORT_C void RSisRegistryEntry::AugmentationsL(RPointerArray<HBufC>& aPackageNames, RPointerArray<HBufC>& aVendorNames)
 	{
+	CleanupResetAndDestroyPushL(aPackageNames);
+    CleanupResetAndDestroyPushL(aVendorNames);
 	HBufC8* buffer = RSisRegistryEntry::SendReceiveBufferLC(EPackageAugmentations);
 	
 	// create a stream based on the buffer
@@ -340,6 +342,7 @@
 		CleanupStack::Pop(2, vendor);	//vendor package, 
 		}
 	CleanupStack::PopAndDestroy(3, buffer);// buffer, stream, packages
+	CleanupStack::Pop(2, &aPackageNames);
 	}
 
 EXPORT_C void RSisRegistryEntry::AugmentationsL(RPointerArray<CSisRegistryPackage>& aPackages)
@@ -392,6 +395,7 @@
 
 EXPORT_C void RSisRegistryEntry::ControllersL(RPointerArray<HBufC8>& aControllers)
 	{
+	CleanupResetAndDestroyPushL(aControllers);
 	HBufC8* buffer = SendReceiveBufferLC(EControllers);
 	
 	// this call returns pure data, so we don't incur the overheads of the streamstore
@@ -413,6 +417,7 @@
 		}
 	
 	CleanupStack::PopAndDestroy(buffer);
+	CleanupStack::Pop(&aControllers);
 	}
 
 EXPORT_C TChar RSisRegistryEntry::SelectedDriveL()
--- a/installationservices/swi/source/sisregistry/client/sisregistrywritablesession.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/sisregistry/client/sisregistrywritablesession.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -106,7 +106,7 @@
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 EXPORT_C void RSisRegistryWritableSession::AddEntryL(const CApplication& aApplication,
 													 const TDesC8& aController,
-													 const RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray,
+													 const RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray,
 													 TInt64 aTransactionID)
 	{
 	RBuf8 serializedArray;
@@ -223,7 +223,7 @@
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 EXPORT_C void RSisRegistryWritableSession::UpdateEntryL(const CApplication& aApplication, 
 														const TDesC8& aController,
-														const RPointerArray<CSoftwareTypeRegInfo>& aSwTypeRegInfoArray,
+														const RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray,
 														TInt64 aTransactionID)
 	{
 	RBuf8 serializedArray;
@@ -395,4 +395,11 @@
 	TInt returnCode = SendReceive(ESetComponentState, TIpcArgs(&packageComponentId, &packageState));
 	User::LeaveIfError(returnCode);
 	}
+
+EXPORT_C void RSisRegistryWritableSession::SetComponentPresenceL(TComponentId aComponentId, TBool aState)
+    {
+    TPckgC<TComponentId> componentId(aComponentId);
+    TPckgC<TBool> componentPresence(aState);   
+    User::LeaveIfError(SendReceive(ESetComponentPresence, TIpcArgs(&componentId, &componentPresence)));
+    }
 #endif
--- a/installationservices/swi/source/sisregistry/common/sisregistryclientserver.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/sisregistry/common/sisregistryclientserver.h	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -74,6 +74,8 @@
 	EAddDrive,
 #ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	ERemoveDrive,
+#else
+	ESetComponentPresence,
 #endif
 
 	// all clients
--- a/installationservices/swi/source/sisregistry/common/sisregistryhelperclient.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/sisregistry/common/sisregistryhelperclient.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -42,6 +42,7 @@
 
 EXPORT_C void RSisRegistryHelper::GetEquivalentLanguagesL(TLanguage aLangId,RArray<TLanguage>& aEquivLangs)
 	{
+	CleanupClosePushL(aEquivLangs);
 	// calculate the likely size of the data transfer buffer
 	const TInt KMaxBufSize=
 		sizeof(TInt)+                 // number of entries
@@ -69,4 +70,5 @@
 		}
 	// cleanup
 	CleanupStack::PopAndDestroy(2, buf); // buf
+	CleanupStack::Pop(&aEquivLangs);
 	}
--- a/installationservices/swi/source/sisregistry/server/scrhelperutil.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/sisregistry/server/scrhelperutil.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -423,7 +423,7 @@
 		TPtrC fileTargetPtr(fileTarget);
 		if (filenamesArray.SpecificFindInOrder(fileTargetPtr, descriptorsComparator, EArrayFindMode_First) != KErrNotFound)
 			continue; // Skip duplicates
-		filenamesArray.InsertInOrder(fileTargetPtr, descriptorsComparator);
+		filenamesArray.InsertInOrderL(fileTargetPtr, descriptorsComparator);
 		
 		if (IsWildcardFile(fileTarget))
 			{
--- a/installationservices/swi/source/sisregistry/server/siscontrollerverifier.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/sisregistry/server/siscontrollerverifier.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -96,9 +96,11 @@
 void CSisControllerVerifier::CompleteRequestL()
 	{
 	TPckg<TBool> packageResult(isVerified);
-
-	iMessage.WriteL(EIpcArgument0, packageResult);
-	iMessage.Complete(KErrNone);
+	if ( !iMessage.IsNull() )
+		{
+		iMessage.WriteL(EIpcArgument0, packageResult);
+		iMessage.Complete(KErrNone);
+		}
 	}
 	
 TInt CSisControllerVerifier::RunError(TInt)
--- a/installationservices/swi/source/sisregistry/server/sisregistryserver.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/sisregistry/server/sisregistryserver.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -121,14 +121,14 @@
 	iShutdown = NULL; //required in case the server dies before the session
 	}
 
-CSession2* CSisRegistryServer::NewSessionL(const TVersion& aClientVersion, const RMessage2&) const
+CSession2* CSisRegistryServer::NewSessionL(const TVersion& aClientVersion, const RMessage2& aMessage) const
 //
 // Create a new client session. This should really check the version number.
 //
 	{
 	if (aClientVersion == TVersion(1,0,0))
 		{
-		return new(ELeave) CSisRegistrySession();	
+		return new(ELeave) CSisRegistrySession(aMessage.SecureId());
 		}
 	else
 		{
--- a/installationservices/swi/source/sisregistry/server/sisregistryserverconst.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/sisregistry/server/sisregistryserverconst.h	Thu Jul 22 16:35:01 2010 +0100
@@ -49,8 +49,8 @@
 _LIT(KLogDir, "\\sys\\install\\log.txt");
 
 //Location of application registration resource files
-_LIT(KApparcRegFilePath, "\\private\\10003a3f\\apps\\");
-_LIT(KApparcRegFileImportPath, "\\private\\10003a3f\\import\\apps\\");
+_LIT(KApparcRegFilePath, "\\private\\10003a3f\\apps\\*.rsc");
+_LIT(KApparcRegFileImportPath, "\\private\\10003a3f\\import\\apps\\*.rsc");
 }
 
 #endif // __SISREGISTRYSERVERCONST_H__
--- a/installationservices/swi/source/sisregistry/server/sisregistryserversession.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/sisregistry/server/sisregistryserversession.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -31,6 +31,8 @@
 #include <swi/sistruststatus.h>
 #include <swi/sisregistrylog.h>
 #include <scs/ipcstream.h>
+#include <startupdomainpskeys.h>
+#include <e32const.h>
 
 #include "sislauncherclient.h"
 #include "swtypereginfo.h"
@@ -90,20 +92,45 @@
 	// Create a session with the Software Component Registry
 	User::LeaveIfError(iScrSession.Connect());
 
+	iIsFirstInit = IsFirstInvocationL();
+	
+#ifdef __WINSCW__
+	_LIT_SECURE_ID(KAppArcSID, 0x10003A3F);
+	if (KAppArcSID.iId == iClientSid.iId)
+	    {
+        DEBUG_PRINTF(_L8("SIS Registry Server: Init for a connection from AppArc"));
+        ProcessRomApplicationsL();
+	    }
+	else
+	    {
+        if (iIsFirstInit)
+            {
+            DEBUG_PRINTF2(_L8("SIS Registry Server: Init for a connection from SID 0x%X"), iClientSid.iId);
+            ProcessRomStubsL();
+            }
+	    }
+#else
 	TInt res = KErrNone;
 	TRAP(res , res = IsFirmwareUpdatedL());
-	
-	if (IsFirstInvocationL() || res )
+		
+	if (iIsFirstInit || res)
 		{
-		isFwUpdated = ETrue;
+		if (res)
+		    {
+		    iIsFwUpdated = ETrue;
+		    }
+
 		FirstInvocationInitL();
-		TRAP(res, UpdateRecentFWVersionL(););
-		if (res != KErrNone)
-			{
-			// log that
-			DEBUG_PRINTF2(_L8("Updating recent Firmware Version failed with error code = %d."), res);
-			}
+		if (iIsFwUpdated)
+		    {
+			TRAP(res, UpdateRecentFWVersionL());
+			if (res != KErrNone)
+                {
+                DEBUG_PRINTF2(_L8("Updating recent Firmware Version failed with error code = %d."), res);
+                }
+		    }		
 		}
+#endif
 	}
 
 CSisRegistrySession::~CSisRegistrySession()
@@ -135,48 +162,88 @@
 	return firstInvocation;
 	}
 
+void CSisRegistrySession::ProcessRomStubsL()
+    {
+    DEBUG_PRINTF(_L8("SIS Registry Server - Starting processing of ROM Stub sis files"));
+    iScrSession.CreateTransactionL();
+    ProcessRomDriveL();
+    iScrSession.CommitTransactionL();       
+        
+    // Create a file in <systemdrive>:\sys to mark a successful initialization
+    // so that we don't come here again (unless firmware is upgraded in which case <systemdrive>:\sys 
+    // should be cleaned
+    RBuf fileName;
+    CleanupClosePushL(fileName);
+    fileName.CreateL(KMaxPath);
+    TDriveUnit drive(iSystemDrive);
+    fileName = drive.Name();
+    fileName.Append(KSWIRegFirstInitFile);
+    RFile file;
+    CleanupClosePushL(file);
+    file.Replace(iFs, fileName, EFileWrite | EFileShareAny);
+    CleanupStack::PopAndDestroy(2, &fileName);  // file
+    
+    DEBUG_PRINTF(_L8("SIS Registry Server - Completed processing of ROM Stub sis files"));
+    }
+
+void CSisRegistrySession::ProcessRomApplicationsL()
+    {
+    TComponentId compId = 0;
+    DEBUG_PRINTF(_L8("SIS Registry Server - Deleteing all existing ROM applications."));
+    ScrHelperUtil::DeleteApplicationEntriesL(iScrSession, compId);
+    
+    //Register all apps found in \private\10003a3f\apps
+    TDriveUnit romDrive(SisRegistryUtil::SystemRomDrive());
+    RBuf romApparcRegFilePath;
+    romApparcRegFilePath.CreateL(romDrive.Name(), KMaxPath);
+    CleanupClosePushL(romApparcRegFilePath);
+    romApparcRegFilePath.Append(KApparcRegFilePath);
+    RegisterAllInRomAppL(romApparcRegFilePath);
+
+    //Register all apps found in \private\10003a3f\import\apps
+    romApparcRegFilePath = romDrive.Name();
+    romApparcRegFilePath.Append(KApparcRegFileImportPath);
+    RegisterAllInRomAppL(romApparcRegFilePath);
+    CleanupStack::PopAndDestroy(&romApparcRegFilePath);
+    
+    DEBUG_PRINTF(_L8("SIS Registry Server - Completed processing of all existing ROM applications."));
+    }
+
 // Does initialization required when run after very first boot of phone (or after firmware upgrade)
-// Method is only invoked when such a state is detected
+// Method is only invoked when such a state is detected (only in device, NOT in emulator)
 // Leaves behind a file in <systemdrive>:\sys to mark a successful initialization 
 void CSisRegistrySession::FirstInvocationInitL()
 	{
 	// Add the ROM installed stub details to SCR
 	// Create an SCR transaction, so that entries won't be added to the SCR if the function leaves
-	iScrSession.CreateTransactionL();
-	ProcessRomDriveL();
-	iScrSession.CommitTransactionL();
+    TInt value(EIdlePhase1NOK);
+    RProperty::Get(KPSUidStartup, KPSIdlePhase1Ok, value);
 	
-	TComponentId compId = 0;
-	DEBUG_PRINTF(_L8("SIS Registry Server - Deleteing all existing ROM applications."));
-	ScrHelperUtil::DeleteApplicationEntriesL(iScrSession, compId);
-
-	//Register all apps found in \private\10003a3f\apps
-	TDriveUnit romDrive(SisRegistryUtil::SystemRomDrive());
-	RBuf romApparcRegFilePath;
-	romApparcRegFilePath.CreateL(romDrive.Name(), KMaxPath);
-	CleanupClosePushL(romApparcRegFilePath);
-    romApparcRegFilePath.Append(KApparcRegFilePath);
-	RegisterAllInRomAppL(romApparcRegFilePath);
+    TBool isFromSWIDaemon = EFalse;
+    _LIT_SECURE_ID(KSWIDaemonSID, 0x10202DCE);
+    if (KSWIDaemonSID.iId == iClientSid.iId)
+        { 
+        isFromSWIDaemon = ETrue;
+        }
+	if ((value == EIdlePhase1Ok || isFromSWIDaemon) && iIsFirstInit)
+	    {
+        ProcessRomStubsL();
+	    }
 
-	//Register all apps found in \private\10003a3f\import\apps.
-	romApparcRegFilePath = romDrive.Name();
-	romApparcRegFilePath.Append(KApparcRegFileImportPath);
-	RegisterAllInRomAppL(romApparcRegFilePath);
-	CleanupStack::PopAndDestroy(&romApparcRegFilePath);
-	
-	// Create a file in <systemdrive>:\sys to mark a successful initialization
-	// so that we don't come here again (unless firmware is upgraded in which case <systemdrive>:\sys 
-	// should be cleaned
-	RBuf fileName;
-	CleanupClosePushL(fileName);
-	fileName.CreateL(KMaxPath);
-	TDriveUnit drive(iSystemDrive);
-	fileName = drive.Name();
-	fileName.Append(KSWIRegFirstInitFile);
-	RFile file;
-	CleanupClosePushL(file);
-	file.Replace(iFs, fileName, EFileWrite | EFileShareAny);
-	CleanupStack::PopAndDestroy(2, &fileName);	// file
+	if (iIsFwUpdated)
+	    {
+		// Delete the SisRegistry marker file
+        RBuf fileName;
+        CleanupClosePushL(fileName);
+        fileName.CreateL(KMaxPath);
+        TDriveUnit drive(iSystemDrive);
+        fileName = drive.Name();
+        fileName.Append(KSWIRegFirstInitFile);
+        iFs.Delete(fileName);
+        CleanupStack::PopAndDestroy(&fileName);
+
+        ProcessRomApplicationsL();
+	    }
 	}
 
 //
@@ -416,7 +483,10 @@
  		break;	
 	case ESetComponentState:
  		SetComponentStateL(aMessage);
- 		break;	
+ 		break;
+	case ESetComponentPresence:
+	    SetComponentPresenceL(aMessage);
+	    break;
 	case EIsFileRegistered:
  		IsFileRegisteredL(aMessage);
  		break;			
@@ -584,31 +654,13 @@
 	readStream.Open(aMessage, 3);
 	CleanupClosePushL(readStream);
 	
-	RCPointerArray<CSoftwareTypeRegInfo> swTypeRegInfoArray;
+	RCPointerArray<Usif::CSoftwareTypeRegInfo> swTypeRegInfoArray;
 	CleanupClosePushL(swTypeRegInfoArray);
 	SoftwareTypeRegInfoUtils::UnserializeArrayL(readStream, swTypeRegInfoArray);
 	
 	for (TInt i=0; i<swTypeRegInfoArray.Count(); ++i)
 		{
-		const CSoftwareTypeRegInfo& info = *swTypeRegInfoArray[i];
-		const RPointerArray<CLocalizedSoftwareTypeName>& locSwTypeNames = info.LocalizedSoftwareTypeNames();
-		RCPointerArray<Usif::CLocalizedSoftwareTypeName> scrSwTypeNames;
-		CleanupClosePushL(scrSwTypeNames);
-		for (TInt i=0; i<locSwTypeNames.Count(); ++i)
-			{
-			scrSwTypeNames.AppendL(Usif::CLocalizedSoftwareTypeName::NewLC(locSwTypeNames[i]->Name(), locSwTypeNames[i]->Locale()));
-			CleanupStack::Pop();
-			}
-
-		DEBUG_PRINTF2(_L("Sis Registry Server - Adding software type: %S"), &info.UniqueSoftwareTypeName());
-
-		iScrSession.AddSoftwareTypeL(info.UniqueSoftwareTypeName(),
-									 info.SifPluginUid(),
-									 info.InstallerSecureId(),
-									 info.ExecutionLayerSecureId(),
-									 info.MimeTypes(),
-									 &scrSwTypeNames);
-		CleanupStack::PopAndDestroy(&scrSwTypeNames);
+		iScrSession.AddSoftwareTypeL(*swTypeRegInfoArray[i]);
 		}
 	
 	RBuf uniqueNames;
@@ -1012,6 +1064,41 @@
 	CleanupStack::PopAndDestroy();
 	}
 
+TInt CSisRegistrySession::GetStubFilesL(const TDesC& aFileName, RPointerArray<HBufC>& aFileNames)
+    {
+    // Read the ROM stub controller
+    CFileSisDataProvider* fileProvider = CFileSisDataProvider::NewLC(iFs, aFileName);
+    Swi::Sis::CController* stubController = NULL;
+    TRAPD(errCode, stubController = Swi::Sis::CController::NewL(*fileProvider));
+    if (errCode != KErrNone)
+        {
+        // Ignore the broken stub file under the ROM stub directory.
+        DEBUG_PRINTF2(_L8("Sis Registry Server - Failed to read the stub controller. Error code %d."), errCode);
+        CleanupStack::PopAndDestroy(fileProvider);
+        return errCode;
+        }
+    CleanupStack::PushL(stubController);
+    const RPointerArray<Sis::CFileDescription>& depArray = stubController->InstallBlock().FileDescriptions();
+    // Get as many number of files as possible that can be accomodate in client allocated buffer.
+    TInt totalDepArrayCount = depArray.Count();
+    // Populate the files in to a temporary array.
+    for(TInt fileCount = 0; fileCount < totalDepArrayCount; ++fileCount )
+        {
+        // Only create a TPtrC when we know we have space available
+        HBufC* fileName = depArray[fileCount]->Target().Data().AllocL();
+        // Adding drive letter of rom if not mentioned in stub sis file
+        TPtr a=fileName->Des();
+        if (a[0] == '!')
+            a[0] = 'z';                        
+                                       
+		CleanupStack::PushL(fileName);
+		aFileNames.AppendL(fileName);
+		CleanupStack::Pop(fileName);
+		}
+    CleanupStack::PopAndDestroy(2, fileProvider);
+    return KErrNone;
+    }
+
 TInt CSisRegistrySession::GetStubFileInfoL(TUid aUid, TStubExtractionMode aMode, TInt aStartingFileNo, TInt& aFileCount, RPointerArray<HBufC>& aFileNames)
     {
     TBool stubNotFound(ETrue);
@@ -1158,26 +1245,26 @@
 	
 	aMessage.ReadL(EIpcArgument0, executableSid);
 
-	// componentId and index of the first matching Sid in CompSID<index> array gets populated 
-	// by call to GetCompIdAndCompSidIndexL().The value of index is redundant here.
-	TComponentId componentId = 0;
-	TInt index = 0;
-	GetCompIdAndCompSidIndexL(sid, componentId, index);
+	// Retrieve the component Id's list for the Sid.
+	RArray<TComponentId> componentIdList;
+	CleanupClosePushL(componentIdList);
 	
-	if(componentId == KErrNotFound)
+	GetComponentIdsForSidL(sid, componentIdList);
+	
+	if(componentIdList.Count() == 0)
 		{
 		User::Leave(KErrNotFound);
 		}
 		
 	CSisRegistryPackage *package = NULL;
-	ScrHelperUtil::ReadFromScrL(iScrSession, componentId, package);
+	ScrHelperUtil::ReadFromScrL(iScrSession, componentIdList[0], package);
 	CleanupStack::PushL(package);
 	
 	DEBUG_PRINTF5(_L("Sis Registry Server - SID 0x%08x is owned by package UID: 0x%08x, Name: %S, Vendor: %S."),
 		sid.iUid, package->Uid().iUid, &(package->Name()), &(package->Vendor()));
 	
 	SisRegistryUtil::SendDataL(aMessage, *package, EIpcArgument1);
-	CleanupStack::PopAndDestroy(package);
+	CleanupStack::PopAndDestroy(2, &componentIdList);
 	
 	}
 
@@ -1196,19 +1283,13 @@
 
 	// Obtain the componentId and array index of CompSID<index> custom property matching a given aSid.
 	TComponentId componentId = 0;
-	TInt index = 0;
-	GetCompIdAndCompSidIndexL(sid, componentId, index, thirdParameter);
+	HBufC* fileName = SidToFileNameL(sid, componentId, thirdParameter);
 	
 	if(componentId == KErrNotFound)
 		{
 		User::Leave(KErrNotFound);
 		}
-
-  	// retrieve the CompSidFileName property value , based on the index obtained.
-  	TBuf<KSmlBufferSize> compSidFileName(KEmptyString);
-  	compSidFileName.Format(KCompSidFileNameFormat, index);
-		
-	HBufC* fileName = GetStrPropertyValueL(iScrSession, componentId, compSidFileName);
+	
 	CleanupStack::PushL(fileName);
 	DEBUG_PRINTF3(_L("Sis Registry Server - SID 0x%08x maps to file '%S'."),
 		sid.iUid, fileName);
@@ -1343,17 +1424,18 @@
 	aMessage.ReadL(EIpcArgument0, uid);
 	
 	TBool isPresent = EFalse;
-	TComponentId componentId = 0;
-	TInt index = 0;
+	RArray<TComponentId> componentIdList;
+	CleanupClosePushL(componentIdList);
 	
-	// If the supplied SID is present in SCR, then a call to GetCompIdAndCompSidIndexL succeeds.
-	// Else the componenetId will result in KErrNotFound.	
-	GetCompIdAndCompSidIndexL(uid(), componentId, index);
-	if(componentId != KErrNotFound)
+	// If the supplied SID is present in SCR, then a call to GetComponentIdsForSidL succeeds.
+	// Else componentIdList would be empty.	
+	GetComponentIdsForSidL(uid(), componentIdList);
+	
+	if(componentIdList.Count() != 0)
 		{
 		isPresent = ETrue;
 		}
-
+	CleanupStack::PopAndDestroy(&componentIdList);
 	DEBUG_CODE_SECTION(
 		if (isPresent)
 			{
@@ -1444,6 +1526,16 @@
 	aMessage.Complete(KErrNone);
 	}
 
+void CSisRegistrySession::SetComponentPresenceL(const RMessage2& aMessage)
+    {
+    TPckgBuf<Usif::TComponentId> componentId;
+    TPckgBuf<TBool> componentPresence;
+    aMessage.ReadL(EIpcArgument0, componentId, 0);
+    aMessage.ReadL(EIpcArgument1, componentPresence, 0);
+    iScrSession.SetIsComponentPresentL(componentId(), componentPresence());
+    aMessage.Complete(KErrNone);
+    }
+
 // Helper methods
 
 TBool CSisRegistrySession::IsRegisteredL(const TUid& aUid)
@@ -1503,6 +1595,13 @@
 	return ScrHelperUtil::IsUidAndNamePresentL(iScrSession, aUid, aPackageName);
 	}
 
+
+void CSisRegistrySession::RemoveEntryL(const TComponentId aCompId)
+    {
+    iScrSession.DeleteApplicationEntriesL(aCompId);
+    iScrSession.DeleteComponentL(aCompId);
+    }
+
 void CSisRegistrySession::RemoveEntryL(const CSisRegistryPackage& aPackage)
 	{
 	DEBUG_PRINTF4(_L("Sis Registry Server - Removing the entry from Software Component Registry of package : UID: 0x%08x, Name: %S, Vendor: %S ."),
@@ -1517,8 +1616,8 @@
 			aPackage.Uid().iUid, &aPackage.Name(), &aPackage.Vendor());
 		User::Leave(KErrNotFound);
 		}
-	iScrSession.DeleteApplicationEntriesL(compId);
-	iScrSession.DeleteComponentL(compId);
+	
+	RemoveEntryL(compId);
 	}
 
 void CSisRegistrySession::RemoveCleanupInfrastructureL(const CSisRegistryObject& aObject, RStsSession& aStsSession)
@@ -1700,14 +1799,11 @@
 	return compId;
 	}
 	
-void CSisRegistrySession::AddAppEntryL(TComponentId aCompId, TUid aUid)
+void CSisRegistrySession::AddAppsFromStubL(TComponentId aCompId, const TDesC& aFileName)
     {
-    TInt startingFileNo = 0;
-    TInt fileCount = 0;
     RPointerArray<HBufC> romFiles;
     CleanupResetAndDestroy<RPointerArray<HBufC> >::PushL(romFiles);
-    TInt ret = GetStubFileInfoL(aUid, EGetFiles, startingFileNo, fileCount, romFiles);
-
+    TInt ret = GetStubFilesL(aFileName, romFiles);
     RPointerArray<HBufC> apparcRegFiles;
     CleanupResetAndDestroy<RPointerArray<HBufC> >::PushL(apparcRegFiles);
        
@@ -1750,7 +1846,15 @@
 			User::LeaveIfError(file.Open(fs, appFile, EFileRead));
 			Usif::CApplicationRegistrationData* appRegData  = launcher.SyncParseResourceFileL(file, appLanguages);
 			CleanupStack::PushL(appRegData);
-			ScrHelperUtil::AddApplicationEntryL(iScrSession, aCompId, *appRegData);
+			
+			TRAPD(err, ScrHelperUtil::AddApplicationEntryL(iScrSession, aCompId, *appRegData));
+			if (err == KErrAlreadyExists)
+                {
+                // Delete the existing application entry, which is not associated with any package 
+                ScrHelperUtil::DeleteApplicationEntryL(iScrSession, appRegData->AppUid());
+                ScrHelperUtil::AddApplicationEntryL(iScrSession, aCompId, *appRegData);
+                }
+			
 			CleanupStack::PopAndDestroy(appRegData);
 			CleanupStack::PopAndDestroy(2, buf);
 			}
@@ -2222,66 +2326,91 @@
 	CleanupStack::PopAndDestroy(&entryList);
 	}
 
-void CSisRegistrySession::GetCompIdAndCompSidIndexL(const TUid& aSid, TComponentId& aComponentId, TInt& aIndex, TInt aExpectedDrive)
-	{
+void CSisRegistrySession::GetComponentIdsForSidL(TUid aSid, RArray<TComponentId>& aComponentIds)
+	{   
+    _LIT(KComponentSidPropertyRegex, "CompSid%");
 	CComponentFilter* componentFilter = CComponentFilter::NewLC();
 	componentFilter->SetSoftwareTypeL(KSoftwareTypeNative);	
-	componentFilter->AddPropertyL(KCompSidsPresent, 1);
-		
-	// Retrieve the componentId of all the components with SIDs from the SCR.
-	RArray<TComponentId> componentIdList;
-	CleanupClosePushL(componentIdList);
-	iScrSession.GetComponentIdsL(componentIdList, componentFilter);
-		
-	TInt componentCount = componentIdList.Count();
-	RArray<TUid> sidArray;
-	CleanupClosePushL(sidArray);
-	TBool sidMatchFound = EFalse;
-
-	for(TInt i = 0; i < componentCount && !sidMatchFound; ++i)
-		{
-		TComponentId componentId = componentIdList[i];
-		sidArray.Reset();
-		ScrHelperUtil::InternalizeSidArrayL(iScrSession, componentId, sidArray);
-		
-		// index of the first matching SID in the array.
-		aIndex = sidArray.Find(aSid);	
-		if(aIndex == KErrNotFound)
-			continue;
+	componentFilter->AddPropertyL(KComponentSidPropertyRegex, static_cast<TUint>(aSid.iUid), CComponentFilter::ELike, CComponentFilter::EEqual);		
+	
+	// Retrieve all component Id's 
+	iScrSession.GetComponentIdsL(aComponentIds, componentFilter);
+	
+	CleanupStack::PopAndDestroy(componentFilter);
+	}
+	
 
-		// If the search is narrowed to a particular drive, get the file name and check whether it matches the drive
-		if (aExpectedDrive != -1)
-			{
-			TBuf<KSmlBufferSize> compSidFileName(KEmptyString);
-			compSidFileName.Format(KCompSidFileNameFormat, aIndex);
+HBufC* CSisRegistrySession::SidToFileNameL(TUid aSid, TComponentId& aComponentId, TInt aExpectedDrive)
+    {    
+    aComponentId = KErrNotFound;
+    RArray<TComponentId> componentIdList;
+    CleanupClosePushL(componentIdList);
+    
+    // Retrieve the component Id's.
+    GetComponentIdsForSidL(aSid, componentIdList);
+    
+    if(componentIdList.Count() == 0)
+        {
+        CleanupStack::PopAndDestroy(&componentIdList);
+        return NULL;
+        }
+    
+    RArray<TUid> sidArray;
+    CleanupClosePushL(sidArray);
+    TInt index(0);
+    TBuf<KSmlBufferSize> compSidFileName(KEmptyString);
+    HBufC* fileName = NULL;
+    
+    
+    if(aExpectedDrive == -1)
+        {
+        // No drive specified, just return the first component Id and the corresponding Sid index.  
+        aComponentId = componentIdList[0];
+        sidArray.Reset();
+        ScrHelperUtil::InternalizeSidArrayL(iScrSession, aComponentId, sidArray);
+        index = sidArray.Find(aSid);   
+        compSidFileName.Format(KCompSidFileNameFormat, index);   
+        fileName = GetStrPropertyValueL(iScrSession, aComponentId, compSidFileName); 
+        }
+    else
+        {
+        // If the search is narrowed to a particular drive, get the file name and check whether it matches the drive
+    
+        for(TInt i=0; i<componentIdList.Count(); ++i)
+            {
+            sidArray.Reset();
+            ScrHelperUtil::InternalizeSidArrayL(iScrSession, componentIdList[i], sidArray);
+            index = sidArray.Find(aSid);
+            
+            compSidFileName.Format(KCompSidFileNameFormat, index); 
+            fileName = GetStrPropertyValueL(iScrSession, componentIdList[i], compSidFileName);   
+			CleanupStack::PushL(fileName);
+          
+            if (fileName->Length() == 0)
+                {
+				 CleanupStack::PopAndDestroy(fileName);
+                 fileName = NULL;
+                 continue;
+                }
+            
+            TInt drive; 
+            User::LeaveIfError(RFs::CharToDrive((*fileName)[0], drive));
+            if(drive != aExpectedDrive)
+                {
+                CleanupStack::PopAndDestroy(fileName);
+                fileName = NULL;
+                continue;
+                }        
+            
+            //Expected drive found !
+            aComponentId = componentIdList[i];
+			CleanupStack::Pop(fileName);
+            break;
+            }     
+        } 	
+	CleanupStack::PopAndDestroy(2, &componentIdList);	
+	return fileName; // Ownership with caller.
 			
-			HBufC* fileName = GetStrPropertyValueL(iScrSession, componentId, compSidFileName);
-			CleanupStack::PushL(fileName);			
-			if (fileName->Length() == 0)
-				{
-				CleanupStack::PopAndDestroy(fileName);
-				continue;
-				}
-			TInt drive; 
- 			User::LeaveIfError(RFs::CharToDrive((*fileName)[0], drive));
- 			if(drive != aExpectedDrive)
- 				{
-				CleanupStack::PopAndDestroy(fileName);
- 				continue;
- 				}			
-			CleanupStack::PopAndDestroy(fileName);
-			}
-			
-		aComponentId = componentId;
-		sidMatchFound = ETrue;
-		}
-	
-	CleanupStack::PopAndDestroy(3, componentFilter); // componentIdList and sidArray.
-	if(!sidMatchFound)
-		{
-		// No component contains aSid.
-		aComponentId = KErrNotFound;
-		}
 	}
 
 TBool CSisRegistrySession::ModifiableL(const TDesC& aFileName)
@@ -2462,7 +2591,7 @@
 	TBool overwriteRegEntry = EFalse;
 	
     TBool isStubRegistered = IsRegisteredL(object->Uid(), object->Name());
-    if ( isFwUpdated && isStubRegistered )
+    if ( iIsFirstInit && isStubRegistered )
 	    {
 		TComponentId compId = ScrHelperUtil::GetComponentIdL(iScrSession, object->Uid(), object->Index());
 		TSisPackageTrust trustStatus;
@@ -2475,16 +2604,9 @@
             // If the component being removed has registered software types, unregister them now.
             // This operation deletes MIME types mapping from AppArc and therefore is not transactional.
             UnregisterSoftwareTypesL(compId);
-
-            CSisRegistryObject* object = CSisRegistryObject::NewLC();
-            ScrHelperUtil::GetComponentL(iScrSession, compId, *object);
+                
+            RemoveEntryL(compId);           
 
-            DEBUG_PRINTF4(_L("Sis Registry Server - Removing package registry entry for UID: %08x, Name: %S, Vendor %S."),
-                object->Uid().iUid, &(object->Name()), &(object->Vendor()));
-                
-            RemoveEntryL(*object);           
-
-            CleanupStack::PopAndDestroy();
             overwriteRegEntry = ETrue;
 	        }
 	    }
@@ -2494,7 +2616,7 @@
 		{
 		// update cache or just call refresh
 		TComponentId compId = AddEntryL(*object, Usif::EScrCompHidden); // EScrCompHidden is supplied not to create any log for the ROM controller on the SCR side.
-	    AddAppEntryL(compId, object->Uid());
+		AddAppsFromStubL(compId, aFileName);
 		
 		// store a copy of the controller
 		HBufC* name = SisRegistryUtil::BuildControllerFileNameLC(object->Uid(), object->Index(),
@@ -2760,28 +2882,29 @@
 
 void CSisRegistrySession::UpdateRecentFWVersionL()
     {
-        //Write a cache of the ROM version to a separate stream
-        //Build the filename for the cache file
-        TChar sysDrive = RFs::GetSystemDriveChar();
-        TInt maxSizeofFileName = KROMVersionStringCacheDir().Length() + KROMVersionStringCacheFileName().Length() + 1;
-        RBuf romVersionCacheFileName;
-        romVersionCacheFileName.CreateL(maxSizeofFileName);
-        romVersionCacheFileName.CleanupClosePushL();
-        romVersionCacheFileName.Append(sysDrive);
-        romVersionCacheFileName.Append(KROMVersionStringCacheDir());
-        romVersionCacheFileName.Append(KROMVersionStringCacheFileName());
-        
-        //Read the length & value from it, if any.
-        RFileWriteStream romVerStream;
-        User::LeaveIfError(romVerStream.Replace(iFs,romVersionCacheFileName,EFileWrite));
-        CleanupClosePushL(romVerStream);
-        TBuf<KInfoBufLength> version;
-        GetSWVersion(version);
+    //Write a cache of the ROM version to a separate stream
+    //Build the filename for the cache file
+    TChar sysDrive = RFs::GetSystemDriveChar();
+    TInt maxSizeofFileName = KROMVersionStringCacheDir().Length() + KROMVersionStringCacheFileName().Length() + 1;
+    RBuf romVersionCacheFileName;
+    romVersionCacheFileName.CreateL(maxSizeofFileName);
+    romVersionCacheFileName.CleanupClosePushL();
+    romVersionCacheFileName.Append(sysDrive);
+    romVersionCacheFileName.Append(KROMVersionStringCacheDir());
+    romVersionCacheFileName.Append(KROMVersionStringCacheFileName());
+    
+    iFs.MkDirAll(romVersionCacheFileName);
+    //Read the length & value from it, if any.
+    RFileWriteStream romVerStream;
+    User::LeaveIfError(romVerStream.Replace(iFs,romVersionCacheFileName,EFileWrite));
+    CleanupClosePushL(romVerStream);
+    TBuf<KInfoBufLength> version;
+    GetSWVersion(version);
 
-        // Write even if SysUtil returns err since all conditions are taken care during restore.
-        romVerStream.WriteUint32L(version.Length());
-        romVerStream.WriteL(version);
-        CleanupStack::PopAndDestroy(2); //romVerStream, romVersionCacheFileName
+    // Write even if SysUtil returns err since all conditions are taken care during restore.
+    romVerStream.WriteUint32L(version.Length());
+    romVerStream.WriteL(version);
+    CleanupStack::PopAndDestroy(2); //romVerStream, romVersionCacheFileName
     }
 
 void CSisRegistrySession::AppRegInfoEntryL(const RMessage2& aMessage)
@@ -2894,7 +3017,7 @@
 		appLanguages.AppendL(User::Language());
 		for (TInt index = 0; index < count; ++index)
 			{
-			appRegFileName = aRomApparcRegFilePath;
+			appRegFileName = TParsePtrC(aRomApparcRegFilePath).DriveAndPath();
 			appRegFileName.Append((*dir)[index].iName);
 			RFile file;
 			CleanupClosePushL(file);
--- a/installationservices/swi/source/sisregistry/server/sisregistryserversession.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/sisregistry/server/sisregistryserversession.h	Thu Jul 22 16:35:01 2010 +0100
@@ -86,6 +86,8 @@
 	TInt GetAugmentationCountL(const TUid& aUid);
 	TBool IdentifyControllerL(Usif::TComponentId aComponentId, const TDesC& aFileName); // Used by CSisRegistrySubSession
 
+	CSisRegistrySession(TSecureId aClientSid);
+	
 private:
 	~CSisRegistrySession();
 	
@@ -159,12 +161,14 @@
 
 	//sets a particular component's state to the requested value
 	void SetComponentStateL(const RMessage2& aMessage);
+	void SetComponentPresenceL(const RMessage2& aMessage);
 
 	// Helper methods
 	TBool IsRegisteredL(const TUid& aUid);
 	TBool IsRegisteredL(const CHashContainer& aHashContainer);
 	TBool IsRegisteredL(const TUid& aUid, const TDesC& aPackageName);
 
+	void RemoveEntryL(const Usif::TComponentId aCompId);
 	void RemoveEntryL(const CSisRegistryPackage& aPackage);
 	void RemoveCleanupInfrastructureL(const CSisRegistryObject& aObject, Usif::RStsSession& aStsSession);
 	TBool RemoveControllerL(const CSisRegistryObject& aObject, Usif::RStsSession& aStsSession, TInt aDrive);
@@ -172,7 +176,7 @@
 	TUint FixedDrivesL() const;
 	Usif::TComponentId AddRegistryEntryL(CSisRegistryObject& aObject, Usif::RStsSession& aStsSession, const TDesC8& aController, Usif::TScrComponentOperationType aOpType);
 	Usif::TComponentId AddEntryL(CSisRegistryObject& aObject, Usif::TScrComponentOperationType aOpType);
-	void AddAppEntryL(Usif::TComponentId aCompId, TUid aUid);
+	void AddAppsFromStubL(Usif::TComponentId aCompId, const TDesC& aFileName);
 	void AddControllerL(const CSisRegistryObject& aObject, Usif::RStsSession& aStsSession, const TDesC8& aBuffer, const TInt aDrive);
 	void AddCleanupInfrastructureL(CSisRegistryObject& aObject, Usif::RStsSession& aStsSession, const TDesC8& aControllerBuffer);
 	TUint CreateSubsessionHandleL(const TUid& aPackageUid);
@@ -185,7 +189,8 @@
 	void ProcessRemovableDriveL(TInt aDrive);
 	void DiscoverControllersL(const TDesC& aRegistryPath, const TDesC& aDirectoryName);
 	void ExecuteUninstallLogL(const TDesC& aUninstallLogFile, const TDesC& aControllerFile);
-	void GetCompIdAndCompSidIndexL(const TUid& aSid, Usif::TComponentId& aComponentId, TInt& aIndex, TInt aExpectedDrive = -1);
+	void GetComponentIdsForSidL(TUid aSid, RArray<Usif::TComponentId>& aComponentIds);
+	HBufC* SidToFileNameL(TUid aSid, Usif::TComponentId& aComponentId, TInt aExpectedDrive);
 	TBool ModifiableL(const TDesC& aFileName);
 	CHashContainer* HashL(const TDesC& aFileName);
 	void RemovablePackageListL(RPointerArray<CSisRegistryPackage>& aPackages);
@@ -193,12 +198,13 @@
 	void RegisterInRomControllerL(const TDesC& aFileName);
 	void RegisterSoftwareTypesL(Usif::TComponentId aComponentId, const RMessage2& aMessage);
 	void UnregisterSoftwareTypesL(Usif::TComponentId aComponentId);
-
 	
-	TBool IsFirmwareUpdatedL();
-	 
+	void ProcessRomStubsL();
+	void ProcessRomApplicationsL();
+	TBool IsFirmwareUpdatedL();	 
 	void  UpdateRecentFWVersionL(); 
 	TInt GetStubFileInfoL(TUid aUid, TStubExtractionMode aMode, TInt aStartingFileNo, TInt& aFileCount, RPointerArray<HBufC>& aFileNames);
+	TInt GetStubFilesL(const TDesC& aFileName, RPointerArray<HBufC>& aFileNames);
 
 private:
     friend class CSisRevocationManager;
@@ -216,7 +222,9 @@
 	// Session handle to Software Component Registry
 	Usif::RSoftwareComponentRegistry iScrSession;
 
-	TBool isFwUpdated;
+	TSecureId iClientSid;
+	TBool iIsFwUpdated;
+	TBool iIsFirstInit;
 	};
 
 inline RFs& CSisRegistrySession::Fs()
@@ -235,6 +243,12 @@
 	return iScrSession;
 	}
 
+inline CSisRegistrySession::CSisRegistrySession(TSecureId aClientSid)
+    :CSession2()
+    {
+    iClientSid = aClientSid;
+    }
+
 } //namespace
 
 #endif // __SISREGISTRYSERVERSESSION_H__
--- a/installationservices/swi/source/sisregistry/server_legacy/sisregistrycache.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/sisregistry/server_legacy/sisregistrycache.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -1147,6 +1147,7 @@
 void CSisRegistryCache::GenerateControllersArrayL(const CSisRegistryObject& aObject, 
 												RPointerArray<HBufC8>& aControllers)
 	{
+	CleanupResetAndDestroyPushL(aControllers);
 	aControllers.ResetAndDestroy();
 	
 	// read the controller for every member of the list	
@@ -1158,6 +1159,7 @@
 		aControllers.AppendL(buffer);
 		CleanupStack::Pop(buffer);
 		}
+	CleanupStack::Pop(&aControllers);
 	}	
 		
 void CSisRegistryCache::AddControllerL(const CSisRegistryObject& aObject, 
--- a/installationservices/swi/source/swis/server/installationplanner.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/swis/server/installationplanner.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1150,27 +1150,27 @@
             CleanupStack::PushL(targetFileName);
             TParsePtrC filename(*targetFileName);	    	   
             TBool isApparcFile = EFalse;
-            TBuf<10> extension = TParsePtrC(*targetFileName).Ext();
+            HBufC* extension = TParsePtrC(*targetFileName).Ext().AllocLC();
             
-            if(!extension.Compare(KApparcRegistrationFileExtn)) // for resource files *_reg.rsc or *.rsc
+            if(!extension->Compare(KApparcRegistrationFileExtn)) // for resource files *_reg.rsc or *.rsc
                 {
                 isApparcFile = ETrue;
                 }
             else
                 {
-                TInt extnLength = extension.Length();
+                TInt extnLength = extension->Length();
                 HBufC* extn;
                 if(extnLength == 4)                            //for localizable resource files with extn like .r01
                     {
-                    extn = extension.Right(2).AllocLC();
+                    extn = extension->Right(2).AllocLC();
                     }
                 else if(extnLength == 5)
                     {
-                    extn = extension.Right(3).AllocLC();       //for localizable resource files with extn like .r101	            
+                    extn = extension->Right(3).AllocLC();       //for localizable resource files with extn like .r101	            
                     }
                 else
                     {   
-                    CleanupStack::PopAndDestroy(targetFileName);
+                    CleanupStack::PopAndDestroy(2, targetFileName);  //extension
                     continue;
                     }
     
@@ -1193,61 +1193,61 @@
                 listOfFilesToBeExtracted.AppendL(listOfFilesToBeAdded[i]);
                 totalApplicationDataSize += listOfFilesToBeAdded[i]->UncompressedLength();
                 }	    
-            CleanupStack::PopAndDestroy(targetFileName);  	    
+            CleanupStack::PopAndDestroy(2, targetFileName);  //extension	    
             }                   
             
-            //Here we do extraction of rsc files ,before extracting files we check if there is an enough space on the disk(C drive)
-            //to extract the files then extract the file to a temporary location and
-            //check if it is a registration resource file(using target path) then store it into an array.     
-            TInt noOfFilesToBeExtracted = listOfFilesToBeExtracted.Count();            
-            DEBUG_PRINTF2(_L("Total number resource files (registration/localizable)to be extracted is %d"), noOfFilesToBeExtracted);            
-            if(0 != noOfFilesToBeExtracted)
-                {	
-                
-                //Check if there is enough space to extract the resource (registration or localizable) files    
-                if(totalApplicationDataSize > currentAvailableDriveSpace)
-                    {
-                    //No memory to extract the file
-                    User::LeaveIfError(KErrDiskFull);
-                    }
+        //Here we do extraction of rsc files ,before extracting files we check if there is an enough space on the disk(C drive)
+        //to extract the files then extract the file to a temporary location and
+        //check if it is a registration resource file(using target path) then store it into an array.     
+        TInt noOfFilesToBeExtracted = listOfFilesToBeExtracted.Count();            
+        DEBUG_PRINTF2(_L("Total number resource files (registration/localizable)to be extracted is %d"), noOfFilesToBeExtracted);            
+        if(0 != noOfFilesToBeExtracted)
+            {	
+            
+            //Check if there is enough space to extract the resource (registration or localizable) files    
+            if(totalApplicationDataSize > currentAvailableDriveSpace)
+                {
+                //No memory to extract the file
+                User::LeaveIfError(KErrDiskFull);
+                }
+            
+            //Extraction of rsc file to a temporary location and if it is a reg resource filr append t to an array for parsing
+            for (TInt i = 0 ; i < noOfFilesToBeExtracted ; i++)
+                {
+                TFileName resourceFileName;    
+                _LIT(KResourceFileNameFmt, "%c:\\resource\\install\\temp\\0x%08x\\%S"); // Pakage Uid  
+                TFileName finalToBeExtracted = TParsePtrC(listOfFilesToBeExtracted[i]->Target()).NameAndExt();              	             	                 
+                resourceFileName.Format(KResourceFileNameFmt, TUint(systemDrive), aController.Info().Uid().Uid().iUid,
+                        &finalToBeExtracted);
                 
-                //Extraction of rsc file to a temporary location and if it is a reg resource filr append t to an array for parsing
-                for (TInt i = 0 ; i < noOfFilesToBeExtracted ; i++)
-                    {
-                    TFileName resourceFileName;    
-                    _LIT(KResourceFileNameFmt, "%c:\\resource\\install\\temp\\0x%08x\\%S"); // Pakage Uid  
-                    TFileName finalToBeExtracted = TParsePtrC(listOfFilesToBeExtracted[i]->Target()).NameAndExt();              	             	                 
-                    resourceFileName.Format(KResourceFileNameFmt, TUint(systemDrive), aController.Info().Uid().Uid().iUid,
-                            &finalToBeExtracted);
-                    
-                     TInt err = fs.MkDirAll(resourceFileName);
-                     if (err!= KErrNone && err != KErrAlreadyExists)
-                         User::LeaveIfError(err);                                           
+                 TInt err = fs.MkDirAll(resourceFileName);
+                 if (err!= KErrNone && err != KErrAlreadyExists)
+                     User::LeaveIfError(err);                                           
+                              
+                 RFile resourceFile;    
+                 User::LeaveIfError(resourceFile.Replace(fs, resourceFileName, 
+                     EFileStream|EFileWrite|EFileRead|EFileShareExclusive));
+                 CleanupClosePushL(resourceFile);	         	         
+                 
+                 // Extract resource file to a temporary file.
+                 DEBUG_PRINTF2(_L("Current resource file (registration/localizable) to be extraced is %S"), &resourceFileName);
+                 User::LeaveIfError(iSisHelper.ExtractFileL(fs, resourceFile,
+                         listOfFilesToBeExtracted[i]->Index(), application->AbsoluteDataIndex(), UiHandler()));	 
+                 
+                 CleanupStack::PopAndDestroy(&resourceFile);
                                   
-                     RFile resourceFile;    
-                     User::LeaveIfError(resourceFile.Replace(fs, resourceFileName, 
-                         EFileStream|EFileWrite|EFileRead|EFileShareExclusive));
-                     CleanupClosePushL(resourceFile);	         	         
+                 // If target of the file is apparc's private folder then it is registration resource file for an app
+                 TParsePtrC filename(listOfFilesToBeExtracted[i]->Target());
+                 if (filename.Path().Left(KApparcRegDir().Length()).CompareF(KApparcRegDir) == 0)
+                     {
+                     HBufC* regResourceFileName = resourceFileName.AllocL();
                      
-                     // Extract resource file to a temporary file.
-                     DEBUG_PRINTF2(_L("Current resource file (registration/localizable) to be extraced is %S"), &resourceFileName);
-                     User::LeaveIfError(iSisHelper.ExtractFileL(fs, resourceFile,
-                             listOfFilesToBeExtracted[i]->Index(), application->AbsoluteDataIndex(), UiHandler()));	 
-                     
-                     CleanupStack::PopAndDestroy(&resourceFile);
-                                      
-                     // If target of the file is apparc's private folder then it is registration resource file for an app
-                     TParsePtrC filename(listOfFilesToBeExtracted[i]->Target());
-                     if (filename.Path().Left(KApparcRegDir().Length()).CompareF(KApparcRegDir) == 0)
-                         {
-                         HBufC* regResourceFileName = resourceFileName.AllocL();
-                         
-                         regFilesArray.AppendL(regResourceFileName);   	             
-                         }   
-                     }
-                //Since the files have been extracted the available disk space is reduced
-                currentAvailableDriveSpace -= totalApplicationDataSize;                
-                }            
+                     regFilesArray.AppendL(regResourceFileName);   	             
+                     }   
+                 }
+            //Since the files have been extracted the available disk space is reduced
+            currentAvailableDriveSpace -= totalApplicationDataSize;                
+            }            
     
         DEBUG_PRINTF(_L8("Finished extracting all resource files (registration/localizable) successfuly"));
         //Pass each registration resource file to the parser to fetch the app info  and then if icon file is present fetch the icon file
@@ -1289,117 +1289,128 @@
                 }
             
             CleanupStack::PushL(appData);
-            TUid appuid = appData->AppUid();
-            HBufC* appname = appData->AppFile().AllocLC();
-            TBuf<100> finalAppName = TParsePtrC(*appname).NameAndExt();
+            TUid appuid = appData->AppUid();            
+            HBufC* finalAppName = TParsePtrC(appData->AppFile()).NameAndExt().AllocLC();
             const RPointerArray<Usif::CLocalizableAppInfo> aLocalizableAppInfoList = appData->LocalizableAppInfoList();
             HBufC* groupName = NULL;
             HBufC* iconFileName = NULL;
             TInt fileSize = 0 ;
             
-            //If localizable info for an app is present then get the localized group name else get it from app registration data 
+            //If localizable info for an app is present get the localized group name, else get it from app registration data 
             if(0 == aLocalizableAppInfoList.Count())
                 {
-                groupName = appData->GroupName().AllocLC();
-                DEBUG_PRINTF2(_L("Application Group Name %S"), groupName);
+                if(appData->GroupName().Length())
+                    {
+                    groupName = appData->GroupName().AllocLC();
+                    DEBUG_PRINTF2(_L("Application Group Name %S"), groupName);
+                    }
                 //Since locale does not exists no need to extract, create CNativeApplicationInfo without iconFileName
-                applicationInfo = Swi::CNativeComponentInfo::CNativeApplicationInfo::NewLC(appuid, finalAppName, *groupName, *iconFileName);  
+                applicationInfo = Swi::CNativeComponentInfo::CNativeApplicationInfo::NewLC(appuid, *finalAppName, groupName?*groupName:_L(""), _L(""));  
                 }
             else
                 {
                 Usif::CLocalizableAppInfo* localizedInfo = NULL;
                 const Usif::CCaptionAndIconInfo* captionAndIconInfo = NULL;
                 localizedInfo = aLocalizableAppInfoList[0];
-                groupName = localizedInfo->GroupName().AllocLC();	
+                if(localizedInfo->GroupName().Length())
+                    {
+                    groupName = localizedInfo->GroupName().AllocLC();
+                    }
                 captionAndIconInfo = localizedInfo->CaptionAndIconInfo();
                 //Check if caption and icon info for an app is present or not, if present extract the icon file.
                 if(captionAndIconInfo)
                     {
-                    TBuf<100> finalIconFileName;	            
-                    iconFileName = captionAndIconInfo->IconFileName().AllocLC();
+                    if(captionAndIconInfo->IconFileName().Length())
+                        iconFileName = captionAndIconInfo->IconFileName().AllocLC();
+                    
                     if(iconFileName != NULL)
-                      {	              
-                      finalIconFileName = TParsePtrC(*iconFileName).NameAndExt();
+                        {                        
+                        HBufC* finalIconFileName = TParsePtrC(*iconFileName).NameAndExt().AllocLC();
+                        
+                        _LIT(KIconFileNameFmt, "%c:\\resource\\install\\icon\\0x%08x\\%S");     // Applicaiton Uid
+                        iconFile.Format(KIconFileNameFmt, TUint(systemDrive), appuid.iUid,
+                        finalIconFileName);
+                        
+                        TInt err = fs.MkDirAll(iconFile);
+                        if (err!= KErrNone && err != KErrAlreadyExists)
+                        User::LeaveIfError(err);
+                        
+                        //Find from the list of files to be copied , the file description of the icon file returned by the parser
+                        for(TInt k = 0; k < listOfFilesToBeAdded.Count() ; k++)
+                            {                      
+                            currentFileDescription = listOfFilesToBeAdded[k];
+                            if(TParsePtrC(currentFileDescription->Target()).NameAndExt().Compare(*finalIconFileName))
+                                {
+                                break;
+                                }
+                            }	              
+                        //Check if there is enough space to extract the icon file           
+                        fileSize = currentFileDescription->UncompressedLength();
+                        if(currentAvailableDriveSpace <  fileSize)
+                            {
+                            //No memory to extract the file
+                            User::LeaveIfError(KErrDiskFull);
+                            }
                         
-                      _LIT(KIconFileNameFmt, "%c:\\resource\\install\\icon\\0x%08x\\%S");     // Applicaiton Uid
-                      iconFile.Format(KIconFileNameFmt, TUint(systemDrive), appuid.iUid,
-                            &finalIconFileName);
-                      
-                      TInt err = fs.MkDirAll(iconFile);
-                      if (err!= KErrNone && err != KErrAlreadyExists)
-                          User::LeaveIfError(err);
-                      
-                      //Find from the list of files to be copied , the file description of the icon file returned by the parser
-                      for(TInt k = 0; k < listOfFilesToBeAdded.Count() ; k++)
-                          {                      
-                          currentFileDescription = listOfFilesToBeAdded[k];
-                          if(TParsePtrC(currentFileDescription->Target()).NameAndExt().Compare(finalIconFileName))
-                              {
-                              break;
-                              }
-                          }	              
-                      //Check if there is enough space to extract the icon file           
-                      fileSize = currentFileDescription->UncompressedLength();
-                      if(currentAvailableDriveSpace <  fileSize)
-                         {
-                         //No memory to extract the file
-                         User::LeaveIfError(KErrDiskFull);
-                         }
-                      
-                      //Extracting the icon file to a temp location
-                      RFile tempIconFile;
-                      TInt index = 1;
-                      TBuf<10>  integerAppendStr;
-                      // Check if file already exists, if yes then create file with another name (e.g. *_1 or *_2)
-                      while(1)
-                          {	                  
-                          err = tempIconFile.Create(fs, iconFile, EFileStream|EFileWrite|EFileRead|EFileShareExclusive);
-                          if(err == KErrAlreadyExists)
-                              {	                     
-                              integerAppendStr.TrimAll();
-                              integerAppendStr.Format(_L("%d"), index++);
-                              TInt pos = iconFile.Length()-TParsePtrC(iconFile).Ext().Length();
-                              iconFile.Insert(pos,integerAppendStr);	                      
-                              }
-                          else if(err == KErrNone)
-                              {
-                              //Everthing is fine, proceed	                      
-                              break;               
-                              }
-                          else
-                              {
-                              tempIconFile.Close();
-                              User::Leave(err);
-                              }
-                          }
-                      CleanupClosePushL(tempIconFile);  
-                      
-                      DEBUG_PRINTF2(_L("Icon file to be extraced is %S"), &iconFile);
-                      User::LeaveIfError(iSisHelper.ExtractFileL(fs, tempIconFile, listOfFilesToBeAdded[i]->Index(), application->AbsoluteDataIndex(), UiHandler())); 	              
-                      DEBUG_PRINTF(_L8("Finished extracting Icon file successfuly"));
-                      //After copy the available disk space is reduced
-                      currentAvailableDriveSpace -= fileSize;
-                      CleanupStack::PopAndDestroy(2,iconFileName);  //file,iconFileSize
-                      
-                      //Create CNativeApplicationInfo with iconFileName
-                      applicationInfo = Swi::CNativeComponentInfo::CNativeApplicationInfo::NewLC(appuid, finalAppName, *groupName, iconFile);                  
-                      }
+                        //Extracting the icon file to a temp location
+                        RFile tempIconFile;
+                        TInt index = 1;
+                        TBuf<10>  integerAppendStr;
+                        // Check if file already exists, if yes then create file with another name (e.g. *_1 or *_2)
+                        while(1)
+                            {	                  
+                            err = tempIconFile.Create(fs, iconFile, EFileStream|EFileWrite|EFileRead|EFileShareExclusive);
+                            if(err == KErrAlreadyExists)
+                                {	                     
+                                integerAppendStr.TrimAll();
+                                integerAppendStr.Format(_L("%d"), index++);
+                                TInt pos = iconFile.Length()-TParsePtrC(iconFile).Ext().Length();
+                                iconFile.Insert(pos,integerAppendStr);	                      
+                                }
+                            else if(err == KErrNone)
+                                {
+                                //Everthing is fine, proceed	                      
+                                break;               
+                                }
+                            else
+                                {
+                                tempIconFile.Close();
+                                User::Leave(err);
+                                }
+                            }
+                        CleanupClosePushL(tempIconFile);  
+                        
+                        DEBUG_PRINTF2(_L("Icon file to be extraced is %S"), &iconFile);
+                        User::LeaveIfError(iSisHelper.ExtractFileL(fs, tempIconFile, listOfFilesToBeAdded[i]->Index(), application->AbsoluteDataIndex(), UiHandler())); 	              
+                        DEBUG_PRINTF(_L8("Finished extracting Icon file successfuly"));
+                        //After copy the available disk space is reduced
+                        currentAvailableDriveSpace -= fileSize;                        
+                        CleanupStack::PopAndDestroy(3,iconFileName);  //file,finalIconFileName,iconFileSize
+                        
+                        //Create CNativeApplicationInfo with iconFileName
+                        applicationInfo = Swi::CNativeComponentInfo::CNativeApplicationInfo::NewLC(appuid, *finalAppName, groupName?*groupName:_L(""), iconFile);                                          
+                        }
                     else
-                      {
-                      //Since iconFileName does not exists no need to extract, create CNativeApplicationInfo without iconName
-                      applicationInfo = Swi::CNativeComponentInfo::CNativeApplicationInfo::NewLC(appuid, finalAppName, *groupName, *iconFileName);  
-                      }
-                }
-             }	    
-           
+                        {
+                        //Since iconFileName does not exists no need to extract, create CNativeApplicationInfo without iconName
+                        applicationInfo = Swi::CNativeComponentInfo::CNativeApplicationInfo::NewLC(appuid, *finalAppName, groupName?*groupName:_L(""), _L(""));  
+                        }
+                    }
+                }	    
+
             DEBUG_PRINTF2(_L("Application Uid 0x%08x"), appuid);
-            DEBUG_PRINTF2(_L("Application Name %S"), appname);
-            DEBUG_PRINTF2(_L("Application Group Name %S"), groupName);
-            DEBUG_PRINTF2(_L("Application Icon File Name %S"), &iconFile);
+            DEBUG_PRINTF2(_L("Application Name %S"), finalAppName);
+            if(groupName)
+                DEBUG_PRINTF2(_L("Application Group Name %S"), groupName);
+            if(iconFile.Length())
+                DEBUG_PRINTF2(_L("Application Icon File Name %S"), &iconFile);
                              
             const_cast <Sis::CController&>(aController).AddApplicationInfoL(applicationInfo);
             CleanupStack::Pop(applicationInfo);
-            CleanupStack::PopAndDestroy(3, appData);	//groupName,appName,appData
+            if(groupName)
+                CleanupStack::PopAndDestroy(3, appData);	//groupName,finalAppName,appData
+            else
+                CleanupStack::PopAndDestroy(2, appData);    //finalAppName,appData
             languages.Close();	    
             }
               
@@ -1418,7 +1429,7 @@
 	// Some files may need to be questioned of overwrite only when the planner is not in info collection mode.
 	if (!IsInInfoCollectionMode())	
 	#endif
-	 //Some files may need to be questioned of overwrite
+	//Some files may need to be questioned of overwrite
 		WarnEclipseOverWriteL(*application);
  	
  	// Reset the file list array for next controller use
--- a/installationservices/swi/source/swis/server/installationprocessor.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/swis/server/installationprocessor.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -582,6 +582,10 @@
 	iFilesToCopyCurrent = 0;
 	iFilesToCopy.ResetAndDestroy();
 	iApparcRegFiles.ResetAndDestroy();
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	iApparcRegFilesForParsing.ResetAndDestroy();
+	iApparcRegFileData.ResetAndDestroy();
+#endif
 	return ETrue;
 	}
 	
@@ -995,7 +999,6 @@
 	iFilesToCopy.ResetAndDestroy();
 
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK	
-	
 	RArray<TAppUpdateInfo> affectedApps;    
 	CleanupClosePushL(affectedApps);
 	const CApplication& application = ApplicationL();
@@ -1233,7 +1236,7 @@
 	//if there are reg files in the package or if its an upgrade (in case of SA (with app) over SA(with no app))
 	if(iApparcRegFilesForParsing.Count() != 0 || application.IsUpgrade())
 	    {
-	    //Create the list of Application Uids which are affected by the Restore                           
+	    //Create the list of Application Uids which are affected by the Installation                           
         RArray<Usif::TComponentId> componentIds;
         CleanupClosePushL(componentIds);
         RArray<TUid> newAppUids;    
@@ -1273,11 +1276,33 @@
            {
            DEBUG_PRINTF2(_L("AppUid is 0x%x"), affectedApps[i].iAppUid);
            DEBUG_PRINTF2(_L("Action is %d"), affectedApps[i].iAction);
-           }   
+           }
+        
+        //Updating apps to be notified
+        RArray<TAppUpdateInfo> currentNotifiableApps;
+        CleanupClosePushL(currentNotifiableApps);
+        const_cast<CPlan&>(Plan()).GetAffectedApps(currentNotifiableApps);
+        TInt appCount = affectedApps.Count();
+        for(TInt k = 0; k < appCount ; ++k)
+            {
+            TInt count = currentNotifiableApps.Count();
+            TUid appUid = affectedApps[k].iAppUid;
+            //compare the apps present in the package currently being processed with the existing set of affected apps,
+            //if alredy exists then update else add it to the list
+            for(TInt index = 0; index < count ; ++index)
+               {
+               if(appUid == currentNotifiableApps[index].iAppUid)
+                   {           
+                   currentNotifiableApps.Remove(index);                                    
+                   }
+               }
+            currentNotifiableApps.AppendL(affectedApps[k]);
+            }
+        
         const_cast<CPlan&>(Plan()).ResetAffectedApps();
-        const_cast<CPlan&>(Plan()).SetAffectedApps(affectedApps);
+        const_cast<CPlan&>(Plan()).SetAffectedApps(currentNotifiableApps);
         
-        CleanupStack::PopAndDestroy(2, &componentIds);
+        CleanupStack::PopAndDestroy(3, &componentIds);
 	    }
 	CleanupStack::PopAndDestroy(&affectedApps);
 #endif
--- a/installationservices/swi/source/swis/server/installationprocessor.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/swis/server/installationprocessor.h	Thu Jul 22 16:35:01 2010 +0100
@@ -359,7 +359,7 @@
 	
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	/** The list of the software types to be registered read from the XML registration file. */
-	RCPointerArray<CSoftwareTypeRegInfo> iSoftwareTypeRegInfoArray;
+	RCPointerArray<Usif::CSoftwareTypeRegInfo> iSoftwareTypeRegInfoArray;
 	RPointerArray<Usif::CApplicationRegistrationData> iApparcRegFileData;
    /**
      * The list of Apparc registration files to parse to populate SCR
--- a/installationservices/swi/source/swis/server/installmachine.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/swis/server/installmachine.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -81,7 +81,7 @@
 	RSisLauncherSession launcher;
 	CleanupClosePushL(launcher);
 	User::LeaveIfError(launcher.Connect());
-	RPointerArray<Usif::CApplicationRegistrationData> emptyAppRegDataArray;
+	RArray<TAppUpdateInfo> emptyAppRegDataArray;
 	launcher.NotifyNewAppsL(emptyAppRegDataArray);
 	CleanupStack::PopAndDestroy(&launcher);
 	}
@@ -540,25 +540,23 @@
 	             
             // Read-in the values of the settings - KAllowSelfSignedInstallKey. 
             // These will retain the default values if any error occurs.
-
 	        TRAPD(err, (allowSelfSigned = secSettingsSession.SettingValueL(KUidInstallationRepository , KAllowSelfSignedInstallKey)));
-
-	        if( err == KErrNone || err == KErrSettingNotFound || err == KErrNotFound || err == KErrCorrupt)
-				{
-                 if (err == KErrCorrupt)
-	                {
-                         DEBUG_PRINTF(_L8("Install Machine - CenRep file 2002cff6.txt is corrupt. Using Default Value to Install."));
-	                }
-				                  
-	             if (!allowSelfSigned || !SecurityAlertL(ETrue))
-					{
-	                 User::Leave(KErrCancel);
-					}
-				}
-	        else
-				{
-	              User::Leave(err);
-				}
+            if (err == KErrNone || err == KErrSettingNotFound || err == KErrNotFound || err == KErrCorrupt)
+                {
+                if (err == KErrCorrupt)
+                    {
+                    DEBUG_PRINTF(_L8("Install Machine - CenRep file 2002cff6.txt is corrupt. Using Default Value to Install."));
+                    }
+                
+                if (!allowSelfSigned || !SecurityAlertL(ETrue))
+                    {
+                    User::Leave(KErrCancel);
+                    }
+                }
+            else
+                {
+                User::Leave(err);
+                }
             CleanupStack::PopAndDestroy(&secSettingsSession);    	         			
 			break;
 		    }		   
@@ -632,11 +630,12 @@
 		}		
 		
 	#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-	// Forcibly skip the OCSP check and directly go to the prerequisites checking state when the 
-	// machine runs in component information collection mode. OCSP would introduce latency which is not expected when retrieving component info
+	// Forcibly skip the OCSP & prerequisites checking and directly go to the plan installation state when the 
+	// machine runs in component information collection mode. OCSP would introduce latency which is not expected 
+	// when retrieving component info.
 	if(iInstallMachine.IsInInfoMode())
 		{	
-		return static_cast<TState*>(&iInstallMachine.iCheckPrerequisitesState);
+		return static_cast<TState*>(&iInstallMachine.iPlanInstallationState);
 		}
 	#endif
 
@@ -1428,10 +1427,6 @@
 			}
 		}
 	
-#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-	DeRegisterForceRegisteredAppsL();
-#endif
-
     iInstallMachine.CompleteSelf();
 	iInstallMachine.SetActive();
 	}
--- a/installationservices/swi/source/swis/server/installswtypehelper.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/swis/server/installswtypehelper.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -61,7 +61,7 @@
 			return ETrue;
 			}
 
-		void ParseRegFileL(RFs& aFs, const TDesC& aFileName, RPointerArray<CSoftwareTypeRegInfo>& aInfoArray)
+		void ParseRegFileL(RFs& aFs, const TDesC& aFileName, RPointerArray<Usif::CSoftwareTypeRegInfo>& aInfoArray)
 			{
 			// Open the file for reading
 			RFile file;
@@ -112,7 +112,7 @@
 			CleanupStack::PopAndDestroy(2, &file); // launcher
 			}
 
-		void RegisterMimeTypesL(const RPointerArray<CSoftwareTypeRegInfo>& aInfoArray)
+		void RegisterMimeTypesL(const RPointerArray<Usif::CSoftwareTypeRegInfo>& aInfoArray)
 			{
 			const TInt numElems = aInfoArray.Count();
 			if (numElems == 0)
--- a/installationservices/swi/source/swis/server/installswtypehelper.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/swis/server/installswtypehelper.h	Thu Jul 22 16:35:01 2010 +0100
@@ -28,6 +28,7 @@
 #define INSTALLSWTYPEHELPER_H
 
 #include <e32std.h>
+#include <usif/scr/screntries_platform.h>
 
 namespace Swi 
 	{
@@ -49,14 +50,14 @@
 		@param aFileName The file name of an XML file to be parsed.
 		@param aInfoArray The output array of registration info objects read from the aFileName.
 		*/
-		void ParseRegFileL(RFs& aFs, const TDesC& aFileName, RPointerArray<CSoftwareTypeRegInfo>& aInfoArray);
+		void ParseRegFileL(RFs& aFs, const TDesC& aFileName, RPointerArray<Usif::CSoftwareTypeRegInfo>& aInfoArray);
 
 		/**
 		Registers software type MIME types to the AppArc. Each Layered Execution Environment must register its
 		MIME types so the SifLauncher may handle installation requests.
 		@param aInfoArray The array of registration info objects describing new software types to be registered.
 		*/
-		void RegisterMimeTypesL(const RPointerArray<CSoftwareTypeRegInfo>& aInfoArray);
+		void RegisterMimeTypesL(const RPointerArray<Usif::CSoftwareTypeRegInfo>& aInfoArray);
 		}
 	}
 
--- a/installationservices/swi/source/swis/server/planner.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/swis/server/planner.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -231,6 +231,11 @@
 	// tree.
 	RPointerArray<CSisRegistryPackage> plannedPackages;
 	CleanupResetAndDestroy<RPointerArray<CSisRegistryPackage> >::PushL(plannedPackages);
+
+	// Add the root node in the planned packages, so that it is not added again (as a node in the tree)
+	// in case of a cyclic dependency.	
+	CSisRegistryPackage* rootPackage = CSisRegistryPackage::NewL(currentNode->PackageL());
+	plannedPackages.AppendL(rootPackage);
 	
 	while(ETrue)
 		{
--- a/installationservices/swi/source/swis/server/restoreprocessor.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/swis/server/restoreprocessor.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -513,10 +513,29 @@
 	                }  		           
 	            }
 	        
+	        //Compare the new affected apps with the existing affected apps and update the existing affected apps if alredy present or 
+            //add to the list if it is a new app.
+            RArray<TAppUpdateInfo> existingAffectedApps;
+            CleanupClosePushL(existingAffectedApps);
+            const_cast<CPlan&>(iPlan).GetAffectedApps(existingAffectedApps);
+            TInt appCount = affectedApps.Count();
+            for(TInt k = 0; k < appCount ; ++k)
+                {
+                TInt count = existingAffectedApps.Count();
+                TUid appUid = affectedApps[k].iAppUid;
+                for(TInt index = 0; index < count ; ++index)
+                   {
+                   if(appUid == existingAffectedApps[index].iAppUid)
+                       {           
+                       existingAffectedApps.Remove(index);                                    
+                       }
+                   }
+                existingAffectedApps.AppendL(affectedApps[k]);
+                }
 	        const_cast<CPlan&>(iPlan).ResetAffectedApps();
 	        const_cast<CPlan&>(iPlan).SetAffectedApps(affectedApps);
 	        
-	        CleanupStack::PopAndDestroy(2, &componentIds);
+	        CleanupStack::PopAndDestroy(3, &componentIds);
 	        }
 	
 #else
--- a/installationservices/swi/source/swis/server/restoreprocessor.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/swis/server/restoreprocessor.h	Thu Jul 22 16:35:01 2010 +0100
@@ -154,7 +154,7 @@
 		Usif::RStsSession& iStsSession;
 		RSisRegistryWritableSession& iRegistrySession;
 		/** The list of software types to be registered found in the XML registration file. */
-		RCPointerArray<CSoftwareTypeRegInfo> iSoftwareTypeRegInfoArray;
+		RCPointerArray<Usif::CSoftwareTypeRegInfo> iSoftwareTypeRegInfoArray;
 		/**
         * The list of Apparc registration files to parse to populate SCR
         */ 
--- a/installationservices/swi/source/swis/server/sidcache.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/swis/server/sidcache.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -22,6 +22,7 @@
 #include <s32file.h>
 #include <e32uid.h>
 #include <f32file.h>
+#include <e32ldr_private.h>
 #include "securityinfo.h"
 
 namespace Swi 
--- a/installationservices/swi/source/swis/server/siscontentprovider.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/swis/server/siscontentprovider.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -202,7 +202,7 @@
 	for (TInt option = 0; option < options.Count(); option++)
 		{
 		const RPointerArray<CString>& names = options[option].Names();
-		ret.Append(&names[aLanguageIndex]->Data());
+		ret.AppendL(&names[aLanguageIndex]->Data());
 		}
 
 	CleanupStack::Pop(&ret);
--- a/installationservices/swi/source/swis/server/statemachine.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/swis/server/statemachine.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -20,7 +20,9 @@
 #include "log.h"
 #include "plan.h"
 #include "swispubsubdefs.h"
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK  
 #include <usif/scr/appregentries.h>
+#endif
 
 namespace Swi
 {
@@ -348,16 +350,13 @@
 		// re-generate the sisregistry cache .. very time consuming!
 		ResetRegistryCache();
 		}
-#endif
-
-	
-#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+#else
 	// Deregister the force registered applications from AppArc
 	DEBUG_PRINTF(_L8("Deregistering the force registered applications with AppArc"));
 	RSisLauncherSession launcher;
 	CleanupClosePushL(launcher);
 	User::LeaveIfError(launcher.Connect());
-	RPointerArray<Usif::CApplicationRegistrationData> emptyAppRegDataArray;
+	RArray<TAppUpdateInfo> emptyAppRegDataArray;
 	launcher.NotifyNewAppsL(emptyAppRegDataArray);
 	CleanupStack::PopAndDestroy(&launcher);
 #endif
--- a/installationservices/swi/source/swis/server/uninstallationprocessor.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/swis/server/uninstallationprocessor.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -217,31 +217,27 @@
     TAppUpdateInfo existingAppInfo, newAppInfo;     
     TUid packageUid = application.PackageL().Uid();
     
-    Plan().GetAffectedApps(affectedApps);
-    if(affectedApps.Count() == 0)
+    // Get all existing componentsIds for the package to to be uninstalled
+    TRAPD(err,iRegistryWrapper.RegistrySession().GetComponentIdsForUidL(packageUid, componentIds));            
+    TInt count = componentIds.Count();
+    if(0 == count)
         {
-        // Get all existing componentsIds for the package to to be uninstalled
-        TRAPD(err,iRegistryWrapper.RegistrySession().GetComponentIdsForUidL(packageUid, componentIds));            
-        TInt count = componentIds.Count();
-        if(0 == count)
+        DEBUG_PRINTF(_L("ComponentIDs not found for the base package"));
+        User::Leave(KErrNotFound);
+        }
+    
+    //Get the apps for CompIds and mark them as to be uninstalled     
+    for(TInt i = 0 ; i < count; i++)
+        {
+        existingAppUids.Reset();                    
+        TRAP(err,iRegistryWrapper.RegistrySession().GetAppUidsForComponentL(componentIds[i], existingAppUids)); 
+      
+        for(TInt i = 0 ; i < existingAppUids.Count(); i++)
             {
-            DEBUG_PRINTF(_L("ComponentIDs not found for the base package"));
-            User::Leave(KErrNotFound);
+            existingAppInfo = TAppUpdateInfo(existingAppUids[i], EAppUninstalled);
+            affectedApps.Append(existingAppInfo);                   
             }
-        
-        //Get the apps for CompIds and mark them as to be upgraded      
-        for(TInt i = 0 ; i < count; i++)
-            {
-            existingAppUids.Reset();                    
-            TRAP(err,iRegistryWrapper.RegistrySession().GetAppUidsForComponentL(componentIds[i], existingAppUids)); 
-          
-            for(TInt i = 0 ; i < existingAppUids.Count(); i++)
-                {
-                existingAppInfo = TAppUpdateInfo(existingAppUids[i], EAppUninstalled);
-                affectedApps.Append(existingAppInfo);                   
-                }
-            }
-        }
+        }        
     
 	// Now that we are ready to make changes to the registry so we start a transaction
 	// Note that the commit/rollback action is subsequently taken by the later steps of the state machine	
@@ -249,28 +245,46 @@
 	iRegistryWrapper.RegistrySession().DeleteEntryL(ApplicationL().PackageL(), TransactionSession().TransactionIdL()); 
     
     componentIds.Reset();
-    TRAPD(err,iRegistryWrapper.RegistrySession().GetComponentIdsForUidL(packageUid, componentIds));            
+    TRAP(err,iRegistryWrapper.RegistrySession().GetComponentIdsForUidL(packageUid, componentIds));            
     TInt currentComponentCount = componentIds.Count();        
     
     //If there is no component assosiated with this app in the scr and there are affected apps then mark all of them as deleted. 
     RArray<TAppUpdateInfo> apps;  
     CleanupClosePushL(apps);
     Plan().GetAffectedApps(apps);
-    TInt appCount = apps.Count();
-    CleanupStack::PopAndDestroy();
+    TInt appCount = apps.Count();    
     
+    //If the there is no component assosiated with the package uid(ie it has been completely deleted) and we have affected apps 
+    //then compare the apps of the package currently being processed with the existing affected apps if alredy exists then
+    //update else add it to the list.
     if(currentComponentCount == 0 && appCount)
         {            
-        for(TInt i = 0 ; i < appCount; i++)
-           {          
-           existingAppInfo = TAppUpdateInfo(affectedApps[0].iAppUid, EAppUninstalled);
-           affectedApps.Remove(0);
-           affectedApps.Append(existingAppInfo);    
-           }
+        TInt count = affectedApps.Count();        
+        for(TInt i = 0 ; i < appCount; ++i)
+           {    
+           TUid appUid = apps[i].iAppUid;
+           TBool found = EFalse;
+           for(TInt index = 0; index < count ; ++index)
+             {
+             if(appUid == affectedApps[index].iAppUid)
+                 {                       
+                 existingAppInfo = TAppUpdateInfo(appUid, EAppUninstalled);
+                 affectedApps.Remove(index);
+                 affectedApps.Append(existingAppInfo); 
+                 found = ETrue;     
+                 break;
+                 }               
+             }
+          if(!found)
+             {
+             existingAppInfo = TAppUpdateInfo(appUid,EAppUninstalled);
+             affectedApps.Append(existingAppInfo);
+             }   
+           } 
         }
     else
         {
-        // mark the apps in the sffected list as upgraded if they are still in scr
+        // mark the apps in the affected list as upgraded if they are still in scr
         for(TInt i = 0 ; i < currentComponentCount; i++)
            {
            newAppUids.Reset();                    
@@ -289,12 +303,13 @@
                }        
            } 
         }
-    
+    CleanupStack::PopAndDestroy(&apps);
     for(TInt i = 0; i < affectedApps.Count(); i++)
         {
         DEBUG_PRINTF2(_L("AppUid is 0x%x"), affectedApps[i].iAppUid);
         DEBUG_PRINTF2(_L("Action is %d"), affectedApps[i].iAction);
         }   
+            
     const_cast<CPlan&>(Plan()).ResetAffectedApps();
     const_cast<CPlan&>(Plan()).SetAffectedApps(affectedApps);
     
--- a/installationservices/swi/source/uiss/client/sisuihandler.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/source/uiss/client/sisuihandler.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -30,7 +30,7 @@
 #include "writestream.h"
 #include "swispubsubdefs.h"
 #include <e32property.h> 
-
+#include "progressbar.h"
 
 namespace Swi
 {
@@ -61,23 +61,26 @@
 		{
 		return;
 		}
-	
+	TInt progressAmount = aAmount;
+
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	_LIT(KProgressorPanicDescriptor, "UISSCLIENT:The progress bar value publisher has not been set!");
 	__ASSERT_ALWAYS(iPublisher, User::Panic(KProgressorPanicDescriptor,KErrAbort));
-	iPublisher->UpdateProgressBarValueL(aAmount);	
+	progressAmount = iPublisher->UpdateProgressBarValueL(aAmount);	
 #endif	
 	
-	CHandleInstallEvent* event=CHandleInstallEvent::NewLC(aAppInfo, EEventUpdateProgressBar, aAmount, KNullDesC);
-	ExecuteL(*event);
-	
-	if (!event->ReturnResult())
-		{
-		User::Leave(KErrCancel);
-		}
-	CleanupStack::PopAndDestroy(event);
+	if (progressAmount != 0)
+	    {
+	    CHandleInstallEvent* event=CHandleInstallEvent::NewLC(aAppInfo, EEventUpdateProgressBar, progressAmount, KNullDesC);
+	    ExecuteL(*event);
+	        
+	    if (!event->ReturnResult())
+	        {
+	        User::Leave(KErrCancel);
+	        }
+	    CleanupStack::PopAndDestroy(event);
+	    }
 	}
-
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 EXPORT_C void RUiHandler::SetProgressBarValuePublisher(CProgressBarValuePublisher* aPublisher)
 	{
@@ -151,11 +154,19 @@
 	iFinalProgressValue = aValue;
 	}
 
-EXPORT_C void CProgressBarValuePublisher::UpdateProgressBarValueL(TInt aValue)
+EXPORT_C TInt CProgressBarValuePublisher::UpdateProgressBarValueL(TInt aValue)
 	{
 	iCurrentProgressValue += aValue;
 	TUint percentage = (iFinalProgressValue <= 0) ? 100 : (iCurrentProgressValue * 100) / iFinalProgressValue;
-	User::LeaveIfError(RProperty::Set(KUidInstallServerCategory, KUidSwiProgressBarValueKey, percentage));
+	if ((percentage - iLastPercentCompletion) >= KProgressBarIncrement)
+	    {
+	    TInt amountCompleted = iCurrentProgressValue - iLastProgressValue; 
+	    iLastProgressValue = iCurrentProgressValue;
+		iLastPercentCompletion = percentage;
+		User::LeaveIfError(RProperty::Set(KUidInstallServerCategory, KUidSwiProgressBarValueKey, percentage));
+	    return amountCompleted;
+	    }
+	return 0;
 	}	 
 #endif // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 } // namespace Swi
--- a/installationservices/swi/test/swicaptests/registrycaptest.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/swicaptests/registrycaptest.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -411,7 +411,7 @@
 		CheckFailL(err, _L("UpdateEntryL"));
 
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-		RCPointerArray<CSoftwareTypeRegInfo> regInfoArray;
+		RCPointerArray<Usif::CSoftwareTypeRegInfo> regInfoArray;
 		CleanupClosePushL(regInfoArray);
 		
 		TRAP(err, session.AddEntryL(*app, *buffer, regInfoArray, id));
@@ -492,6 +492,19 @@
 
 	TRAP(err, session.RecoverL());
 	CheckFailL(err, _L("RecoverL"));
+	
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+	TRAP(err, session.SetComponentPresenceL(1, EFalse));
+	CheckFailL(err, _L("SetComponentPresenceL"));
+	
+	// Negative tests
+	//TRAP(err, session.SetComponentPresenceL(1234, EFalse));
+	//CheckFailL(err, _L("SetComponentPresenceL Negative 1"));
+    //TRAP(err, session.SetComponentPresenceL(0, EFalse));
+    //CheckFailL(err, _L("SetComponentPresenceL Negative 2"));    
+    //TRAP(err, session.SetComponentPresenceL(-1, EFalse));
+    //CheckFailL(err, _L("SetComponentPresenceL Negative 3"));
+#endif
 
 	CleanupStack::PopAndDestroy(&session);
 	}
--- a/installationservices/swi/test/swicaptests/scripts/swicaptests.ini	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/swicaptests/scripts/swicaptests.ini	Thu Jul 22 16:35:01 2010 +0100
@@ -1,2 +1,14 @@
 [swicaptests]
 DllName=swicaptests.dll
+
+[simple]
+sis=z:\tswi\tsis\data\simple.sis
+script=z:\tswi\tuiscriptadaptors\scripts\simple.xml
+numexist=1
+exist0=C:\Documents\InstTest\file1.txt
+
+[u_simple]
+uid=80000001
+script=z:\tswi\tuiscriptadaptors\scripts\uninstall.xml
+numnonexist=1
+nonexist0=C:\Documents\InstTest\file1.txt
--- a/installationservices/swi/test/swicaptests/scripts/swicaptests.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/swicaptests/scripts/swicaptests.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 //
-// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -18,7 +18,8 @@
 PRINT Run all SWIS capability tests
 
 LOAD_SUITE aprcaptestframework
-
+LOAD_SUITE tuiscriptadaptors
+LOAD_SUITE tscr // To delete the SCR DB
 
 //! @SYMTestCaseID 		API-SEC-SWI-CapTests-I-0001
 //! @SYMTestCaseDesc 		Runs the whole suite of test cases for SWI interfaces. Both negtive and positive tests are included
@@ -28,13 +29,21 @@
 //! @SYMTestExpectedResults 	KErrPermissionDenied received on calls which should fail
 //! @SYMDevelopedForRelease 	Yankee
 
-
 START_TESTCASE API-SEC-SWI-CapTests-I-0001
 
 RUN_UTILS MkDir c:\tswi\
 RUN_UTILS MkDir c:\tswi\swicaptests
 RUN_UTILS MkDir c:\tswi\swicaptests\data
 RUN_UTILS CopyFile z:\tswi\swicaptests\data\testdoc.txt c:\tswi\swicaptests\data\testdoc.txt
+
+// Delete the existing DB and install a test pacakage (so that ComponentId of 1 is valid)
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\swicaptests\scripts\swicaptests.ini simple
+
 RUN_TEST_STEP 100 aprcaptestframework RunThoroughCapabilityChecks z:\tswi\swicaptests\scripts\swicaptests.ini swicaptests
 
+// Uninstall the test pacakage and delete the DB so that it does not interfere with remaining tests
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\swicaptests\scripts\swicaptests.ini u_simple
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tusif\tscr\tscr.ini db_file
+
 END_TESTCASE API-SEC-SWI-CapTests-I-0001
--- a/installationservices/swi/test/swicaptests/swilaunchercaptest.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/swicaptests/swilaunchercaptest.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -160,7 +160,7 @@
 	
 	User::LeaveIfError(file.Open(fs, testDocFileOnSysDrive , EFileShareExclusive|EFileRead));
 	
-	RCPointerArray<Swi::CSoftwareTypeRegInfo> regInfoArray;
+	RCPointerArray<Usif::CSoftwareTypeRegInfo> regInfoArray;
 	CleanupClosePushL(regInfoArray);
 	
 	TRAP(err, launcher.ParseSwTypeRegFileL(file, regInfoArray));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/embed/cyclic_dependency_base.pkg	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,13 @@
+; This test file tests embedded cyclic dependencies.
+
+;Languages
+&EN
+
+;Header
+#{"cyclic_dependency_base"}, (0x811118FD), 1, 2, 3,TYPE=SA
+
+%{"Vendor"}
+:"Unique Vendor Name"
+
+@"cyclic_dependency_embedded.sis",(0x811111E0)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages/cyclic_dependency_embedded.pkg	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,15 @@
+; This test file tests cyclic dependencies.
+
+;Languages
+&EN
+
+;Header
+#{"cyclic_dependency_embedded"}, (0x811111E0), 1, 2, 3,TYPE=SA
+
+%{"Vendor"}
+:"Unique Vendor Name"
+
+(0x811118FD), 1, 2, 3, {"cyclic_dependency_base"}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages/swiappregintegration_multipleapp_performance.pkg	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,70 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "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:
+; SA package containing complete resource files for English and French
+;
+
+;Languages
+&EN, FR
+
+#{"swiappregintegration_base01_EN","swiappregintegration_base01_FR"},(0x80010003),1,1,1,TYPE=SA
+
+;Localised Vendor name
+%{"Vendor_EN","Vendor_FR"}
+
+;Unique Vendor name
+:"Vendor"
+
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration_base01.exe" - "!:\sys\bin\swiappregintegration_base01.exe"
+
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration_base01_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.rsc" -"!:\resource\apps\swiappregintegration_base01_loc.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration_base01_rsc.mbm"
+
+if supported_language=01
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.r01" -"!:\resource\apps\swiappregintegration_base01_loc.r01"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration_base01_01.mbm"
+endif
+
+if supported_language=02
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.r02" -"!:\resource\apps\swiappregintegration_base01_loc.r02"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration_base01_02.mbm"
+endif
+
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration02.exe" - "!:\sys\bin\swiappregintegration02.exe"
+
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration02_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_loc.rsc" -"!:\resource\apps\swiappregintegration02_loc.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration02_rsc.mbm"
+
+if supported_language=01
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_loc.r01" -"!:\resource\apps\swiappregintegration02_loc.r01"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration02_01.mbm"
+endif
+
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration_case05.exe" - "!:\sys\bin\swiappregintegration_case05.exe"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_case05\swiappregintegration_case05_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration_case05_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_case05\swiappregintegration_case05_loc.rsc" - "!:\resource\apps\swiappregintegration_case05_loc.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration.mbm"
+
+
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration_case06.exe" - "!:\sys\bin\swiappregintegration_case06.exe"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_case06\swiappregintegration_case06_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration_case06_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_case06\swiappregintegration_case06_loc.rsc" - "!:\resource\apps\swiappregintegration_case06_loc.rsc"
+
+
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration_case07.exe" - "!:\sys\bin\swiappregintegration_case07.exe"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_case07\swiappregintegration_case07_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration_case07_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_case07\swiappregintegration_case07_loc.rsc" - "!:\resource\apps\swiappregintegration_case07_loc.rsc"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages/swiappregintegration_twoapps_performance.pkg	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,54 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "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:
+; SA package containing complete resource files for English and French
+;
+
+;Languages
+&EN, FR
+
+#{"swiappregintegration_base01_EN","swiappregintegration_base01_FR"},(0x80010003),1,1,1,TYPE=SA
+
+;Localised Vendor name
+%{"Vendor_EN","Vendor_FR"}
+
+;Unique Vendor name
+:"Vendor"
+
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration_base01.exe" - "!:\sys\bin\swiappregintegration_base01.exe"
+
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration_base01_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.rsc" -"!:\resource\apps\swiappregintegration_base01_loc.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration_base01_rsc.mbm"
+
+if supported_language=01
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.r01" -"!:\resource\apps\swiappregintegration_base01_loc.r01"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration_base01_01.mbm"
+endif
+
+if supported_language=02
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_base01\swiappregintegration_base01_loc.r02" -"!:\resource\apps\swiappregintegration_base01_loc.r02"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration_base01_02.mbm"
+endif
+
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration02.exe" - "!:\sys\bin\swiappregintegration02.exe"
+
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration02_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_loc.rsc" -"!:\resource\apps\swiappregintegration02_loc.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration02_rsc.mbm"
+
+if supported_language=01
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration02\swiappregintegration02_loc.r01" -"!:\resource\apps\swiappregintegration02_loc.r01"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration02_01.mbm"
+endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/packages/test_appreg_entries_armv5.pkg	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,34 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "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:
+; 
+;
+
+;Languages
+&EN
+
+#{"test_appreg_entries_EN"},(0x80010009),1,1,1
+
+;Localised Vendor name
+%{"Vendor_EN"}
+
+;Unique Vendor name
+:"Vendor"
+
+
+"\epoc32\release\<PLATFORM>\<CONFIGURATION>\swiappregintegration_case06.exe" - "!:\sys\bin\swiappregintegration_case06.exe"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_case06\swiappregintegration_case06_reg.rsc" - "!:\private\10003a3f\import\apps\swiappregintegration_case06_reg.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration_case06\swiappregintegration_case06_loc.rsc" - "!:\resource\apps\swiappregintegration_case06_loc.rsc"
+"\epoc32\data\z\tswi\tuiscriptadaptors\data\swiappregintegration01\swiappregintegration.mbm"  -"!:\resource\apps\swiappregintegration.mbm"
+
--- a/installationservices/swi/test/testexes/packages_interpretsis_testcase/interpretsis_testcase.pkg	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/testexes/packages_interpretsis_testcase/interpretsis_testcase.pkg	Thu Jul 22 16:35:01 2010 +0100
@@ -1,18 +1,3 @@
-;
-; 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: 
-;
 ;
 ; Install file for multi-lingual application
 ; supporting two language variants.
--- a/installationservices/swi/test/testexes/packages_interpretsis_testcase/interpretsis_testcase_05.pkg	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/testexes/packages_interpretsis_testcase/interpretsis_testcase_05.pkg	Thu Jul 22 16:35:01 2010 +0100
@@ -1,18 +1,3 @@
-;
-; 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: 
-;
 ;
 ; Install file for multi-lingual application
 ; supporting two language variants.
--- a/installationservices/swi/test/testexes/packages_interpretsis_testcase/interpretsis_testcase_06.pkg	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/testexes/packages_interpretsis_testcase/interpretsis_testcase_06.pkg	Thu Jul 22 16:35:01 2010 +0100
@@ -1,18 +1,3 @@
-;
-; 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: 
-;
 ;
 ; Install file for multi-lingual application
 ; supporting two language variants.
--- a/installationservices/swi/test/testexes/packages_interpretsis_testcase/interpretsis_testcase_07.pkg	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/testexes/packages_interpretsis_testcase/interpretsis_testcase_07.pkg	Thu Jul 22 16:35:01 2010 +0100
@@ -1,18 +1,3 @@
-;
-; 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: 
-;
 ;
 ; Install file for multi-lingual application
 ; supporting two language variants.
--- a/installationservices/swi/test/testexes/packages_interpretsis_testcase/interpretsis_testcase_08.pkg	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/testexes/packages_interpretsis_testcase/interpretsis_testcase_08.pkg	Thu Jul 22 16:35:01 2010 +0100
@@ -1,18 +1,3 @@
-;
-; 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: 
-;
 ;
 ; Install file for multi-lingual application
 ; supporting two language variants.
--- a/installationservices/swi/test/testexes/packages_interpretsis_testcase/interpretsis_testcase_09.pkg	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/testexes/packages_interpretsis_testcase/interpretsis_testcase_09.pkg	Thu Jul 22 16:35:01 2010 +0100
@@ -1,18 +1,3 @@
-;
-; 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: 
-;
 ;
 ; Install file for multi-lingual application
 ; supporting two language variants.
--- a/installationservices/swi/test/testexes/packages_interpretsis_testcase/interpretsis_testcase_10.pkg	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/testexes/packages_interpretsis_testcase/interpretsis_testcase_10.pkg	Thu Jul 22 16:35:01 2010 +0100
@@ -1,18 +1,3 @@
-;
-; 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: 
-;
 ;
 ; Install file for multi-lingual application
 ; supporting two language variants.
--- a/installationservices/swi/test/testexes/swtypereginfo_invalid1.xml	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/testexes/swtypereginfo_invalid1.xml	Thu Jul 22 16:35:01 2010 +0100
@@ -6,7 +6,8 @@
 		<localizedName language="31">testSwTypeLoc31</localizedName>
 		<mimeType>text/sif-testpkg5</mimeType>
 		<sifPluginUid>F02866EF</sifPluginUid>
-		<installerSecureId>F0285BCB</installerSecureId>
-		<executionLayerSecureId>F0285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="F0285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="F0285DE0" AccessMode="1"/>
+		<launcherExecutable>testExeinvalid1</launcherExecutable>
 	</softwareType>
 </LayeredExecutionEnvironments>
--- a/installationservices/swi/test/testexes/swtypereginfo_invalid2.xml	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/testexes/swtypereginfo_invalid2.xml	Thu Jul 22 16:35:01 2010 +0100
@@ -6,7 +6,8 @@
 		<localizedName language="31">testSwTypeLoc31</localizedName>
 		<mimeType>text/sif-testpkg</mimeType>
 		<sifPluginUid>102866EF</sifPluginUid>
-		<installerSecureId>10285BCB</installerSecureId>
-		<executionLayerSecureId>80285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="10285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="80285DE0" AccessMode="1"/>
+		<launcherExecutable>testExeinvalid2</launcherExecutable>
 	</softwareType1>
 </LayeredExecutionEnvironments>
--- a/installationservices/swi/test/testexes/swtypereginfo_invalid3.xml	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/testexes/swtypereginfo_invalid3.xml	Thu Jul 22 16:35:01 2010 +0100
@@ -6,15 +6,17 @@
 		<localizedName language="31">testSwTypeLoc31</localizedName>
 		<mimeType>text/sif-testpkg</mimeType>
 		<sifPluginUid>102866EF</sifPluginUid>
-		<installerSecureId>10285BCB</installerSecureId>
-		<executionLayerSecureId>80285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="10285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="80285DE0" AccessMode="1"/>
+		<launcherExecutable>testExeinvalid3a</launcherExecutable>
 	</softwareType>
 	<softwareType name="testSoftwareType">
 		<localizedName language="15">testSwTypeLoc15</localizedName>
 		<localizedName language="31">testSwTypeLoc31</localizedName>
 		<mimeType>text/sif-testpkg2</mimeType>
 		<sifPluginUid>C02866EF</sifPluginUid>
-		<installerSecureId>C0285BCB</installerSecureId>
-		<executionLayerSecureId>C0285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="C0285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="C0285DE0" AccessMode="1"/>
+		<launcherExecutable>testExeinvalid3b</launcherExecutable>
 	</softwareType>
 </LayeredExecutionEnvironments>
--- a/installationservices/swi/test/testexes/swtypereginfo_invalid4.xml	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/testexes/swtypereginfo_invalid4.xml	Thu Jul 22 16:35:01 2010 +0100
@@ -6,15 +6,17 @@
 		<localizedName language="31">testSwTypeLoc31</localizedName>
 		<mimeType>text/sif-testpkg</mimeType>
 		<sifPluginUid>102866EF</sifPluginUid>
-		<installerSecureId>10285BCB</installerSecureId>
-		<executionLayerSecureId>80285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="10285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="80285DE0" AccessMode="1"/>
+		<launcherExecutable>testExeinvalid4a</launcherExecutable>
 	</softwareType>
 	<softwareType name="testSoftwareType2">
 		<localizedName language="15">testSwTypeLoc15</localizedName>
 		<localizedName language="31">testSwTypeLoc31</localizedName>
 		<mimeType>text/sif-testpkg2</mimeType>
 		<sifPluginUid>102866EF</sifPluginUid>
-		<installerSecureId>C0285BCB</installerSecureId>
-		<executionLayerSecureId>C0285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="C0285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="C0285DE0" AccessMode="1"/>
+		<launcherExecutable>testExeinvalid4b</launcherExecutable>
 	</softwareType>
 </LayeredExecutionEnvironments>
--- a/installationservices/swi/test/testexes/swtypereginfo_invalid5.xml	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/testexes/swtypereginfo_invalid5.xml	Thu Jul 22 16:35:01 2010 +0100
@@ -6,15 +6,17 @@
 		<localizedName language="31">testSwTypeLoc31</localizedName>
 		<mimeType>text/sif-testpkg</mimeType>
 		<sifPluginUid>102866EF</sifPluginUid>
-		<installerSecureId>10285BCB</installerSecureId>
-		<executionLayerSecureId>80285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="10285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="80285DE0" AccessMode="1"/>
+		<launcherExecutable>testExeinvalid5a</launcherExecutable>
 	</softwareType>
 	<softwareType name="native">
 		<localizedName language="15">testSwTypeLoc15</localizedName>
 		<localizedName language="31">testSwTypeLoc31</localizedName>
 		<mimeType>text/sif-testpkg2</mimeType>
 		<sifPluginUid>C02866EF</sifPluginUid>
-		<installerSecureId>C0285BCB</installerSecureId>
-		<executionLayerSecureId>C0285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="C0285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="C0285DE0" AccessMode="1"/>
+		<launcherExecutable>testExeinvalid5b</launcherExecutable>
 	</softwareType>
 </LayeredExecutionEnvironments>
--- a/installationservices/swi/test/testexes/swtypereginfo_native_invalid1.xml	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/testexes/swtypereginfo_native_invalid1.xml	Thu Jul 22 16:35:01 2010 +0100
@@ -6,7 +6,8 @@
 		<localizedName language="31">testSwTypeLoc31</localizedName>
 		<mimeType>application/vnd.symbian.install</mimeType>
 		<sifPluginUid>102866EF</sifPluginUid>
-		<installerSecureId>10285BCB</installerSecureId>
-		<executionLayerSecureId>80285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="10285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="80285DE0" AccessMode="1"/>
+		<launcherExecutable>testExenativeinvalid1</launcherExecutable>
 	</softwareType>
 </LayeredExecutionEnvironments>
--- a/installationservices/swi/test/testexes/swtypereginfo_valid1.xml	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/testexes/swtypereginfo_valid1.xml	Thu Jul 22 16:35:01 2010 +0100
@@ -6,7 +6,8 @@
 		<localizedName language="31">testSwTypeLoc31</localizedName>
 		<mimeType>text/sif-testpkg</mimeType>
 		<sifPluginUid>102866EF</sifPluginUid>
-		<installerSecureId>10285BCB</installerSecureId>
-		<executionLayerSecureId>80285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="10285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="80285DE0" AccessMode="1"/>
+		<launcherExecutable>testExevalid1</launcherExecutable>
 	</softwareType>
 </LayeredExecutionEnvironments>
--- a/installationservices/swi/test/testexes/swtypereginfo_valid1_invalidupgrade.xml	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/testexes/swtypereginfo_valid1_invalidupgrade.xml	Thu Jul 22 16:35:01 2010 +0100
@@ -6,7 +6,8 @@
 		<localizedName language="31">testSwTypeLoc31</localizedName>
 		<mimeType>text/sif-testpkg</mimeType>
 		<sifPluginUid>102866EF</sifPluginUid>
-		<installerSecureId>10285BCC</installerSecureId>
-		<executionLayerSecureId>80285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="10285BCC" AccessMode="1"/>
+		<CustomAcess SecureId="80285DE0" AccessMode="1"/>
+		<launcherExecutable>testExeinvalidupgrade</launcherExecutable>
 	</softwareType>
 </LayeredExecutionEnvironments>
--- a/installationservices/swi/test/testexes/swtypereginfo_valid2.xml	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/testexes/swtypereginfo_valid2.xml	Thu Jul 22 16:35:01 2010 +0100
@@ -6,8 +6,9 @@
 		<localizedName language="31">testSwTypeLoc31</localizedName>
 		<mimeType>text/sif-testpkg</mimeType>
 		<sifPluginUid>102866EF</sifPluginUid>
-		<installerSecureId>10285BCB</installerSecureId>
-		<executionLayerSecureId>80285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="10285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="80285DE0" AccessMode="1"/>
+		<launcherExecutable>testExevalid2</launcherExecutable>
 	</softwareType>
 	<softwareType name="testSoftwareType2">
 		<localizedName language="1">
@@ -22,11 +23,8 @@
 		<sifPluginUid>
 			122866EF
 		</sifPluginUid>
-		<installerSecureId>
-			12285BCB
-		</installerSecureId>
-		<executionLayerSecureId>
-			82285DE0
-		</executionLayerSecureId>
+		<CustomAcess SecureId="12285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="82285DE0" AccessMode="1"/>
+		<launcherExecutable>testExevalid2b</launcherExecutable>
 	</softwareType>
 </LayeredExecutionEnvironments>
--- a/installationservices/swi/test/testexes/swtypereginfo_valid3.xml	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/testexes/swtypereginfo_valid3.xml	Thu Jul 22 16:35:01 2010 +0100
@@ -6,27 +6,31 @@
 		<localizedName language="31">testSwTypeLoc31</localizedName>
 		<mimeType>text/sif-testpkg1</mimeType>
 		<sifPluginUid>A02866EF</sifPluginUid>
-		<installerSecureId>A0285BCB</installerSecureId>
-		<executionLayerSecureId>A0285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="A0285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="A0285DE0" AccessMode="1"/>
+		<launcherExecutable>testExevalid3a</launcherExecutable>
 	</softwareType>
 	<softwareType name="testSoftwareType2">
 		<mimeType>text/sif-testpkg2</mimeType>
 		<sifPluginUid>B02866EF</sifPluginUid>
-		<installerSecureId>B0285BCB</installerSecureId>
-		<executionLayerSecureId>B0285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="B0285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="B0285DE0" AccessMode="1"/>
+		<launcherExecutable>testExevalid3b</launcherExecutable>
 	</softwareType>
 	<softwareType name="testSoftwareType3">
 		<mimeType>text/sif-testpkg3</mimeType>
 		<sifPluginUid>C02866EF</sifPluginUid>
-		<installerSecureId>C0285BCB</installerSecureId>
-		<executionLayerSecureId>C0285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="C0285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="C0285DE0" AccessMode="1"/>
+		<launcherExecutable>testExevalid3c</launcherExecutable>
 	</softwareType>
 	<softwareType name="testSoftwareType4">
 		<localizedName language="5">testSwTypeLoc5</localizedName>
 		<localizedName language="3">testSwTypeLoc3</localizedName>
 		<mimeType>text/sif-testpkg4</mimeType>
 		<sifPluginUid>D02866EF</sifPluginUid>
-		<installerSecureId>D0285BCB</installerSecureId>
-		<executionLayerSecureId>D0285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="D0285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="D0285DE0" AccessMode="1"/>
+		<launcherExecutable>testExevalid3d</launcherExecutable>
 	</softwareType>
 </LayeredExecutionEnvironments>
--- a/installationservices/swi/test/tsisregistrytest/sessionstep.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/tsisregistrytest/sessionstep.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -173,8 +173,8 @@
 	RPointerArray<Swi::CSisRegistryPackage> packages;
 	//StartTimer again to ignore time taken to read from config file
 	StartTimer();
+	CleanupResetAndDestroyPushL(packages);
 	iRegistryEntry.EmbeddingPackagesL(packages);
-	CleanupResetAndDestroyPushL(packages);
 	
 	if(packages.Count() != embeddingPkgCount)
 		{
--- a/installationservices/swi/test/tsisregistrytest_legacy/sessionstep.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/tsisregistrytest_legacy/sessionstep.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -138,10 +138,9 @@
 	    return TestStepResult();
 	    }
 	CleanupClosePushL(entry);
-	
+
+	CleanupResetAndDestroyPushL(packages);
 	entry.EmbeddingPackagesL(packages);
-	CleanupResetAndDestroyPushL(packages);
-	
 	
 	if(packages.Count() != embeddingPkgCount)
 		{
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/nonusiftuiscriptadaptors.script	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,42 @@
+//
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "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:
+//
+//! @file
+// SWIS unit (integration) tests
+PRINT Run all SWIS tests
+LOAD_SUITE tuiscriptadaptors
+
+//! @SYMTestCaseID 		API-SEC-DEF082510-0001
+//! @SYMTestCaseDesc		Import ECOM plugins for apparc SidChecker interface - required by INC069526
+//! @SYMDEF			DEF082510
+//! @SYMTestPriority		High
+//! @SYMTestType		CIT
+//! @SYMTestStatus		3. Released
+//! @SYMTestActions 		Verify Sid presence query via plugni works.
+//! @SYMTestExpectedResults	Present when present, absent when absent
+//! @SYMDevelopedForRelease	Mike
+
+START_TESTCASE API-SEC-DEF082510-0001
+
+RUN_TEST_STEP 100 tuiscriptadaptors QuerySidViaApparcPlugin z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini exe_absent
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini exe
+RUN_TEST_STEP 100 tuiscriptadaptors QuerySidViaApparcPlugin z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini exe_present
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini u_exe
+RUN_TEST_STEP 100 tuiscriptadaptors QuerySidViaApparcPlugin z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini exe_absent
+
+END_TESTCASE API-SEC-DEF082510-0001
+
+// Ensure that SWIS shuts down after the above tests to make sure heap checks run
+RUN_TEST_STEP 5 tuiscriptadaptors SwisNotRunning
--- a/installationservices/swi/test/tuiscriptadaptors/scripts/tpropagation.ini	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/tpropagation.ini	Thu Jul 22 16:35:01 2010 +0100
@@ -430,4 +430,97 @@
 delete4=e:\resources\new_resources.txt
 
 
+//APPINS-SWI-PROP-0001
+[install_test_appreg_entries_armv5]
+sis=z:\tswi\tsis\data\test_appreg_entries_armv5.sis
+script=z:\tswi\tuiscriptadaptors\scripts\simple_drive_e.xml
+numexist=4
+exist0=e:\sys\bin\swiappregintegration_case06.exe
+exist1=e:\private\10003a3f\import\apps\swiappregintegration_case06_reg.rsc
+exist2=e:\resource\apps\swiappregintegration_case06_loc.rsc
+exist3=e:\resource\apps\swiappregintegration.mbm
 
+[backup_files_armv5_test_appreg_entries]
+numcopy=5
+source0=e:\private\10202dce\80010009_0.sis
+dest0=c:\80010009_0.sis
+source1=e:\sys\bin\swiappregintegration_case06.exe
+dest1=c:\swiappregintegration_case06.exe
+source2=e:\private\10003a3f\import\apps\swiappregintegration_case06_reg.rsc
+dest2=c:\swiappregintegration_case06_reg.rsc
+source3=e:\resource\apps\swiappregintegration_case06_loc.rsc
+dest3=c:\swiappregintegration_case06_loc.rsc
+source4=e:\resource\apps\swiappregintegration.mbm
+dest4=c:\swiappregintegration.mbm
+
+[uninstall_test_appreg_entries_armv5]
+uid=80010009
+script=z:\tswi\tuiscriptadaptors\scripts\simple_drive_e.xml
+
+[copy_to_mmc_armv5_test_appreg_entries]
+numcopy=6
+source0=c:\80010009_0.sis
+dest0=e:\private\10202dce\80010009_0.sis
+source1=c:\80010009_0.sis
+dest1=e:\80010009_0.sis
+source2=c:\swiappregintegration_case06.exe
+dest2=e:\sys\bin\swiappregintegration_case06.exe
+source3=c:\swiappregintegration_case06_reg.rsc
+dest3=e:\private\10003a3f\import\apps\swiappregintegration_case06_reg.rsc
+source4=c:\swiappregintegration_case06_loc.rsc
+dest4=e:\resource\apps\swiappregintegration_case06_loc.rsc
+source5=c:\swiappregintegration.mbm
+dest5=e:\resource\apps\swiappregintegration.mbm
+
+[cleanup_backup_armv5_test_appreg_entries]
+numdelete=5
+delete0=c:\80010009_0.sis
+delete1=c:\swiappregintegration_case06.exe
+delete2=c:\swiappregintegration_case06_reg.rsc
+delete3=c:\swiappregintegration_case06_loc.rsc
+delete4=c:\swiappregintegration.mbm
+
+[install_stub_armv5_test_appreg_entries]
+sis=e:\80010009_0.sis
+script=z:\tswi\tuiscriptadaptors\scripts\simple_drive_e.xml
+numexist=4
+exist0=e:\sys\bin\swiappregintegration_case06.exe
+exist1=e:\private\10003a3f\import\apps\swiappregintegration_case06_reg.rsc
+exist2=e:\resource\apps\swiappregintegration_case06_loc.rsc
+exist3=e:\resource\apps\swiappregintegration.mbm
+
+[uninstall_armv5_test_appreg_entries]
+uid=80010009
+script=z:\tswi\tuiscriptadaptors\scripts\simple_drive_e.xml
+
+[verify_case06_base_armv5]
+AppRegEntriesConfigCount=1
+configsection0 = verify_case06_base_data_armv5
+CompareWithDb=True
+
+[verify_case06_base_data_armv5]
+AppUid=90000006
+AppFile=E:\sys\bin\swiappregintegration_case06.exe
+Attributes=0
+Hidden=0
+Embeddability=0
+NewFile=0
+Launch=0
+GroupName=GroupI
+DefaultScreenNumber=2
+AppOpaqueDataInfoCount=0
+OwnedFileCount=0
+ServiceInfoCount=0
+LocalizableAppInfoCount=1
+LocAppLanguage0=0
+LocShortCaption0=HW_RSC
+LocCaption0=HelloWorld_RSC
+LocNumberOfAppIcons0=127
+LocIconFileName0=C:\resource\apps\swiappregintegration.mbm
+LocGroupName0=Group_RSC
+PropertiesCount=0
+
+[temp_files]
+DbFilePath=e:\resource\apps\swiappregintegration.mbm
+JournalFilePath=e:\resource\apps\swiappregintegration.mbm
+
--- a/installationservices/swi/test/tuiscriptadaptors/scripts/tpropagation_arm.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/tpropagation_arm.script	Thu Jul 22 16:35:01 2010 +0100
@@ -17,6 +17,8 @@
 // SWIS unit (integration) tests
 PRINT Propagation tests running...
 LOAD_SUITE tuiscriptadaptors
+LOAD_SUITE tscrapparc
+LOAD_SUITE tscr
 
 //! @SYMTestCaseID 		API-SEC-Propagation-HW-0001
 //! @SYMTestCaseDesc 		Tests that a propagation will install correctly with a modified version of one of the files listed in the stub file.
@@ -256,4 +258,36 @@
 END_TESTCASE API-SEC-SWI-PREQ1912-MP-HW-0002
 
 
+//! @SYMTestCaseID 		APPINS-SWI-PROP-HW-0001
+//! @SYMTestCaseDesc 		Tests that a propagation will install as per required and the SCR db is populated correctly
+//! @SYMTestPriority 		Medium
+//! @SYMTestActions 		Simulate a propagation installation and verify the contents retrieved from SCR db.
+//! @SYMTestExpectedResults 	Required application's details correctly retrieved from the db.
 
+START_TESTCASE APPINS-SWI-PROP-HW-0001
+
+RUN_TEST_STEP_RESULT -21 100 tuiscriptadaptors MmcMountStep z:\tswi\tuiscriptadaptors\scripts\drives.ini E
+DELAY 2000
+RUN_TEST_STEP 100 tuiscriptadaptors MmcFormatStep z:\tswi\tuiscriptadaptors\scripts\drives.ini E
+
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tpropagation.ini install_test_appreg_entries_armv5
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tpropagation.ini verify_case06_base_armv5
+RUN_TEST_STEP 100 tuiscriptadaptors SwiCopyFilesStep z:\tswi\tuiscriptadaptors\scripts\tpropagation.ini backup_files_armv5_test_appreg_entries
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tpropagation.ini uninstall_test_appreg_entries_armv5
+
+RUN_TEST_STEP 100 tuiscriptadaptors SwiCopyFilesStep z:\tswi\tuiscriptadaptors\scripts\tpropagation.ini copy_to_mmc_armv5_test_appreg_entries
+RUN_TEST_STEP 100 tuiscriptadaptors SwiDeleteFilesStep z:\tswi\tuiscriptadaptors\scripts\tpropagation.ini cleanup_backup_armv5_test_appreg_entries
+
+RUN_TEST_STEP 100 tuiscriptadaptors MmcUnMountStep z:\tswi\tuiscriptadaptors\scripts\drives.ini E
+DELAY 2000
+RUN_TEST_STEP 100 tuiscriptadaptors MmcMountStep z:\tswi\tuiscriptadaptors\scripts\drives.ini E
+DELAY 2000
+
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tpropagation.ini install_stub_armv5_test_appreg_entries
+RUN_TEST_STEP 100 tscrapparc ScrGetApplicationRegistrationView z:\tswi\tuiscriptadaptors\scripts\tpropagation.ini verify_case06_base_armv5
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tpropagation.ini uninstall_armv5_test_appreg_entries
+
+END_TESTCASE APPINS-SWI-PROP-HW-0001
+
+// Deleting the temporary files, but not the SCR DB. Here we are reusing the step to delete something under resource\apps
+RUN_TEST_STEP 100 tscr SCRDeleteDbFile z:\tswi\tuiscriptadaptors\scripts\tpropagation.ini temp_files
--- a/installationservices/swi/test/tuiscriptadaptors/scripts/tuiscriptadaptors.ini	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/tuiscriptadaptors.ini	Thu Jul 22 16:35:01 2010 +0100
@@ -1382,4 +1382,19 @@
 
 [u_smlsyncagent]
 uid=10009f46
-script=z:\tswi\tuiscriptadaptors\scripts\uninstall.xml
\ No newline at end of file
+script=z:\tswi\tuiscriptadaptors\scripts\uninstall.xml
+
+[cyclicDependency_A]
+sis=z:\tswi\tsis\data\cyclic_dependency_base.sis
+script=z:\tswi\tuiscriptadaptors\scripts\simple.xml
+
+[cyclicDependency_B]
+sis=z:\tswi\tsis\data\cyclic_dependency_embedded.sis
+script=z:\tswi\tuiscriptadaptors\scripts\simple.xml
+
+[cyclicDependency_U_B]
+uid=811111E0
+script=z:\tswi\tuiscriptadaptors\scripts\uninstall.xml
+
+[cyclicDependency_Uid]
+packageUid=811118FD
--- a/installationservices/swi/test/tuiscriptadaptors/scripts/tuiscriptadaptors.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/tuiscriptadaptors.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 //
-// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of the License "Eclipse Public License v1.0"
@@ -806,27 +806,6 @@
 END_TESTCASE API-SEC-DEF076366-0001
 
 
-//! @SYMTestCaseID 		API-SEC-DEF082510-0001
-//! @SYMTestCaseDesc		Import ECOM plugins for apparc SidChecker interface - required by INC069526
-//! @SYMDEF			DEF082510
-//! @SYMTestPriority		High
-//! @SYMTestType		CIT
-//! @SYMTestStatus		3. Released
-//! @SYMTestActions 		Verify Sid presence query via plugni works.
-//! @SYMTestExpectedResults	Present when present, absent when absent
-//! @SYMDevelopedForRelease	Mike
-
-START_TESTCASE API-SEC-DEF082510-0001
-
-RUN_TEST_STEP 100 tuiscriptadaptors QuerySidViaApparcPlugin z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini exe_absent
-RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini exe
-RUN_TEST_STEP 100 tuiscriptadaptors QuerySidViaApparcPlugin z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini exe_present
-RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini u_exe
-RUN_TEST_STEP 100 tuiscriptadaptors QuerySidViaApparcPlugin z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini exe_absent
-
-END_TESTCASE API-SEC-DEF082510-0001
-
-
 //! @SYMTestCaseID 		API-SEC-BOGUS_LOGO-0001
 //! @SYMTestCaseDesc		Installs a SIS file with a bogus logo
 //! @SYMDEF			DEF087165 
@@ -1326,6 +1305,19 @@
 
 END_TESTCASE API-SEC-SWIREG-Hidden-0004
 
+//! @SYMTestCaseID SEC-cyclicDependency-PDEF145405
+//! @SYMTestCaseDesc User installs a package(A) with dependency on package (B), then installs package B with dependency on A, then unistalls pkg B
+//! @SYMDEF  INC
+//! @SYMTestPriority High
+//! @SYMTestActions  Install SA pkg and then Install another SA package, Uninstall second SA
+//! @SYMTestExpectedResults The SIS gets installed and uninstalled successfully
 
+
+START_TESTCASE cyclicDependency
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini cyclicDependency_A
+RUN_TEST_STEP 100 tuiscriptadaptors InstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini cyclicDependency_B
+RUN_TEST_STEP 100 tuiscriptadaptors RemoveWithLastDependent z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini cyclicDependency_Uid
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.ini cyclicDependency_U_B
+END_TESTCASE cyclicDependency
 // Ensure that SWIS shuts down after the above tests to make sure heap checks run
 RUN_TEST_STEP 5 tuiscriptadaptors SwisNotRunning
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/tuiscriptadaptors_app_performance.ini	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,59 @@
+[swiappregintegration_performance]
+MaxDuration=2000
+sis=z:\tswi\tsis\data\swiappregintegration01.sis
+script=z:\tswi\tuiscriptadaptors\scripts\devlangsel.xml
+devicelanguage0=01
+devicelanguage1=03
+devicelanguage2=24
+
+[swiappregintegration_nolang_performance]
+MaxDuration=1700
+sis=z:\tswi\tsis\data\swiappregintegration01.sis
+script=z:\tswi\tuiscriptadaptors\scripts\simple.xml
+
+[swiappregintegration_sa_app_performance]
+MaxDuration=1500
+sis=z:\tusif\tsif\data\swiappregintegration_case08_sa2.sis
+script=z:\tswi\tuiscriptadaptors\scripts\devlangsel.xml
+devicelanguage0=01
+
+[swiappregintegration_no_app_performance]
+MaxDuration=1500
+sis=z:\tusif\tsif\data\swiappregintegration_case08_sa1.sis
+script=z:\tswi\tuiscriptadaptors\scripts\simple.xml
+
+[swiappregintegration_oneapp_performance]
+MaxDuration=1500
+sis=z:\tswi\tsis\data\swiappregintegration_base01.sis
+script=z:\tswi\tuiscriptadaptors\scripts\simple.xml
+
+[swiappregintegration_twoapps_performance]
+MaxDuration=1500
+sis=z:\tswi\tsis\data\swiappregintegration_twoapps_performance.sis
+script=z:\tswi\tuiscriptadaptors\scripts\simple.xml
+
+[basic_noapp_performance]
+MaxDuration=1500
+sis=z:\tswi\tsis\data\simple1.sis
+script=z:\tswi\tuiscriptadaptors\scripts\simple.xml
+
+[u_basic_noapp_performance]
+uid=80008880
+script=z:\tswi\tuiscriptadaptors\scripts\uninstall.xml
+
+[u_swiappregintegration_base01]
+uid=80010003
+script=z:\tswi\tuiscriptadaptors\scripts\uninstall.xml
+
+[u_swiappregintegration_case01]
+uid=80010002
+script=z:\tswi\tuiscriptadaptors\scripts\uninstall.xml
+
+[swiappregintegration_multipleapp_performance]
+MaxDuration=2000
+sis=z:\tswi\tsis\data\swiappregintegration_multipleapp_performance.sis
+script=z:\tswi\tuiscriptadaptors\scripts\simple.xml
+
+[u_swiappregintegration_no_app]
+uid=80010099
+script=z:\tswi\tuiscriptadaptors\scripts\uninstall.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/tuiscriptadaptors/scripts/tuiscriptadaptors_app_performance.script	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,105 @@
+//
+// 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 the License "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:
+//
+//! @file
+// SWIS unit (integration) tests
+PRINT Run all SWIS tests
+LOAD_SUITE tuiscriptadaptors
+LOAD_SUITE tSisRegistryTest
+
+//! @SYMTestCaseID		APPINSTALL-SWI-APPREG-PERFORMANCE-0001
+//! @SYMTestCaseDesc		Tests the performance of Installation of a SIS file having an executable
+//! @SYMTestPriority		Medium
+//! @SYMTestActions		Installs a SIS file an exe
+//! @SYMTestExpectedResults	File installs sucessfully
+
+START_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0001
+RUN_TEST_STEP 100 tuiscriptadaptors InstallPerformanceStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini basic_noapp_performance
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini u_basic_noapp_performance
+END_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0001
+
+//! @SYMTestCaseID		APPINSTALL-SWI-APPREG-PERFORMANCE-0002
+//! @SYMTestCaseDesc		Tests the performance of Installation of a SIS file having complete appregistration data for EN, GE and IF
+//! @SYMTestPriority		Medium
+//! @SYMTestActions		Installs a SIS file having complete appregistration data
+//! @SYMTestExpectedResults	File installs sucessfully
+
+START_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0002
+RUN_TEST_STEP 100 tuiscriptadaptors InstallPerformanceStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini swiappregintegration_performance
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini u_swiappregintegration_case01
+END_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0002
+
+
+//! @SYMTestCaseID		APPINSTALL-SWI-APPREG-PERFORMANCE-0003
+//! @SYMTestCaseDesc		Tests the performance of Installation of a SIS file having complete appregistration data for EN, GE and IF
+//! @SYMTestPriority		Medium
+//! @SYMTestActions		Installs a SIS file having complete appregistration data with zero device supported languages
+//! @SYMTestExpectedResults	File installs sucessfully
+
+START_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0003
+RUN_TEST_STEP 100 tuiscriptadaptors InstallPerformanceStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini swiappregintegration_nolang_performance
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini u_swiappregintegration_case01
+END_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0003
+
+
+//! @SYMTestCaseID		APPINSTALL-SWI-APPREG-PERFORMANCE-0004
+//! @SYMTestCaseDesc		Tests the performance of Installation of a SIS file having an application with registration resouce file and localized data (3 loc files)
+//! @SYMTestPriority		Medium
+//! @SYMTestActions		Installs a SIS file having a single application with minimal data (app data, loclized App Info and Caption and icon info)
+//! @SYMTestExpectedResults	File installs sucessfully
+
+START_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0004
+RUN_TEST_STEP 100 tuiscriptadaptors InstallPerformanceStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini swiappregintegration_oneapp_performance
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini u_swiappregintegration_base01
+END_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0004
+
+//! @SYMTestCaseID		APPINSTALL-SWI-APPREG-PERFORMANCE-0005
+//! @SYMTestCaseDesc		Tests the performance of Installation of a SIS file having two applications with registration resouce file and localized data (3 and 2 loc files)
+//! @SYMTestPriority		Medium
+//! @SYMTestActions		Installs a SIS file having two applications with minimal data (app data, loclized App Info and Caption and icon info)
+//! @SYMTestExpectedResults	File installs sucessfully
+
+START_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0005
+RUN_TEST_STEP 100 tuiscriptadaptors InstallPerformanceStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini swiappregintegration_twoapps_performance
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini u_swiappregintegration_base01
+END_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0005
+
+//! @SYMTestCaseID		APPINSTALL-SWI-APPREG-PERFORMANCE-0006
+//! @SYMTestCaseDesc		Tests the performance of Installation of a SIS file having five applications with registration resouce file and localized data (3,2,1,1 and 1 loc files)
+//! @SYMTestPriority		Medium
+//! @SYMTestActions		Installs a SIS file having two applications with minimal data (app data, loclized App Info and Caption and icon info)
+//! @SYMTestExpectedResults	File installs sucessfull
+
+START_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0006
+RUN_TEST_STEP 100 tuiscriptadaptors InstallPerformanceStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini swiappregintegration_multipleapp_performance
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini u_swiappregintegration_base01
+END_TESTCASE APPINSTALL-SWI-APPREG-INTEGRATION-0006
+
+// Ensure that SWIS shuts down after the above tests to make sure heap checks run
+RUN_TEST_STEP 5 tuiscriptadaptors SwisNotRunning
+
+//! @SYMTestCaseID		APPINSTALL-SWI-APPREG-PERFORMANCE-0007
+//! @SYMTestCaseDesc		Tests the performance of upgrade of a SIS file which delivers some files and upgrade delivering no files.
+//! @SYMTestPriority		Medium
+//! @SYMTestActions		Installation succeeds
+//! @SYMTestExpectedResults	File installs sucessfully
+
+START_TESTCASE APPINSTALL-SWI-APPREG-PERFORMANCE-0007
+RUN_TEST_STEP 100 tuiscriptadaptors InstallPerformanceStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini swiappregintegration_sa_app_performance
+RUN_TEST_STEP 100 tuiscriptadaptors InstallPerformanceStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini swiappregintegration_no_app_performance
+RUN_TEST_STEP 100 tuiscriptadaptors UninstallStep z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.ini u_swiappregintegration_no_app
+END_TESTCASE APPINSTALL-SWI-APPREG-PERFORMANCE-0007
+
+
--- a/installationservices/swi/test/tuiscriptadaptors/tswisasyncstep.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/tuiscriptadaptors/tswisasyncstep.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -36,7 +36,9 @@
 
 #include "dessisdataprovider.h"
 #include "cafsisdataprovider.h"
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 #include <apsidchecker.h>
+#endif
 #include <e32math.h>
 
 using namespace Swi;
@@ -756,6 +758,7 @@
 
 	iAsyncLauncher=CAsyncLauncher::NewL();
 	User::LeaveIfError(RProperty::Get(KUidSystemCategory, KSystemStartupModeKey, iBootMode));
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 #ifndef SWI_TEXTSHELL_ROM
 	if (iBootMode != KTextShell) 
 		{
@@ -771,6 +774,9 @@
 	// we always get the boot mode as 0 , reset the value to 1.
 	iBootMode = KTextShell;
 #endif
+#else
+	iBootMode = KTextShell;
+#endif
 	iNotificationCount = 0;
 	}
 
@@ -784,6 +790,7 @@
 
 	delete iWatchdog;
 	iWatchdog=0;
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 #ifndef SWI_TEXTSHELL_ROM
 	if (iBootMode != KTextShell)
 		{
@@ -791,6 +798,7 @@
 		delete iSwiSidChecker;
 		}
 #endif
+#endif
 	CActiveScheduler::Install(0);
 	delete iScheduler;
 	iScheduler=0;
--- a/installationservices/swi/test/tuiscriptadaptors/tswisasyncstep.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/tuiscriptadaptors/tswisasyncstep.h	Thu Jul 22 16:35:01 2010 +0100
@@ -119,7 +119,9 @@
  * @test
  * @internalComponent
  */
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 class CAppSidChecker;
+#endif
 class CAsyncManager : public CActive
 	{
 public:
@@ -189,9 +191,9 @@
 	CWatchdog* iWatchdog;
 
 	Swi::CAsyncLauncher* iAsyncLauncher;
-
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	CAppSidChecker *iSwiSidChecker;
-
+#endif
 	TInt iNotificationCount;
 	TInt iBootMode;
 	};
--- a/installationservices/swi/test/tuiscriptadaptors/tswisserver.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/tuiscriptadaptors/tswisserver.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -133,6 +133,8 @@
 	// install steps
 	if (aStepName == KSwisInstallStep)	// Install with file name
 		testStep = new CSwisInstallStep(CSwisInstallStep::EUseFileName);
+	else if (aStepName == KSwisInstallPerformanceStep)
+	    testStep = new CSwisInstallStep(CSwisInstallStep::ECheckInstallPerformance);
 	else if (aStepName == KSwisInstallFHStep)	// Install with file handle
 		testStep = new CSwisInstallStep(CSwisInstallStep::EUseFileHandle);
 	else if (aStepName == KSwisInstallMemStep)	// Install with CDesDataProvider
@@ -235,6 +237,8 @@
 		testStep = new CSwisUninstallPkgsStep(CSwisUninstallPkgsStep::EPkgDetails);
 	else if (aStepName == KSwisGetPublishedUidArrayStep)  // Get Published Package Uid's Array
 	        testStep = new CSwisCheckPublishUidStep();
+	else if (aStepName == KSwisRemoveWithLastDependent)  // Set RemoveWithLastDependent
+		testStep = new CSwisSetRemoveWithLastDependent();
 	#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	else if (aStepName == KCheckSCRFieldStep)	// Check the SCR components' 'Origin Verified', 'Known Revoked', 'DRM Ptotected' field values.
 		testStep = new CCheckScrFieldStep();
--- a/installationservices/swi/test/tuiscriptadaptors/tswisstep.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/tuiscriptadaptors/tswisstep.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -907,6 +907,10 @@
 		case EUseFileName:
 			SetTestStepName(KSwisInstallStep);
 			break;
+			
+		case ECheckInstallPerformance:
+		    SetTestStepName(KSwisInstallPerformanceStep);
+		    break;
 		
 		case EUseCAF:
 			SetTestStepName(KSwisInstallCAFStep);
@@ -1212,6 +1216,13 @@
 	return TestStepResult();
 	}
 
+void CSwisInstallStep::PrintPerformanceLog(TTime aTime)
+    {
+    _LIT(KPerformanceTestInfo, "PERFORMANCE_LOG_INFORMATION");
+    TDateTime timer = aTime.DateTime();
+    INFO_PRINTF6(_L("%S,%d:%d:%d:%d"), &KPerformanceTestInfo(), timer.Hour(), timer.Minute(), timer.Second(), timer.MicroSecond());
+    }
+
 TInt CSwisInstallStep::DoInstallL(CInstallPrefs& aInstallPrefs)
 	{
 	switch (iInstallType)
@@ -1226,6 +1237,51 @@
 			return error;
 			}
 
+		case ECheckInstallPerformance:
+		    {
+		    _LIT(KMaxDurationName, "MaxDuration");
+            _LIT(KMaxTestCaseDuration, "TEST_CASE_MAXIMUM_ALLOWED_DURATION");
+            _LIT(KActualTestCaseDuration, "TEST_CASE_ACTUAL_DURATION");
+            
+            TInt maxDuration = 0;
+            if(!GetIntFromConfig(ConfigSection(), KMaxDurationName, maxDuration))
+                {
+                ERR_PRINTF2(_L("%S could not be found in configuration."), &KMaxDurationName());
+                User::Leave(KErrNotFound);
+                }
+            
+		    TInt error;
+		    TTime startTime, endTime;
+		    startTime.HomeTime(); // Set the start time
+		    PrintPerformanceLog(startTime);
+		    
+            if (iUseDeviceLanguages)
+                error = Launcher::Install(*iUi, iSisFileName, aInstallPrefs, iDeviceLanguages);
+            else
+                error = Launcher::Install(*iUi, iSisFileName, aInstallPrefs);
+            
+            // Calculate the time taken for installation in milliseconds
+            endTime.HomeTime();
+            PrintPerformanceLog(endTime);            
+            TTimeIntervalMicroSeconds duration = endTime.MicroSecondsFrom(startTime);
+            TInt actualDuration = I64INT(duration.Int64())/1000;
+            
+            INFO_PRINTF3(_L("%S,%d"), &KMaxTestCaseDuration(), maxDuration);
+            INFO_PRINTF3(_L("%S,%d"), &KActualTestCaseDuration(), actualDuration);
+                        
+            if(actualDuration <= maxDuration)
+                {
+                INFO_PRINTF2(_L("This test meets performance requirement (Duration=%d)."), actualDuration);
+                }
+            else
+                {
+                ERR_PRINTF2(_L("This test does not meet performance requirement (Duration=%d)."), actualDuration);
+                error = KErrGeneral;
+                SetTestStepResult(EFail);
+                }
+                
+            return error;
+		    }
 
 		case EUseOpenFileName:
 		// open the file as a shared for readers only
@@ -2023,18 +2079,21 @@
 
 CSwisMmcStep::~CSwisMmcStep()
 	{
+	#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 	#ifndef SWI_TEXTSHELL_ROM
 	if (iBootMode != KTextShell)
 		{
 		delete iSwiSidChecker;
 		}
 	#endif
+	#endif
 	}
 
 TVerdict CSwisMmcStep::doTestStepPreambleL()
 	{
 	// Get the System Startup Mode
 	User::LeaveIfError(RProperty::Get(KUidSystemCategory, KSystemStartupModeKey, iBootMode));
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK	
 #ifndef SWI_TEXTSHELL_ROM
 	if (iBootMode != KTextShell)
 		{
@@ -2052,6 +2111,9 @@
 	// we always get the boot mode as 0 , reset the value to 1.
 	iBootMode = KTextShell;
 #endif
+#else
+	iBootMode = KTextShell;
+#endif
 
 	RFs fs;
 	User::LeaveIfError(fs.Connect());
@@ -2342,6 +2404,7 @@
 						}
 			
 					TInt presentMatchingDrives = 0;
+					#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 					for(TInt drive=EDriveA; drive<=EDriveZ; ++drive)
 						{
 							if(iSwiSidChecker->AppRegisteredAt(sid, drive))
@@ -2351,7 +2414,7 @@
 								INFO_PRINTF2(_L("AppRegisteredAt returned true for drive: %d"), drive);
 								}  
 						}
-			
+					#endif
 					if(presentMatchingDrives != expectMatchingDrives)
 						{
 						WARN_PRINTF4(_L("Matching drives mismatch for exe, SID = 0x%x - expected %d got %d"), 
@@ -2956,6 +3019,7 @@
 // to duplicate it here so we can load the apparc plugin to be able to test it.
 //
 //const TUid KAppSidCheckerInterfaceUid = {0x10281FBB};
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 #ifndef SWI_TEXTSHELL_ROM
 const TUid KAppSidCheckerInterfaceUidv2 = {0x20007D8C};
 
@@ -2973,4 +3037,40 @@
 	return reinterpret_cast<CAppSidChecker*>(ptr);
 	}
 #endif
+#endif
+/////
+//Step to Set RemoveWithLastDependent property
+/////
+
+CSwisSetRemoveWithLastDependent::CSwisSetRemoveWithLastDependent()
+    {
+    }
+
+CSwisSetRemoveWithLastDependent::~CSwisSetRemoveWithLastDependent()
+    {
+    }
+
+TVerdict CSwisSetRemoveWithLastDependent::doTestStepL()
+    {
+    RSisRegistrySession registrySession;
+    User::LeaveIfError(registrySession.Connect());
+    CleanupClosePushL(registrySession);
+    
+    TInt packageUid = 0;
+    GetHexFromConfig(ConfigSection(),_L("packageUid"),packageUid);    
+    TUid expectedPkgUid = TUid::Uid(packageUid);
+    RSisRegistryEntry regEntry;
+    CleanupClosePushL(regEntry);
+    User::LeaveIfError(regEntry.Open(registrySession, expectedPkgUid));
+    TRAPD(err, regEntry.SetRemoveWithLastDependentL(expectedPkgUid));
+    if(KErrNone == err)
+        SetTestStepResult(EPass);
+    else
+        SetTestStepResult(EFail);
+
+    CleanupStack::PopAndDestroy(2, &registrySession);
+    return TestStepResult();
+    
+    }
+
 // End of file
--- a/installationservices/swi/test/tuiscriptadaptors/tswisstep.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swi/test/tuiscriptadaptors/tswisstep.h	Thu Jul 22 16:35:01 2010 +0100
@@ -32,11 +32,14 @@
 #include <swi/sistruststatus.h>
 
 #include <e32base.h>
+
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 #ifndef SWI_TEXTSHELL_ROM		
 #include <apsidchecker.h>
 #else
 class CAppSidChecker;
 #endif
+#endif
 
 namespace Swi
 	{
@@ -221,7 +224,7 @@
 class CSwisInstallStep : public CSwisTestStep
 	{
 public:
-	enum TInstallType { EUseFileHandle, EUseMemory, EUseFileName, EUseCAF, EUseOpenFileName, ECheckExitValue};
+	enum TInstallType { EUseFileHandle, EUseMemory, EUseFileName, EUseCAF, EUseOpenFileName, ECheckExitValue, ECheckInstallPerformance};
 
 	CSwisInstallStep(TInstallType aInstallType, TBool aDoCancelTest = EFalse);
 	~CSwisInstallStep();
@@ -231,6 +234,7 @@
 private:
 	TInt DoInstallL(Swi::CInstallPrefs& aInstallPrefs);
 	void GetFilesToHoldOpenL();
+	void PrintPerformanceLog(TTime aTime);
 
 private:
 	TFileName iSisFileName; // name of the file to install
@@ -332,6 +336,7 @@
 #endif
 
 _LIT(KSwisInstallStep, "InstallStep");
+_LIT(KSwisInstallPerformanceStep, "InstallPerformanceStep");
 _LIT(KSwisInstallFHStep, "InstallFHStep"); // install using file handles
 _LIT(KSwisInstallMemStep, "InstallMemStep"); // install from memory
 _LIT(KSwisInstallCAFStep, "InstallCAFStep"); // install from CAF
@@ -370,6 +375,7 @@
 _LIT(KSwisRemoveUninstallPkgsStep, "RemoveUninstallPkgsStep");
 _LIT(KSwisGetPackageDetails, "GetPackageDetails");
 _LIT(KSwisGetPublishedUidArrayStep, "GetPublishedUidArrayStep");
+_LIT(KSwisRemoveWithLastDependent, "RemoveWithLastDependent");
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 _LIT(KCheckSCRFieldStep, "CheckSCRFieldStep");
 _LIT(KCheckSCRCompPropertyStep, "CheckSCRCompPropertyStep");
@@ -486,9 +492,13 @@
 	TInt iDrive;
 	TInt iBootMode;
 	TChar iDriveChar;
+
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 #ifndef SWI_TEXTSHELL_ROM
 	CAppSidChecker *iSwiSidChecker;
 #endif
+#endif
+
 	};
 	
 /**
@@ -513,4 +523,11 @@
 TBool iJustDefineProperty;
 	};
 
+class CSwisSetRemoveWithLastDependent : public CSwisTestStep
+    {
+public:    
+    CSwisSetRemoveWithLastDependent();
+    ~CSwisSetRemoveWithLastDependent();
+    virtual TVerdict doTestStepL();
+    };
 #endif // __TSWISSTEP_H__
--- a/installationservices/swiconfig/group/install_config.mrp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swiconfig/group/install_config.mrp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,19 +1,3 @@
-#
-# 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: 
-#
-
 component	install_config
 source  	\sf\mw\appinstall\installationservices\swiconfig
 binary  	\sf\mw\appinstall\installationservices\swiconfig\group all
--- a/installationservices/swiconfig/swi/swipolicy.ini	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swiconfig/swi/swipolicy.ini	Thu Jul 22 16:35:01 2010 +0100
@@ -12,8 +12,12 @@
 UserCapabilities = NetworkServices LocalServices ReadUserData WriteUserData Location UserEnvironment 
 AllowPackagePropagate = true
 ApplicationShutdownTimeoutSeconds = 10
-RunWaitTimeoutSeconds = 180
-DeletePreinstalledFilesOnUninstall = false
+RunWaitTimeoutSeconds = 600
+DeletePreinstalledFilesOnUninstall = true
 MaxNumOfLogEntries =  5
 RemoveOnlyWithLastDependent = true
 AllowOverwriteOnRestore = false
+SISCompatibleIfNoTargetDevices = false
+AllowRunOnInstallUninstall = false
+AlternativeCodeSigningOID = 1.3.6.1.4.1.94.1.49.1.2.2.1 1.3.6.1.4.1.94.1.49.1.2.2.5
+PhoneTsyName = phonetsy
\ No newline at end of file
--- a/installationservices/swidevicetools/group/security_switools_device.mrp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swidevicetools/group/security_switools_device.mrp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,19 +1,3 @@
-#
-# 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: 
-#
-
 component	security_switools_device
 source	\sf\mw\appinstall\installationservices\swidevicetools
 binary	\sf\mw\appinstall\installationservices\swidevicetools\group	all
--- a/installationservices/swidevicetools/source/swiconsole/src/ciohandler.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swidevicetools/source/swiconsole/src/ciohandler.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -433,11 +433,11 @@
 
 		if(aAllowDuplicates)
 			{
-			aIntArr.Append(number);
+			aIntArr.AppendL(number);
 			}
 		else
 			{
-			aIntArr.InsertInOrder(number);
+			aIntArr.InsertInOrderL(number);
 			}
 			
 		string.Delete(0, pos);
--- a/installationservices/swidevicetools/source/swiconsole/src/cpreferencehandler.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swidevicetools/source/swiconsole/src/cpreferencehandler.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -67,7 +67,7 @@
 	{
 	CPreferences* preferences = CPreferences::NewL();
 	// Ownership transfered to iPreferenceList
-	iPreferenceList.Append(preferences);
+	iPreferenceList.AppendL(preferences);
 	return preferences;
 	}
 
--- a/installationservices/swidevicetools/source/swiconsole/src/cpreferences.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swidevicetools/source/swiconsole/src/cpreferences.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -104,14 +104,14 @@
 	{
 	HBufC* ptr = aPackageName.AllocL();
 	// Ownership transfered to the list
-	iPackageNameList.Append(ptr);
+	iPackageNameList.AppendL(ptr);
 	}
 
 void CPreferences::AddVendorNameL(const TDesC& aVendorName)
 	{
 	HBufC* ptr = aVendorName.AllocL();
 	// Ownership transfered to the list
-	iVendorNameList.Append(ptr);
+	iVendorNameList.AppendL(ptr);
 	}
 
 TBool CPreferences::IsPackageNamePresent(const TDesC& aPackageName) const
--- a/installationservices/swinstallationfw/bwins/siftransportu.def	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swinstallationfw/bwins/siftransportu.def	Thu Jul 22 16:35:01 2010 +0100
@@ -1,82 +1,85 @@
 EXPORTS
-	?PrepareResultsForIpcL@COpaqueNamedParams@Usif@@QAEXAAVTIpcArgs@@H@Z @ 1  NONAME ; void Usif::COpaqueNamedParams::PrepareResultsForIpcL(class TIpcArgs &, int)
-	?HasCapability@TSecurityContext@Usif@@QBEHW4TCapability@@@Z @ 2  NONAME ; int Usif::TSecurityContext::HasCapability(enum TCapability) const
-	?NewL@CComponentInfo@Usif@@SAPAV12@XZ @ 3  NONAME ; class Usif::CComponentInfo * Usif::CComponentInfo::NewL(void)
-	?CancelOperation@RSifTransportClient@Usif@@QAEXXZ @ 4  NONAME ; void Usif::RSifTransportClient::CancelOperation(void)
-	??0TTransportTaskParams@Usif@@QAE@XZ @ 5  NONAME ; Usif::TTransportTaskParams::TTransportTaskParams(void)
-	?HasCapabilityL@TSecurityContext@Usif@@QBEXW4TCapability@@@Z @ 6  NONAME ; void Usif::TSecurityContext::HasCapabilityL(enum TCapability) const
-	?Authenticity@CNode@CComponentInfo@Usif@@QBE?AW4TAuthenticity@3@XZ @ 7  NONAME ; enum Usif::TAuthenticity Usif::CComponentInfo::CNode::Authenticity(void) const
-	?SetRootNodeAsChildL@CComponentInfo@Usif@@QAEXAAVCNode@12@@Z @ 8  NONAME ; void Usif::CComponentInfo::SetRootNodeAsChildL(class Usif::CComponentInfo::CNode &)
-	?Activate@RSifTransportClient@Usif@@QAEXHAAVTRequestStatus@@@Z @ 9  NONAME ; void Usif::RSifTransportClient::Activate(int, class TRequestStatus &)
-	?NewSifTransportServerLC@CSifTransportServer@Usif@@SAPAVCScsServer@@XZ @ 10  NONAME ; class CScsServer * Usif::CSifTransportServer::NewSifTransportServerLC(void)
-	?NewLC@COpaqueNamedParams@Usif@@SAPAV12@XZ @ 11  NONAME ; class Usif::COpaqueNamedParams * Usif::COpaqueNamedParams::NewLC(void)
-	?Uninstall@RSifTransportClient@Usif@@QAEXHAAVTRequestStatus@@H@Z @ 12  NONAME ; void Usif::RSifTransportClient::Uninstall(int, class TRequestStatus &, int)
-	?InstallStatus@CNode@CComponentInfo@Usif@@QBE?AW4TInstallStatus@3@XZ @ 13  NONAME ; enum Usif::TInstallStatus Usif::CComponentInfo::CNode::InstallStatus(void) const
-	?Cleanup@COpaqueNamedParams@Usif@@QAEXXZ @ 14  NONAME ; void Usif::COpaqueNamedParams::Cleanup(void)
-	??0RSifTransportClient@Usif@@QAE@XZ @ 15  NONAME ; Usif::RSifTransportClient::RSifTransportClient(void)
-	?CountL@COpaqueNamedParams@Usif@@QBEHXZ @ 16  NONAME ; int Usif::COpaqueNamedParams::CountL(void) const
-	?SecurityContext@CSifTransportTask@Usif@@IBEPBVTSecurityContext@2@XZ @ 17  NONAME ; class Usif::TSecurityContext const * Usif::CSifTransportTask::SecurityContext(void) const
-	?RootNodeL@CComponentInfo@Usif@@QBEABVCNode@12@XZ @ 18  NONAME ; class Usif::CComponentInfo::CNode const & Usif::CComponentInfo::RootNodeL(void) const
-	??1CNode@CComponentInfo@Usif@@UAE@XZ @ 19  NONAME ; Usif::CComponentInfo::CNode::~CNode(void)
-	?GetComponentInfo@RSifTransportClient@Usif@@QAEXABVTDesC16@@AAVCComponentInfo@2@AAVTRequestStatus@@@Z @ 20  NONAME ; void Usif::RSifTransportClient::GetComponentInfo(class TDesC16 const &, class Usif::CComponentInfo &, class TRequestStatus &)
-	?Deactivate@RSifTransportClient@Usif@@QAEXHAAVTRequestStatus@@@Z @ 21  NONAME ; void Usif::RSifTransportClient::Deactivate(int, class TRequestStatus &)
-	?Install@RSifTransportClient@Usif@@QAEXAAVRFile@@ABVCOpaqueNamedParams@2@AAV42@AAVTRequestStatus@@H@Z @ 22  NONAME ; void Usif::RSifTransportClient::Install(class RFile &, class Usif::COpaqueNamedParams const &, class Usif::COpaqueNamedParams &, class TRequestStatus &, int)
-	?ExternalizeL@COpaqueNamedParams@Usif@@QBEXAAVRWriteStream@@@Z @ 23  NONAME ; void Usif::COpaqueNamedParams::ExternalizeL(class RWriteStream &) const
-	?FileHandle@CSifTransportTask@Usif@@IAEPAVRFile@@XZ @ 24  NONAME ; class RFile * Usif::CSifTransportTask::FileHandle(void)
-	?Vendor@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 25  NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::Vendor(void) const
-	?ComponentName@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 26  NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::ComponentName(void) const
-	?NewLC@CNode@CComponentInfo@Usif@@SAPAV123@ABVTDesC16@@000W4TScomoState@3@W4TInstallStatus@3@H0W4TAuthenticity@3@ABVTCapabilitySet@@HHHPAV?$RPointerArray@VCApplicationInfo@CComponentInfo@Usif@@@@PAV?$RPointerArray@VCNode@CComponentInfo@Usif@@@@@Z @ 27  NONAME ; class Usif::CComponentInfo::CNode * Usif::CComponentInfo::CNode::NewLC(class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, enum Usif::TScomoState, enum Usif::TInstallStatus, int, class TDesC16 const &, enum Usif::TAuthenticity, class TCapabilitySet const &, int, int, int, class RPointerArray<class Usif::CComponentInfo::CApplicationInfo> *, class RPointerArray<class Usif::CComponentInfo::CNode> *)
-	??0TSecurityContext@Usif@@AAE@ABVRMessage2@@@Z @ 28  NONAME ; Usif::TSecurityContext::TSecurityContext(class RMessage2 const &)
-	??1COpaqueNamedParams@Usif@@UAE@XZ @ 29  NONAME ; Usif::COpaqueNamedParams::~COpaqueNamedParams(void)
-	?SoftwareTypeName@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 30  NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::SoftwareTypeName(void) const
-	?UserGrantableCaps@CNode@CComponentInfo@Usif@@QBEABVTCapabilitySet@@XZ @ 31  NONAME ; class TCapabilitySet const & Usif::CComponentInfo::CNode::UserGrantableCaps(void) const
-	?CancelImpl@CSifTransportTask@Usif@@MAEXXZ @ 32  NONAME ; void Usif::CSifTransportTask::CancelImpl(void)
-	?CustomResults@CSifTransportTask@Usif@@IAEPAVCOpaqueNamedParams@2@XZ @ 33  NONAME ; class Usif::COpaqueNamedParams * Usif::CSifTransportTask::CustomResults(void)
-	?IntByNameL@COpaqueNamedParams@Usif@@QBEHABVTDesC16@@@Z @ 34  NONAME ; int Usif::COpaqueNamedParams::IntByNameL(class TDesC16 const &) const
-	?Install@RSifTransportClient@Usif@@QAEXAAVRFile@@AAVTRequestStatus@@H@Z @ 35  NONAME ; void Usif::RSifTransportClient::Install(class RFile &, class TRequestStatus &, int)
-	?StringByNameL@COpaqueNamedParams@Usif@@QBEABVTDesC16@@ABV3@@Z @ 36  NONAME ; class TDesC16 const & Usif::COpaqueNamedParams::StringByNameL(class TDesC16 const &) const
-	??0CSifTransportTask@Usif@@IAE@AAUTTransportTaskParams@1@H@Z @ 37  NONAME ; Usif::CSifTransportTask::CSifTransportTask(struct Usif::TTransportTaskParams &, int)
-	??1CSifTransportTask@Usif@@MAE@XZ @ 38  NONAME ; Usif::CSifTransportTask::~CSifTransportTask(void)
-	?ScomoState@CNode@CComponentInfo@Usif@@QBE?AW4TScomoState@3@XZ @ 39  NONAME ; enum Usif::TScomoState Usif::CComponentInfo::CNode::ScomoState(void) const
-	?AddIntL@COpaqueNamedParams@Usif@@QAEXABVTDesC16@@H@Z @ 40  NONAME ; void Usif::COpaqueNamedParams::AddIntL(class TDesC16 const &, int)
-	?Install@RSifTransportClient@Usif@@QAEXABVTDesC16@@AAVTRequestStatus@@H@Z @ 41  NONAME ; void Usif::RSifTransportClient::Install(class TDesC16 const &, class TRequestStatus &, int)
-	?Children@CNode@CComponentInfo@Usif@@QBEABV?$RPointerArray@VCNode@CComponentInfo@Usif@@@@XZ @ 42  NONAME ; class RPointerArray<class Usif::CComponentInfo::CNode> const & Usif::CComponentInfo::CNode::Children(void) const
-	?FileName@CSifTransportTask@Usif@@IBEPBVTDesC16@@XZ @ 43  NONAME ; class TDesC16 const * Usif::CSifTransportTask::FileName(void) const
-	?Uninstall@RSifTransportClient@Usif@@QAEXHABVCOpaqueNamedParams@2@AAV32@AAVTRequestStatus@@H@Z @ 44  NONAME ; void Usif::RSifTransportClient::Uninstall(int, class Usif::COpaqueNamedParams const &, class Usif::COpaqueNamedParams &, class TRequestStatus &, int)
-	?PrepareForIpcL@CComponentInfo@Usif@@QAEXAAVTIpcArgs@@H@Z @ 45  NONAME ; void Usif::CComponentInfo::PrepareForIpcL(class TIpcArgs &, int)
-	?GetComponentInfo@RSifTransportClient@Usif@@QAEXAAVRFile@@AAVCComponentInfo@2@AAVTRequestStatus@@@Z @ 46  NONAME ; void Usif::RSifTransportClient::GetComponentInfo(class RFile &, class Usif::CComponentInfo &, class TRequestStatus &)
-	?NewLC@CComponentInfo@Usif@@SAPAV12@XZ @ 47  NONAME ; class Usif::CComponentInfo * Usif::CComponentInfo::NewLC(void)
-	?GetIntByNameL@COpaqueNamedParams@Usif@@QBEHABVTDesC16@@AAH@Z @ 48  NONAME ; int Usif::COpaqueNamedParams::GetIntByNameL(class TDesC16 const &, int &) const
-	?SetRootNodeL@CComponentInfo@Usif@@QAEXPAVCNode@12@@Z @ 49  NONAME ; void Usif::CComponentInfo::SetRootNodeL(class Usif::CComponentInfo::CNode *)
-	?CustomArguments@CSifTransportTask@Usif@@IBEPBVCOpaqueNamedParams@2@XZ @ 50  NONAME ; class Usif::COpaqueNamedParams const * Usif::CSifTransportTask::CustomArguments(void) const
-	?GetNamesL@COpaqueNamedParams@Usif@@QBEXAAV?$RPointerArray@VHBufC16@@@@@Z @ 51  NONAME ; void Usif::COpaqueNamedParams::GetNamesL(class RPointerArray<class HBufC16> &) const
-	?MaxInstalledSize@CNode@CComponentInfo@Usif@@QBEHXZ @ 52  NONAME ; int Usif::CComponentInfo::CNode::MaxInstalledSize(void) const
-	?Version@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 53  NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::Version(void) const
-	?RequestStatus@CSifTransportTask@Usif@@IAEPAVTRequestStatus@@XZ @ 54  NONAME ; class TRequestStatus * Usif::CSifTransportTask::RequestStatus(void)
-	?Install@RSifTransportClient@Usif@@QAEXABVTDesC16@@ABVCOpaqueNamedParams@2@AAV42@AAVTRequestStatus@@H@Z @ 55  NONAME ; void Usif::RSifTransportClient::Install(class TDesC16 const &, class Usif::COpaqueNamedParams const &, class Usif::COpaqueNamedParams &, class TRequestStatus &, int)
-	?AddStringL@COpaqueNamedParams@Usif@@QAEXABVTDesC16@@0@Z @ 56  NONAME ; void Usif::COpaqueNamedParams::AddStringL(class TDesC16 const &, class TDesC16 const &)
-	?ExternalizeL@CComponentInfo@Usif@@QBEXAAVRWriteStream@@@Z @ 57  NONAME ; void Usif::CComponentInfo::ExternalizeL(class RWriteStream &) const
-	?AddChildL@CNode@CComponentInfo@Usif@@QAEXPAV123@@Z @ 58  NONAME ; void Usif::CComponentInfo::CNode::AddChildL(class Usif::CComponentInfo::CNode *)
-	?ComponentId@CNode@CComponentInfo@Usif@@QBEHXZ @ 59  NONAME ; int Usif::CComponentInfo::CNode::ComponentId(void) const
-	?ComponentId@CSifTransportTask@Usif@@IBEHXZ @ 60  NONAME ; int Usif::CSifTransportTask::ComponentId(void) const
-	?StartTransportServer@Usif@@YAHABVTDesC16@@ABVTVersion@@P6APAVCSifTransportTask@1@W4TTaskType@TransportTaskFactory@1@AAUTTransportTaskParams@1@@ZH@Z @ 61  NONAME ; int Usif::StartTransportServer(class TDesC16 const &, class TVersion const &, class Usif::CSifTransportTask * (*)(enum Usif::TransportTaskFactory::TTaskType, struct Usif::TTransportTaskParams &), int)
-	?Close@RSifTransportClient@Usif@@QAEXXZ @ 62  NONAME ; void Usif::RSifTransportClient::Close(void)
-	?SecureId@TSecurityContext@Usif@@QBE?AVTSecureId@@XZ @ 63  NONAME ; class TSecureId Usif::TSecurityContext::SecureId(void) const
-	?NewL@COpaqueNamedParams@Usif@@SAPAV12@XZ @ 64  NONAME ; class Usif::COpaqueNamedParams * Usif::COpaqueNamedParams::NewL(void)
-	?Connect@RSifTransportClient@Usif@@QAEHABVTDesC16@@ABVTVersion@@0VTUid@@@Z @ 65  NONAME ; int Usif::RSifTransportClient::Connect(class TDesC16 const &, class TVersion const &, class TDesC16 const &, class TUid)
-	??1CComponentInfo@Usif@@UAE@XZ @ 66  NONAME ; Usif::CComponentInfo::~CComponentInfo(void)
-	?GlobalComponentId@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 67  NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::GlobalComponentId(void) const
-	?ComponentInfo@CSifTransportTask@Usif@@IAEPAVCComponentInfo@2@XZ @ 68  NONAME ; class Usif::CComponentInfo * Usif::CSifTransportTask::ComponentInfo(void)
-	?InternalizeL@COpaqueNamedParams@Usif@@QAEXAAVRReadStream@@@Z @ 69  NONAME ; void Usif::COpaqueNamedParams::InternalizeL(class RReadStream &)
-	?PrepareArgumentsForIpcL@COpaqueNamedParams@Usif@@QBEXAAVTIpcArgs@@H@Z @ 70  NONAME ; void Usif::COpaqueNamedParams::PrepareArgumentsForIpcL(class TIpcArgs &, int) const
-	?HasExecutable@CNode@CComponentInfo@Usif@@QBEHXZ @ 71  NONAME ; int Usif::CComponentInfo::CNode::HasExecutable(void) const
-	?GroupName@CApplicationInfo@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 72  NONAME ; class TDesC16 const & Usif::CComponentInfo::CApplicationInfo::GroupName(void) const
-	?IconFileName@CApplicationInfo@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 73  NONAME ; class TDesC16 const & Usif::CComponentInfo::CApplicationInfo::IconFileName(void) const
-	?NewLC@CApplicationInfo@CComponentInfo@Usif@@SAPAV123@ABVTUid@@ABVTDesC16@@11@Z @ 74  NONAME ; class Usif::CComponentInfo::CApplicationInfo * Usif::CComponentInfo::CApplicationInfo::NewLC(class TUid const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &)
-	?DriveSeletionRequired@CNode@CComponentInfo@Usif@@QBEHXZ @ 75  NONAME ; int Usif::CComponentInfo::CNode::DriveSeletionRequired(void) const
-	?AppUid@CApplicationInfo@CComponentInfo@Usif@@QBEABVTUid@@XZ @ 76  NONAME ; class TUid const & Usif::CComponentInfo::CApplicationInfo::AppUid(void) const
-	??1CApplicationInfo@CComponentInfo@Usif@@UAE@XZ @ 77  NONAME ; Usif::CComponentInfo::CApplicationInfo::~CApplicationInfo(void)
-	?Applications@CNode@CComponentInfo@Usif@@QBEABV?$RPointerArray@VCApplicationInfo@CComponentInfo@Usif@@@@XZ @ 78  NONAME ; class RPointerArray<class Usif::CComponentInfo::CApplicationInfo> const & Usif::CComponentInfo::CNode::Applications(void) const
-	?Name@CApplicationInfo@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 79  NONAME ; class TDesC16 const & Usif::CComponentInfo::CApplicationInfo::Name(void) const
-	
+	?PrepareResultsForIpcL@COpaqueNamedParams@Usif@@QAEXAAVTIpcArgs@@H@Z @ 1 NONAME ; void Usif::COpaqueNamedParams::PrepareResultsForIpcL(class TIpcArgs &, int)
+	?HasCapability@TSecurityContext@Usif@@QBEHW4TCapability@@@Z @ 2 NONAME ; int Usif::TSecurityContext::HasCapability(enum TCapability) const
+	?NewL@CComponentInfo@Usif@@SAPAV12@XZ @ 3 NONAME ; class Usif::CComponentInfo * Usif::CComponentInfo::NewL(void)
+	?CancelOperation@RSifTransportClient@Usif@@QAEXXZ @ 4 NONAME ; void Usif::RSifTransportClient::CancelOperation(void)
+	??0TTransportTaskParams@Usif@@QAE@XZ @ 5 NONAME ; Usif::TTransportTaskParams::TTransportTaskParams(void)
+	?HasCapabilityL@TSecurityContext@Usif@@QBEXW4TCapability@@@Z @ 6 NONAME ; void Usif::TSecurityContext::HasCapabilityL(enum TCapability) const
+	?Authenticity@CNode@CComponentInfo@Usif@@QBE?AW4TAuthenticity@3@XZ @ 7 NONAME ; enum Usif::TAuthenticity Usif::CComponentInfo::CNode::Authenticity(void) const
+	?SetRootNodeAsChildL@CComponentInfo@Usif@@QAEXAAVCNode@12@@Z @ 8 NONAME ; void Usif::CComponentInfo::SetRootNodeAsChildL(class Usif::CComponentInfo::CNode &)
+	?Activate@RSifTransportClient@Usif@@QAEXHAAVTRequestStatus@@@Z @ 9 NONAME ; void Usif::RSifTransportClient::Activate(int, class TRequestStatus &)
+	?NewSifTransportServerLC@CSifTransportServer@Usif@@SAPAVCScsServer@@XZ @ 10 NONAME ; class CScsServer * Usif::CSifTransportServer::NewSifTransportServerLC(void)
+	?NewLC@COpaqueNamedParams@Usif@@SAPAV12@XZ @ 11 NONAME ; class Usif::COpaqueNamedParams * Usif::COpaqueNamedParams::NewLC(void)
+	?Uninstall@RSifTransportClient@Usif@@QAEXHAAVTRequestStatus@@H@Z @ 12 NONAME ; void Usif::RSifTransportClient::Uninstall(int, class TRequestStatus &, int)
+	?InstallStatus@CNode@CComponentInfo@Usif@@QBE?AW4TInstallStatus@3@XZ @ 13 NONAME ; enum Usif::TInstallStatus Usif::CComponentInfo::CNode::InstallStatus(void) const
+	?Cleanup@COpaqueNamedParams@Usif@@QAEXXZ @ 14 NONAME ; void Usif::COpaqueNamedParams::Cleanup(void)
+	??0RSifTransportClient@Usif@@QAE@XZ @ 15 NONAME ; Usif::RSifTransportClient::RSifTransportClient(void)
+	?CountL@COpaqueNamedParams@Usif@@QBEHXZ @ 16 NONAME ; int Usif::COpaqueNamedParams::CountL(void) const
+	?SecurityContext@CSifTransportTask@Usif@@IBEPBVTSecurityContext@2@XZ @ 17 NONAME ; class Usif::TSecurityContext const * Usif::CSifTransportTask::SecurityContext(void) const
+	?RootNodeL@CComponentInfo@Usif@@QBEABVCNode@12@XZ @ 18 NONAME ; class Usif::CComponentInfo::CNode const & Usif::CComponentInfo::RootNodeL(void) const
+	??1CNode@CComponentInfo@Usif@@UAE@XZ @ 19 NONAME ; Usif::CComponentInfo::CNode::~CNode(void)
+	?GetComponentInfo@RSifTransportClient@Usif@@QAEXABVTDesC16@@AAVCComponentInfo@2@AAVTRequestStatus@@@Z @ 20 NONAME ; void Usif::RSifTransportClient::GetComponentInfo(class TDesC16 const &, class Usif::CComponentInfo &, class TRequestStatus &)
+	?Deactivate@RSifTransportClient@Usif@@QAEXHAAVTRequestStatus@@@Z @ 21 NONAME ; void Usif::RSifTransportClient::Deactivate(int, class TRequestStatus &)
+	?Install@RSifTransportClient@Usif@@QAEXAAVRFile@@ABVCOpaqueNamedParams@2@AAV42@AAVTRequestStatus@@H@Z @ 22 NONAME ; void Usif::RSifTransportClient::Install(class RFile &, class Usif::COpaqueNamedParams const &, class Usif::COpaqueNamedParams &, class TRequestStatus &, int)
+	?ExternalizeL@COpaqueNamedParams@Usif@@QBEXAAVRWriteStream@@@Z @ 23 NONAME ; void Usif::COpaqueNamedParams::ExternalizeL(class RWriteStream &) const
+	?FileHandle@CSifTransportTask@Usif@@IAEPAVRFile@@XZ @ 24 NONAME ; class RFile * Usif::CSifTransportTask::FileHandle(void)
+	?Vendor@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 25 NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::Vendor(void) const
+	?ComponentName@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 26 NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::ComponentName(void) const
+	?NewLC@CNode@CComponentInfo@Usif@@SAPAV123@ABVTDesC16@@000W4TScomoState@3@W4TInstallStatus@3@H0W4TAuthenticity@3@ABVTCapabilitySet@@HHHPAV?$RPointerArray@VCApplicationInfo@CComponentInfo@Usif@@@@PAV?$RPointerArray@VCNode@CComponentInfo@Usif@@@@@Z @ 27 NONAME ; class Usif::CComponentInfo::CNode * Usif::CComponentInfo::CNode::NewLC(class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, enum Usif::TScomoState, enum Usif::TInstallStatus, int, class TDesC16 const &, enum Usif::TAuthenticity, class TCapabilitySet const &, int, int, int, class RPointerArray<class Usif::CComponentInfo::CApplicationInfo> *, class RPointerArray<class Usif::CComponentInfo::CNode> *)
+	??0TSecurityContext@Usif@@AAE@ABVRMessage2@@@Z @ 28 NONAME ; Usif::TSecurityContext::TSecurityContext(class RMessage2 const &)
+	??1COpaqueNamedParams@Usif@@UAE@XZ @ 29 NONAME ; Usif::COpaqueNamedParams::~COpaqueNamedParams(void)
+	?SoftwareTypeName@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 30 NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::SoftwareTypeName(void) const
+	?UserGrantableCaps@CNode@CComponentInfo@Usif@@QBEABVTCapabilitySet@@XZ @ 31 NONAME ; class TCapabilitySet const & Usif::CComponentInfo::CNode::UserGrantableCaps(void) const
+	?CancelImpl@CSifTransportTask@Usif@@MAEXXZ @ 32 NONAME ; void Usif::CSifTransportTask::CancelImpl(void)
+	?CustomResults@CSifTransportTask@Usif@@IAEPAVCOpaqueNamedParams@2@XZ @ 33 NONAME ; class Usif::COpaqueNamedParams * Usif::CSifTransportTask::CustomResults(void)
+	?IntByNameL@COpaqueNamedParams@Usif@@QBEHABVTDesC16@@@Z @ 34 NONAME ; int Usif::COpaqueNamedParams::IntByNameL(class TDesC16 const &) const
+	?Install@RSifTransportClient@Usif@@QAEXAAVRFile@@AAVTRequestStatus@@H@Z @ 35 NONAME ; void Usif::RSifTransportClient::Install(class RFile &, class TRequestStatus &, int)
+	?StringByNameL@COpaqueNamedParams@Usif@@QBEABVTDesC16@@ABV3@@Z @ 36 NONAME ; class TDesC16 const & Usif::COpaqueNamedParams::StringByNameL(class TDesC16 const &) const
+	??0CSifTransportTask@Usif@@IAE@AAUTTransportTaskParams@1@H@Z @ 37 NONAME ; Usif::CSifTransportTask::CSifTransportTask(struct Usif::TTransportTaskParams &, int)
+	??1CSifTransportTask@Usif@@MAE@XZ @ 38 NONAME ; Usif::CSifTransportTask::~CSifTransportTask(void)
+	?ScomoState@CNode@CComponentInfo@Usif@@QBE?AW4TScomoState@3@XZ @ 39 NONAME ; enum Usif::TScomoState Usif::CComponentInfo::CNode::ScomoState(void) const
+	?AddIntL@COpaqueNamedParams@Usif@@QAEXABVTDesC16@@H@Z @ 40 NONAME ; void Usif::COpaqueNamedParams::AddIntL(class TDesC16 const &, int)
+	?Install@RSifTransportClient@Usif@@QAEXABVTDesC16@@AAVTRequestStatus@@H@Z @ 41 NONAME ; void Usif::RSifTransportClient::Install(class TDesC16 const &, class TRequestStatus &, int)
+	?Children@CNode@CComponentInfo@Usif@@QBEABV?$RPointerArray@VCNode@CComponentInfo@Usif@@@@XZ @ 42 NONAME ; class RPointerArray<class Usif::CComponentInfo::CNode> const & Usif::CComponentInfo::CNode::Children(void) const
+	?FileName@CSifTransportTask@Usif@@IBEPBVTDesC16@@XZ @ 43 NONAME ; class TDesC16 const * Usif::CSifTransportTask::FileName(void) const
+	?Uninstall@RSifTransportClient@Usif@@QAEXHABVCOpaqueNamedParams@2@AAV32@AAVTRequestStatus@@H@Z @ 44 NONAME ; void Usif::RSifTransportClient::Uninstall(int, class Usif::COpaqueNamedParams const &, class Usif::COpaqueNamedParams &, class TRequestStatus &, int)
+	?PrepareForIpcL@CComponentInfo@Usif@@QAEXAAVTIpcArgs@@H@Z @ 45 NONAME ; void Usif::CComponentInfo::PrepareForIpcL(class TIpcArgs &, int)
+	?GetComponentInfo@RSifTransportClient@Usif@@QAEXAAVRFile@@AAVCComponentInfo@2@AAVTRequestStatus@@@Z @ 46 NONAME ; void Usif::RSifTransportClient::GetComponentInfo(class RFile &, class Usif::CComponentInfo &, class TRequestStatus &)
+	?NewLC@CComponentInfo@Usif@@SAPAV12@XZ @ 47 NONAME ; class Usif::CComponentInfo * Usif::CComponentInfo::NewLC(void)
+	?GetIntByNameL@COpaqueNamedParams@Usif@@QBEHABVTDesC16@@AAH@Z @ 48 NONAME ; int Usif::COpaqueNamedParams::GetIntByNameL(class TDesC16 const &, int &) const
+	?SetRootNodeL@CComponentInfo@Usif@@QAEXPAVCNode@12@@Z @ 49 NONAME ; void Usif::CComponentInfo::SetRootNodeL(class Usif::CComponentInfo::CNode *)
+	?CustomArguments@CSifTransportTask@Usif@@IBEPBVCOpaqueNamedParams@2@XZ @ 50 NONAME ; class Usif::COpaqueNamedParams const * Usif::CSifTransportTask::CustomArguments(void) const
+	?GetNamesL@COpaqueNamedParams@Usif@@QBEXAAV?$RPointerArray@VHBufC16@@@@@Z @ 51 NONAME ; void Usif::COpaqueNamedParams::GetNamesL(class RPointerArray<class HBufC16> &) const
+	?MaxInstalledSize@CNode@CComponentInfo@Usif@@QBEHXZ @ 52 NONAME ; int Usif::CComponentInfo::CNode::MaxInstalledSize(void) const
+	?Version@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 53 NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::Version(void) const
+	?RequestStatus@CSifTransportTask@Usif@@IAEPAVTRequestStatus@@XZ @ 54 NONAME ; class TRequestStatus * Usif::CSifTransportTask::RequestStatus(void)
+	?Install@RSifTransportClient@Usif@@QAEXABVTDesC16@@ABVCOpaqueNamedParams@2@AAV42@AAVTRequestStatus@@H@Z @ 55 NONAME ; void Usif::RSifTransportClient::Install(class TDesC16 const &, class Usif::COpaqueNamedParams const &, class Usif::COpaqueNamedParams &, class TRequestStatus &, int)
+	?AddStringL@COpaqueNamedParams@Usif@@QAEXABVTDesC16@@0@Z @ 56 NONAME ; void Usif::COpaqueNamedParams::AddStringL(class TDesC16 const &, class TDesC16 const &)
+	?ExternalizeL@CComponentInfo@Usif@@QBEXAAVRWriteStream@@@Z @ 57 NONAME ; void Usif::CComponentInfo::ExternalizeL(class RWriteStream &) const
+	?AddChildL@CNode@CComponentInfo@Usif@@QAEXPAV123@@Z @ 58 NONAME ; void Usif::CComponentInfo::CNode::AddChildL(class Usif::CComponentInfo::CNode *)
+	?ComponentId@CNode@CComponentInfo@Usif@@QBEHXZ @ 59 NONAME ; int Usif::CComponentInfo::CNode::ComponentId(void) const
+	?ComponentId@CSifTransportTask@Usif@@IBEHXZ @ 60 NONAME ; int Usif::CSifTransportTask::ComponentId(void) const
+	?StartTransportServer@Usif@@YAHABVTDesC16@@ABVTVersion@@P6APAVCSifTransportTask@1@W4TTaskType@TransportTaskFactory@1@AAUTTransportTaskParams@1@@ZH@Z @ 61 NONAME ; int Usif::StartTransportServer(class TDesC16 const &, class TVersion const &, class Usif::CSifTransportTask * (*)(enum Usif::TransportTaskFactory::TTaskType, struct Usif::TTransportTaskParams &), int)
+	?Close@RSifTransportClient@Usif@@QAEXXZ @ 62 NONAME ; void Usif::RSifTransportClient::Close(void)
+	?SecureId@TSecurityContext@Usif@@QBE?AVTSecureId@@XZ @ 63 NONAME ; class TSecureId Usif::TSecurityContext::SecureId(void) const
+	?NewL@COpaqueNamedParams@Usif@@SAPAV12@XZ @ 64 NONAME ; class Usif::COpaqueNamedParams * Usif::COpaqueNamedParams::NewL(void)
+	?Connect@RSifTransportClient@Usif@@QAEHABVTDesC16@@ABVTVersion@@0VTUid@@@Z @ 65 NONAME ; int Usif::RSifTransportClient::Connect(class TDesC16 const &, class TVersion const &, class TDesC16 const &, class TUid)
+	??1CComponentInfo@Usif@@UAE@XZ @ 66 NONAME ; Usif::CComponentInfo::~CComponentInfo(void)
+	?GlobalComponentId@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 67 NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::GlobalComponentId(void) const
+	?ComponentInfo@CSifTransportTask@Usif@@IAEPAVCComponentInfo@2@XZ @ 68 NONAME ; class Usif::CComponentInfo * Usif::CSifTransportTask::ComponentInfo(void)
+	?InternalizeL@COpaqueNamedParams@Usif@@QAEXAAVRReadStream@@@Z @ 69 NONAME ; void Usif::COpaqueNamedParams::InternalizeL(class RReadStream &)
+	?PrepareArgumentsForIpcL@COpaqueNamedParams@Usif@@QBEXAAVTIpcArgs@@H@Z @ 70 NONAME ; void Usif::COpaqueNamedParams::PrepareArgumentsForIpcL(class TIpcArgs &, int) const
+	?HasExecutable@CNode@CComponentInfo@Usif@@QBEHXZ @ 71 NONAME ; int Usif::CComponentInfo::CNode::HasExecutable(void) const
+	?GroupName@CApplicationInfo@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 72 NONAME ; class TDesC16 const & Usif::CComponentInfo::CApplicationInfo::GroupName(void) const
+	?IconFileName@CApplicationInfo@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 73 NONAME ; class TDesC16 const & Usif::CComponentInfo::CApplicationInfo::IconFileName(void) const
+	?NewLC@CApplicationInfo@CComponentInfo@Usif@@SAPAV123@ABVTUid@@ABVTDesC16@@11@Z @ 74 NONAME ; class Usif::CComponentInfo::CApplicationInfo * Usif::CComponentInfo::CApplicationInfo::NewLC(class TUid const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &)
+	?DriveSeletionRequired@CNode@CComponentInfo@Usif@@QBEHXZ @ 75 NONAME ; int Usif::CComponentInfo::CNode::DriveSeletionRequired(void) const
+	?AppUid@CApplicationInfo@CComponentInfo@Usif@@QBEABVTUid@@XZ @ 76 NONAME ; class TUid const & Usif::CComponentInfo::CApplicationInfo::AppUid(void) const
+	??1CApplicationInfo@CComponentInfo@Usif@@UAE@XZ @ 77 NONAME ; Usif::CComponentInfo::CApplicationInfo::~CApplicationInfo(void)
+	?Applications@CNode@CComponentInfo@Usif@@QBEABV?$RPointerArray@VCApplicationInfo@CComponentInfo@Usif@@@@XZ @ 78 NONAME ; class RPointerArray<class Usif::CComponentInfo::CApplicationInfo> const & Usif::CComponentInfo::CNode::Applications(void) const
+	?Name@CApplicationInfo@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 79 NONAME ; class TDesC16 const & Usif::CComponentInfo::CApplicationInfo::Name(void) const
+	?StringArrayByNameL@COpaqueNamedParams@Usif@@QBEABV?$RPointerArray@VHBufC16@@@@ABVTDesC16@@@Z @ 80 NONAME ; class RPointerArray<class HBufC16> const & Usif::COpaqueNamedParams::StringArrayByNameL(class TDesC16 const &) const
+	?AddIntArrayL@COpaqueNamedParams@Usif@@QAEXABVTDesC16@@ABV?$RArray@H@@@Z @ 81 NONAME ; void Usif::COpaqueNamedParams::AddIntArrayL(class TDesC16 const &, class RArray<int> const &)
+	?AddStringArrayL@COpaqueNamedParams@Usif@@QAEXABVTDesC16@@ABV?$RPointerArray@VHBufC16@@@@@Z @ 82 NONAME ; void Usif::COpaqueNamedParams::AddStringArrayL(class TDesC16 const &, class RPointerArray<class HBufC16> const &)
+	?IntArrayByNameL@COpaqueNamedParams@Usif@@QBEABV?$RArray@H@@ABVTDesC16@@@Z @ 83 NONAME ; class RArray<int> const & Usif::COpaqueNamedParams::IntArrayByNameL(class TDesC16 const &) const
 
--- a/installationservices/swinstallationfw/bwins/sifu.def	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swinstallationfw/bwins/sifu.def	Thu Jul 22 16:35:01 2010 +0100
@@ -1,67 +1,71 @@
 EXPORTS
-	?PrepareResultsForIpcL@COpaqueNamedParams@Usif@@QAEXAAVTIpcArgs@@H@Z @ 1  NONAME ; void Usif::COpaqueNamedParams::PrepareResultsForIpcL(class TIpcArgs &, int)
-	?HasCapability@TSecurityContext@Usif@@QBEHW4TCapability@@@Z @ 2  NONAME ; int Usif::TSecurityContext::HasCapability(enum TCapability) const
-	?SoftwareTypeName@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 3  NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::SoftwareTypeName(void) const
-	?NewL@CComponentInfo@Usif@@SAPAV12@XZ @ 4  NONAME ; class Usif::CComponentInfo * Usif::CComponentInfo::NewL(void)
-	?UserGrantableCaps@CNode@CComponentInfo@Usif@@QBEABVTCapabilitySet@@XZ @ 5  NONAME ; class TCapabilitySet const & Usif::CComponentInfo::CNode::UserGrantableCaps(void) const
-	?IntByNameL@COpaqueNamedParams@Usif@@QBEHABVTDesC16@@@Z @ 6  NONAME ; int Usif::COpaqueNamedParams::IntByNameL(class TDesC16 const &) const
-	?HasCapabilityL@TSecurityContext@Usif@@QBEXW4TCapability@@@Z @ 7  NONAME ; void Usif::TSecurityContext::HasCapabilityL(enum TCapability) const
-	?Close@RSoftwareInstall@Usif@@QAEXXZ @ 8  NONAME ; void Usif::RSoftwareInstall::Close(void)
-	?Authenticity@CNode@CComponentInfo@Usif@@QBE?AW4TAuthenticity@3@XZ @ 9  NONAME ; enum Usif::TAuthenticity Usif::CComponentInfo::CNode::Authenticity(void) const
-	?SetRootNodeAsChildL@CComponentInfo@Usif@@QAEXAAVCNode@12@@Z @ 10  NONAME ; void Usif::CComponentInfo::SetRootNodeAsChildL(class Usif::CComponentInfo::CNode &)
-	?Uninstall@RSoftwareInstall@Usif@@QAEXHAAVTRequestStatus@@H@Z @ 11  NONAME ; void Usif::RSoftwareInstall::Uninstall(int, class TRequestStatus &, int)
-	?StringByNameL@COpaqueNamedParams@Usif@@QBEABVTDesC16@@ABV3@@Z @ 12  NONAME ; class TDesC16 const & Usif::COpaqueNamedParams::StringByNameL(class TDesC16 const &) const
-	?ScomoState@CNode@CComponentInfo@Usif@@QBE?AW4TScomoState@3@XZ @ 13  NONAME ; enum Usif::TScomoState Usif::CComponentInfo::CNode::ScomoState(void) const
-	?Install@RSoftwareInstall@Usif@@QAEXABVTDesC16@@ABVCOpaqueNamedParams@2@AAV42@AAVTRequestStatus@@H@Z @ 14  NONAME ; void Usif::RSoftwareInstall::Install(class TDesC16 const &, class Usif::COpaqueNamedParams const &, class Usif::COpaqueNamedParams &, class TRequestStatus &, int)
-	?AddIntL@COpaqueNamedParams@Usif@@QAEXABVTDesC16@@H@Z @ 15  NONAME ; void Usif::COpaqueNamedParams::AddIntL(class TDesC16 const &, int)
-	?NewLC@COpaqueNamedParams@Usif@@SAPAV12@XZ @ 16  NONAME ; class Usif::COpaqueNamedParams * Usif::COpaqueNamedParams::NewLC(void)
-	?InstallStatus@CNode@CComponentInfo@Usif@@QBE?AW4TInstallStatus@3@XZ @ 17  NONAME ; enum Usif::TInstallStatus Usif::CComponentInfo::CNode::InstallStatus(void) const
-	?Children@CNode@CComponentInfo@Usif@@QBEABV?$RPointerArray@VCNode@CComponentInfo@Usif@@@@XZ @ 18  NONAME ; class RPointerArray<class Usif::CComponentInfo::CNode> const & Usif::CComponentInfo::CNode::Children(void) const
-	?Cleanup@COpaqueNamedParams@Usif@@QAEXXZ @ 19  NONAME ; void Usif::COpaqueNamedParams::Cleanup(void)
-	?CancelOperation@RSoftwareInstall@Usif@@QAEXXZ @ 20  NONAME ; void Usif::RSoftwareInstall::CancelOperation(void)
-	?PrepareForIpcL@CComponentInfo@Usif@@QAEXAAVTIpcArgs@@H@Z @ 21  NONAME ; void Usif::CComponentInfo::PrepareForIpcL(class TIpcArgs &, int)
-	?NewLC@CComponentInfo@Usif@@SAPAV12@XZ @ 22  NONAME ; class Usif::CComponentInfo * Usif::CComponentInfo::NewLC(void)
-	?CountL@COpaqueNamedParams@Usif@@QBEHXZ @ 23  NONAME ; int Usif::COpaqueNamedParams::CountL(void) const
-	?SetRootNodeL@CComponentInfo@Usif@@QAEXPAVCNode@12@@Z @ 24  NONAME ; void Usif::CComponentInfo::SetRootNodeL(class Usif::CComponentInfo::CNode *)
-	?GetIntByNameL@COpaqueNamedParams@Usif@@QBEHABVTDesC16@@AAH@Z @ 25  NONAME ; int Usif::COpaqueNamedParams::GetIntByNameL(class TDesC16 const &, int &) const
-	?MaxInstalledSize@CNode@CComponentInfo@Usif@@QBEHXZ @ 26  NONAME ; int Usif::CComponentInfo::CNode::MaxInstalledSize(void) const
-	?GetNamesL@COpaqueNamedParams@Usif@@QBEXAAV?$RPointerArray@VHBufC16@@@@@Z @ 27  NONAME ; void Usif::COpaqueNamedParams::GetNamesL(class RPointerArray<class HBufC16> &) const
-	?Version@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 28  NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::Version(void) const
-	?RootNodeL@CComponentInfo@Usif@@QBEABVCNode@12@XZ @ 29  NONAME ; class Usif::CComponentInfo::CNode const & Usif::CComponentInfo::RootNodeL(void) const
-	??1CNode@CComponentInfo@Usif@@UAE@XZ @ 30  NONAME ; Usif::CComponentInfo::CNode::~CNode(void)
-	?GetComponentInfo@RSoftwareInstall@Usif@@QAEXABVTDesC16@@AAVCComponentInfo@2@AAVTRequestStatus@@@Z @ 31  NONAME ; void Usif::RSoftwareInstall::GetComponentInfo(class TDesC16 const &, class Usif::CComponentInfo &, class TRequestStatus &)
-	?Uninstall@RSoftwareInstall@Usif@@QAEXHABVCOpaqueNamedParams@2@AAV32@AAVTRequestStatus@@H@Z @ 32  NONAME ; void Usif::RSoftwareInstall::Uninstall(int, class Usif::COpaqueNamedParams const &, class Usif::COpaqueNamedParams &, class TRequestStatus &, int)
-	?Deactivate@RSoftwareInstall@Usif@@QAEXHAAVTRequestStatus@@@Z @ 33  NONAME ; void Usif::RSoftwareInstall::Deactivate(int, class TRequestStatus &)
-	?AddStringL@COpaqueNamedParams@Usif@@QAEXABVTDesC16@@0@Z @ 34  NONAME ; void Usif::COpaqueNamedParams::AddStringL(class TDesC16 const &, class TDesC16 const &)
-	?AddChildL@CNode@CComponentInfo@Usif@@QAEXPAV123@@Z @ 35  NONAME ; void Usif::CComponentInfo::CNode::AddChildL(class Usif::CComponentInfo::CNode *)
-	?ComponentId@CNode@CComponentInfo@Usif@@QBEHXZ @ 36  NONAME ; int Usif::CComponentInfo::CNode::ComponentId(void) const
-	?ExternalizeL@CComponentInfo@Usif@@QBEXAAVRWriteStream@@@Z @ 37  NONAME ; void Usif::CComponentInfo::ExternalizeL(class RWriteStream &) const
-	??0RSoftwareInstall@Usif@@QAE@XZ @ 38  NONAME ; Usif::RSoftwareInstall::RSoftwareInstall(void)
-	?SecureId@TSecurityContext@Usif@@QBE?AVTSecureId@@XZ @ 39  NONAME ; class TSecureId Usif::TSecurityContext::SecureId(void) const
-	?Activate@RSoftwareInstall@Usif@@QAEXHAAVTRequestStatus@@@Z @ 40  NONAME ; void Usif::RSoftwareInstall::Activate(int, class TRequestStatus &)
-	?ExternalizeL@COpaqueNamedParams@Usif@@QBEXAAVRWriteStream@@@Z @ 41  NONAME ; void Usif::COpaqueNamedParams::ExternalizeL(class RWriteStream &) const
-	?Install@RSoftwareInstall@Usif@@QAEXABVTDesC16@@AAVTRequestStatus@@H@Z @ 42  NONAME ; void Usif::RSoftwareInstall::Install(class TDesC16 const &, class TRequestStatus &, int)
-	?Vendor@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 43  NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::Vendor(void) const
-	?NewL@COpaqueNamedParams@Usif@@SAPAV12@XZ @ 44  NONAME ; class Usif::COpaqueNamedParams * Usif::COpaqueNamedParams::NewL(void)
-	?GetComponentInfo@RSoftwareInstall@Usif@@QAEXAAVRFile@@AAVCComponentInfo@2@AAVTRequestStatus@@@Z @ 45  NONAME ; void Usif::RSoftwareInstall::GetComponentInfo(class RFile &, class Usif::CComponentInfo &, class TRequestStatus &)
-	?ComponentName@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 46  NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::ComponentName(void) const
-	?Connect@RSoftwareInstall@Usif@@QAEHXZ @ 47  NONAME ; int Usif::RSoftwareInstall::Connect(void)
-	?Install@RSoftwareInstall@Usif@@QAEXAAVRFile@@ABVCOpaqueNamedParams@2@AAV42@AAVTRequestStatus@@H@Z @ 48  NONAME ; void Usif::RSoftwareInstall::Install(class RFile &, class Usif::COpaqueNamedParams const &, class Usif::COpaqueNamedParams &, class TRequestStatus &, int)
-	??1CComponentInfo@Usif@@UAE@XZ @ 49  NONAME ; Usif::CComponentInfo::~CComponentInfo(void)
-	?NewLC@CNode@CComponentInfo@Usif@@SAPAV123@ABVTDesC16@@000W4TScomoState@3@W4TInstallStatus@3@H0W4TAuthenticity@3@ABVTCapabilitySet@@HHHPAV?$RPointerArray@VCApplicationInfo@CComponentInfo@Usif@@@@PAV?$RPointerArray@VCNode@CComponentInfo@Usif@@@@@Z @ 50  NONAME ; class Usif::CComponentInfo::CNode * Usif::CComponentInfo::CNode::NewLC(class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, enum Usif::TScomoState, enum Usif::TInstallStatus, int, class TDesC16 const &, enum Usif::TAuthenticity, class TCapabilitySet const &, int, int, int, class RPointerArray<class Usif::CComponentInfo::CApplicationInfo> *, class RPointerArray<class Usif::CComponentInfo::CNode> *)
-	??0TSecurityContext@Usif@@AAE@ABVRMessage2@@@Z @ 51  NONAME ; Usif::TSecurityContext::TSecurityContext(class RMessage2 const &)
-	?GlobalComponentId@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 52  NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::GlobalComponentId(void) const
-	?PrepareArgumentsForIpcL@COpaqueNamedParams@Usif@@QBEXAAVTIpcArgs@@H@Z @ 53  NONAME ; void Usif::COpaqueNamedParams::PrepareArgumentsForIpcL(class TIpcArgs &, int) const
-	?InternalizeL@COpaqueNamedParams@Usif@@QAEXAAVRReadStream@@@Z @ 54  NONAME ; void Usif::COpaqueNamedParams::InternalizeL(class RReadStream &)
-	??1COpaqueNamedParams@Usif@@UAE@XZ @ 55  NONAME ; Usif::COpaqueNamedParams::~COpaqueNamedParams(void)
-	?Install@RSoftwareInstall@Usif@@QAEXAAVRFile@@AAVTRequestStatus@@H@Z @ 56  NONAME ; void Usif::RSoftwareInstall::Install(class RFile &, class TRequestStatus &, int)
-	?HasExecutable@CNode@CComponentInfo@Usif@@QBEHXZ @ 57  NONAME ; int Usif::CComponentInfo::CNode::HasExecutable(void) const
-	?GroupName@CApplicationInfo@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 58  NONAME ; class TDesC16 const & Usif::CComponentInfo::CApplicationInfo::GroupName(void) const
-	?DriveSeletionRequired@CNode@CComponentInfo@Usif@@QBEHXZ @ 59  NONAME ; int Usif::CComponentInfo::CNode::DriveSeletionRequired(void) const
-	?IconFileName@CApplicationInfo@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 60  NONAME ; class TDesC16 const & Usif::CComponentInfo::CApplicationInfo::IconFileName(void) const
-	?AppUid@CApplicationInfo@CComponentInfo@Usif@@QBEABVTUid@@XZ @ 61  NONAME ; class TUid const & Usif::CComponentInfo::CApplicationInfo::AppUid(void) const
-	?NewLC@CApplicationInfo@CComponentInfo@Usif@@SAPAV123@ABVTUid@@ABVTDesC16@@11@Z @ 62  NONAME ; class Usif::CComponentInfo::CApplicationInfo * Usif::CComponentInfo::CApplicationInfo::NewLC(class TUid const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &)
-	?Applications@CNode@CComponentInfo@Usif@@QBEABV?$RPointerArray@VCApplicationInfo@CComponentInfo@Usif@@@@XZ @ 63  NONAME ; class RPointerArray<class Usif::CComponentInfo::CApplicationInfo> const & Usif::CComponentInfo::CNode::Applications(void) const
-	??1CApplicationInfo@CComponentInfo@Usif@@UAE@XZ @ 64  NONAME ; Usif::CComponentInfo::CApplicationInfo::~CApplicationInfo(void)
-	?Name@CApplicationInfo@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 65  NONAME ; class TDesC16 const & Usif::CComponentInfo::CApplicationInfo::Name(void) const
-	
+	?PrepareResultsForIpcL@COpaqueNamedParams@Usif@@QAEXAAVTIpcArgs@@H@Z @ 1 NONAME ; void Usif::COpaqueNamedParams::PrepareResultsForIpcL(class TIpcArgs &, int)
+	?HasCapability@TSecurityContext@Usif@@QBEHW4TCapability@@@Z @ 2 NONAME ; int Usif::TSecurityContext::HasCapability(enum TCapability) const
+	?SoftwareTypeName@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 3 NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::SoftwareTypeName(void) const
+	?NewL@CComponentInfo@Usif@@SAPAV12@XZ @ 4 NONAME ; class Usif::CComponentInfo * Usif::CComponentInfo::NewL(void)
+	?UserGrantableCaps@CNode@CComponentInfo@Usif@@QBEABVTCapabilitySet@@XZ @ 5 NONAME ; class TCapabilitySet const & Usif::CComponentInfo::CNode::UserGrantableCaps(void) const
+	?IntByNameL@COpaqueNamedParams@Usif@@QBEHABVTDesC16@@@Z @ 6 NONAME ; int Usif::COpaqueNamedParams::IntByNameL(class TDesC16 const &) const
+	?HasCapabilityL@TSecurityContext@Usif@@QBEXW4TCapability@@@Z @ 7 NONAME ; void Usif::TSecurityContext::HasCapabilityL(enum TCapability) const
+	?Close@RSoftwareInstall@Usif@@QAEXXZ @ 8 NONAME ; void Usif::RSoftwareInstall::Close(void)
+	?Authenticity@CNode@CComponentInfo@Usif@@QBE?AW4TAuthenticity@3@XZ @ 9 NONAME ; enum Usif::TAuthenticity Usif::CComponentInfo::CNode::Authenticity(void) const
+	?SetRootNodeAsChildL@CComponentInfo@Usif@@QAEXAAVCNode@12@@Z @ 10 NONAME ; void Usif::CComponentInfo::SetRootNodeAsChildL(class Usif::CComponentInfo::CNode &)
+	?Uninstall@RSoftwareInstall@Usif@@QAEXHAAVTRequestStatus@@H@Z @ 11 NONAME ; void Usif::RSoftwareInstall::Uninstall(int, class TRequestStatus &, int)
+	?StringByNameL@COpaqueNamedParams@Usif@@QBEABVTDesC16@@ABV3@@Z @ 12 NONAME ; class TDesC16 const & Usif::COpaqueNamedParams::StringByNameL(class TDesC16 const &) const
+	?ScomoState@CNode@CComponentInfo@Usif@@QBE?AW4TScomoState@3@XZ @ 13 NONAME ; enum Usif::TScomoState Usif::CComponentInfo::CNode::ScomoState(void) const
+	?Install@RSoftwareInstall@Usif@@QAEXABVTDesC16@@ABVCOpaqueNamedParams@2@AAV42@AAVTRequestStatus@@H@Z @ 14 NONAME ; void Usif::RSoftwareInstall::Install(class TDesC16 const &, class Usif::COpaqueNamedParams const &, class Usif::COpaqueNamedParams &, class TRequestStatus &, int)
+	?AddIntL@COpaqueNamedParams@Usif@@QAEXABVTDesC16@@H@Z @ 15 NONAME ; void Usif::COpaqueNamedParams::AddIntL(class TDesC16 const &, int)
+	?NewLC@COpaqueNamedParams@Usif@@SAPAV12@XZ @ 16 NONAME ; class Usif::COpaqueNamedParams * Usif::COpaqueNamedParams::NewLC(void)
+	?InstallStatus@CNode@CComponentInfo@Usif@@QBE?AW4TInstallStatus@3@XZ @ 17 NONAME ; enum Usif::TInstallStatus Usif::CComponentInfo::CNode::InstallStatus(void) const
+	?Children@CNode@CComponentInfo@Usif@@QBEABV?$RPointerArray@VCNode@CComponentInfo@Usif@@@@XZ @ 18 NONAME ; class RPointerArray<class Usif::CComponentInfo::CNode> const & Usif::CComponentInfo::CNode::Children(void) const
+	?Cleanup@COpaqueNamedParams@Usif@@QAEXXZ @ 19 NONAME ; void Usif::COpaqueNamedParams::Cleanup(void)
+	?CancelOperation@RSoftwareInstall@Usif@@QAEXXZ @ 20 NONAME ; void Usif::RSoftwareInstall::CancelOperation(void)
+	?PrepareForIpcL@CComponentInfo@Usif@@QAEXAAVTIpcArgs@@H@Z @ 21 NONAME ; void Usif::CComponentInfo::PrepareForIpcL(class TIpcArgs &, int)
+	?NewLC@CComponentInfo@Usif@@SAPAV12@XZ @ 22 NONAME ; class Usif::CComponentInfo * Usif::CComponentInfo::NewLC(void)
+	?CountL@COpaqueNamedParams@Usif@@QBEHXZ @ 23 NONAME ; int Usif::COpaqueNamedParams::CountL(void) const
+	?SetRootNodeL@CComponentInfo@Usif@@QAEXPAVCNode@12@@Z @ 24 NONAME ; void Usif::CComponentInfo::SetRootNodeL(class Usif::CComponentInfo::CNode *)
+	?GetIntByNameL@COpaqueNamedParams@Usif@@QBEHABVTDesC16@@AAH@Z @ 25 NONAME ; int Usif::COpaqueNamedParams::GetIntByNameL(class TDesC16 const &, int &) const
+	?MaxInstalledSize@CNode@CComponentInfo@Usif@@QBEHXZ @ 26 NONAME ; int Usif::CComponentInfo::CNode::MaxInstalledSize(void) const
+	?GetNamesL@COpaqueNamedParams@Usif@@QBEXAAV?$RPointerArray@VHBufC16@@@@@Z @ 27 NONAME ; void Usif::COpaqueNamedParams::GetNamesL(class RPointerArray<class HBufC16> &) const
+	?Version@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 28 NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::Version(void) const
+	?RootNodeL@CComponentInfo@Usif@@QBEABVCNode@12@XZ @ 29 NONAME ; class Usif::CComponentInfo::CNode const & Usif::CComponentInfo::RootNodeL(void) const
+	??1CNode@CComponentInfo@Usif@@UAE@XZ @ 30 NONAME ; Usif::CComponentInfo::CNode::~CNode(void)
+	?GetComponentInfo@RSoftwareInstall@Usif@@QAEXABVTDesC16@@AAVCComponentInfo@2@AAVTRequestStatus@@@Z @ 31 NONAME ; void Usif::RSoftwareInstall::GetComponentInfo(class TDesC16 const &, class Usif::CComponentInfo &, class TRequestStatus &)
+	?Uninstall@RSoftwareInstall@Usif@@QAEXHABVCOpaqueNamedParams@2@AAV32@AAVTRequestStatus@@H@Z @ 32 NONAME ; void Usif::RSoftwareInstall::Uninstall(int, class Usif::COpaqueNamedParams const &, class Usif::COpaqueNamedParams &, class TRequestStatus &, int)
+	?Deactivate@RSoftwareInstall@Usif@@QAEXHAAVTRequestStatus@@@Z @ 33 NONAME ; void Usif::RSoftwareInstall::Deactivate(int, class TRequestStatus &)
+	?AddStringL@COpaqueNamedParams@Usif@@QAEXABVTDesC16@@0@Z @ 34 NONAME ; void Usif::COpaqueNamedParams::AddStringL(class TDesC16 const &, class TDesC16 const &)
+	?AddChildL@CNode@CComponentInfo@Usif@@QAEXPAV123@@Z @ 35 NONAME ; void Usif::CComponentInfo::CNode::AddChildL(class Usif::CComponentInfo::CNode *)
+	?ComponentId@CNode@CComponentInfo@Usif@@QBEHXZ @ 36 NONAME ; int Usif::CComponentInfo::CNode::ComponentId(void) const
+	?ExternalizeL@CComponentInfo@Usif@@QBEXAAVRWriteStream@@@Z @ 37 NONAME ; void Usif::CComponentInfo::ExternalizeL(class RWriteStream &) const
+	??0RSoftwareInstall@Usif@@QAE@XZ @ 38 NONAME ; Usif::RSoftwareInstall::RSoftwareInstall(void)
+	?SecureId@TSecurityContext@Usif@@QBE?AVTSecureId@@XZ @ 39 NONAME ; class TSecureId Usif::TSecurityContext::SecureId(void) const
+	?Activate@RSoftwareInstall@Usif@@QAEXHAAVTRequestStatus@@@Z @ 40 NONAME ; void Usif::RSoftwareInstall::Activate(int, class TRequestStatus &)
+	?ExternalizeL@COpaqueNamedParams@Usif@@QBEXAAVRWriteStream@@@Z @ 41 NONAME ; void Usif::COpaqueNamedParams::ExternalizeL(class RWriteStream &) const
+	?Install@RSoftwareInstall@Usif@@QAEXABVTDesC16@@AAVTRequestStatus@@H@Z @ 42 NONAME ; void Usif::RSoftwareInstall::Install(class TDesC16 const &, class TRequestStatus &, int)
+	?Vendor@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 43 NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::Vendor(void) const
+	?NewL@COpaqueNamedParams@Usif@@SAPAV12@XZ @ 44 NONAME ; class Usif::COpaqueNamedParams * Usif::COpaqueNamedParams::NewL(void)
+	?GetComponentInfo@RSoftwareInstall@Usif@@QAEXAAVRFile@@AAVCComponentInfo@2@AAVTRequestStatus@@@Z @ 45 NONAME ; void Usif::RSoftwareInstall::GetComponentInfo(class RFile &, class Usif::CComponentInfo &, class TRequestStatus &)
+	?ComponentName@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 46 NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::ComponentName(void) const
+	?Connect@RSoftwareInstall@Usif@@QAEHXZ @ 47 NONAME ; int Usif::RSoftwareInstall::Connect(void)
+	?Install@RSoftwareInstall@Usif@@QAEXAAVRFile@@ABVCOpaqueNamedParams@2@AAV42@AAVTRequestStatus@@H@Z @ 48 NONAME ; void Usif::RSoftwareInstall::Install(class RFile &, class Usif::COpaqueNamedParams const &, class Usif::COpaqueNamedParams &, class TRequestStatus &, int)
+	??1CComponentInfo@Usif@@UAE@XZ @ 49 NONAME ; Usif::CComponentInfo::~CComponentInfo(void)
+	?NewLC@CNode@CComponentInfo@Usif@@SAPAV123@ABVTDesC16@@000W4TScomoState@3@W4TInstallStatus@3@H0W4TAuthenticity@3@ABVTCapabilitySet@@HHHPAV?$RPointerArray@VCApplicationInfo@CComponentInfo@Usif@@@@PAV?$RPointerArray@VCNode@CComponentInfo@Usif@@@@@Z @ 50 NONAME ; class Usif::CComponentInfo::CNode * Usif::CComponentInfo::CNode::NewLC(class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &, enum Usif::TScomoState, enum Usif::TInstallStatus, int, class TDesC16 const &, enum Usif::TAuthenticity, class TCapabilitySet const &, int, int, int, class RPointerArray<class Usif::CComponentInfo::CApplicationInfo> *, class RPointerArray<class Usif::CComponentInfo::CNode> *)
+	??0TSecurityContext@Usif@@AAE@ABVRMessage2@@@Z @ 51 NONAME ; Usif::TSecurityContext::TSecurityContext(class RMessage2 const &)
+	?GlobalComponentId@CNode@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 52 NONAME ; class TDesC16 const & Usif::CComponentInfo::CNode::GlobalComponentId(void) const
+	?PrepareArgumentsForIpcL@COpaqueNamedParams@Usif@@QBEXAAVTIpcArgs@@H@Z @ 53 NONAME ; void Usif::COpaqueNamedParams::PrepareArgumentsForIpcL(class TIpcArgs &, int) const
+	?InternalizeL@COpaqueNamedParams@Usif@@QAEXAAVRReadStream@@@Z @ 54 NONAME ; void Usif::COpaqueNamedParams::InternalizeL(class RReadStream &)
+	??1COpaqueNamedParams@Usif@@UAE@XZ @ 55 NONAME ; Usif::COpaqueNamedParams::~COpaqueNamedParams(void)
+	?Install@RSoftwareInstall@Usif@@QAEXAAVRFile@@AAVTRequestStatus@@H@Z @ 56 NONAME ; void Usif::RSoftwareInstall::Install(class RFile &, class TRequestStatus &, int)
+	?HasExecutable@CNode@CComponentInfo@Usif@@QBEHXZ @ 57 NONAME ; int Usif::CComponentInfo::CNode::HasExecutable(void) const
+	?GroupName@CApplicationInfo@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 58 NONAME ; class TDesC16 const & Usif::CComponentInfo::CApplicationInfo::GroupName(void) const
+	?DriveSeletionRequired@CNode@CComponentInfo@Usif@@QBEHXZ @ 59 NONAME ; int Usif::CComponentInfo::CNode::DriveSeletionRequired(void) const
+	?IconFileName@CApplicationInfo@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 60 NONAME ; class TDesC16 const & Usif::CComponentInfo::CApplicationInfo::IconFileName(void) const
+	?AppUid@CApplicationInfo@CComponentInfo@Usif@@QBEABVTUid@@XZ @ 61 NONAME ; class TUid const & Usif::CComponentInfo::CApplicationInfo::AppUid(void) const
+	?NewLC@CApplicationInfo@CComponentInfo@Usif@@SAPAV123@ABVTUid@@ABVTDesC16@@11@Z @ 62 NONAME ; class Usif::CComponentInfo::CApplicationInfo * Usif::CComponentInfo::CApplicationInfo::NewLC(class TUid const &, class TDesC16 const &, class TDesC16 const &, class TDesC16 const &)
+	?Applications@CNode@CComponentInfo@Usif@@QBEABV?$RPointerArray@VCApplicationInfo@CComponentInfo@Usif@@@@XZ @ 63 NONAME ; class RPointerArray<class Usif::CComponentInfo::CApplicationInfo> const & Usif::CComponentInfo::CNode::Applications(void) const
+	??1CApplicationInfo@CComponentInfo@Usif@@UAE@XZ @ 64 NONAME ; Usif::CComponentInfo::CApplicationInfo::~CApplicationInfo(void)
+	?Name@CApplicationInfo@CComponentInfo@Usif@@QBEABVTDesC16@@XZ @ 65 NONAME ; class TDesC16 const & Usif::CComponentInfo::CApplicationInfo::Name(void) const
+	?AddIntArrayL@COpaqueNamedParams@Usif@@QAEXABVTDesC16@@ABV?$RArray@H@@@Z @ 66 NONAME ; void Usif::COpaqueNamedParams::AddIntArrayL(class TDesC16 const &, class RArray<int> const &)
+	?AddStringArrayL@COpaqueNamedParams@Usif@@QAEXABVTDesC16@@ABV?$RPointerArray@VHBufC16@@@@@Z @ 67 NONAME ; void Usif::COpaqueNamedParams::AddStringArrayL(class TDesC16 const &, class RPointerArray<class HBufC16> const &)
+	?StringArrayByNameL@COpaqueNamedParams@Usif@@QBEABV?$RPointerArray@VHBufC16@@@@ABVTDesC16@@@Z @ 68 NONAME ; class RPointerArray<class HBufC16> const & Usif::COpaqueNamedParams::StringArrayByNameL(class TDesC16 const &) const
+	?IntArrayByNameL@COpaqueNamedParams@Usif@@QBEABV?$RArray@H@@ABVTDesC16@@@Z @ 69 NONAME ; class RArray<int> const & Usif::COpaqueNamedParams::IntArrayByNameL(class TDesC16 const &) const
+
--- a/installationservices/swinstallationfw/eabi/siftransportu.def	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swinstallationfw/eabi/siftransportu.def	Thu Jul 22 16:35:01 2010 +0100
@@ -1,110 +1,122 @@
 EXPORTS
 	_ZN4Usif14CComponentInfo12SetRootNodeLEPNS0_5CNodeE @ 1 NONAME
 	_ZN4Usif14CComponentInfo14PrepareForIpcLER8TIpcArgsi @ 2 NONAME
-	_ZN4Usif14CComponentInfo19SetRootNodeAsChildLERNS0_5CNodeE @ 3 NONAME
-	_ZN4Usif14CComponentInfo4NewLEv @ 4 NONAME
-	_ZN4Usif14CComponentInfo5CNode5NewLCERK7TDesC16S4_S4_S4_NS_11TScomoStateENS_14TInstallStatusEiS4_NS_13TAuthenticityERK14TCapabilitySetiiiP13RPointerArrayINS0_16CApplicationInfoEEPSB_IS1_E @ 5 NONAME
-	_ZN4Usif14CComponentInfo5CNode9AddChildLEPS1_ @ 6 NONAME
-	_ZN4Usif14CComponentInfo5CNodeD0Ev @ 7 NONAME
-	_ZN4Usif14CComponentInfo5CNodeD1Ev @ 8 NONAME
-	_ZN4Usif14CComponentInfo5CNodeD2Ev @ 9 NONAME
-	_ZN4Usif14CComponentInfo5NewLCEv @ 10 NONAME
-	_ZN4Usif14CComponentInfoD0Ev @ 11 NONAME
-	_ZN4Usif14CComponentInfoD1Ev @ 12 NONAME
-	_ZN4Usif14CComponentInfoD2Ev @ 13 NONAME
-	_ZN4Usif16TSecurityContextC1ERK9RMessage2 @ 14 NONAME
-	_ZN4Usif16TSecurityContextC2ERK9RMessage2 @ 15 NONAME
-	_ZN4Usif17CSifTransportTask10CancelImplEv @ 16 NONAME
-	_ZN4Usif17CSifTransportTask10FileHandleEv @ 17 NONAME
-	_ZN4Usif17CSifTransportTask13ComponentInfoEv @ 18 NONAME
-	_ZN4Usif17CSifTransportTask13CustomResultsEv @ 19 NONAME
-	_ZN4Usif17CSifTransportTask13RequestStatusEv @ 20 NONAME
-	_ZN4Usif17CSifTransportTaskC2ERNS_20TTransportTaskParamsEi @ 21 NONAME
-	_ZN4Usif17CSifTransportTaskD0Ev @ 22 NONAME
-	_ZN4Usif17CSifTransportTaskD1Ev @ 23 NONAME
-	_ZN4Usif17CSifTransportTaskD2Ev @ 24 NONAME
-	_ZN4Usif18COpaqueNamedParams10AddStringLERK7TDesC16S3_ @ 25 NONAME
-	_ZN4Usif18COpaqueNamedParams12InternalizeLER11RReadStream @ 26 NONAME
-	_ZN4Usif18COpaqueNamedParams21PrepareResultsForIpcLER8TIpcArgsi @ 27 NONAME
-	_ZN4Usif18COpaqueNamedParams4NewLEv @ 28 NONAME
-	_ZN4Usif18COpaqueNamedParams5NewLCEv @ 29 NONAME
-	_ZN4Usif18COpaqueNamedParams7AddIntLERK7TDesC16i @ 30 NONAME
-	_ZN4Usif18COpaqueNamedParams7CleanupEv @ 31 NONAME
-	_ZN4Usif18COpaqueNamedParamsD0Ev @ 32 NONAME
-	_ZN4Usif18COpaqueNamedParamsD1Ev @ 33 NONAME
-	_ZN4Usif18COpaqueNamedParamsD2Ev @ 34 NONAME
-	_ZN4Usif19CSifTransportServer23NewSifTransportServerLCEv @ 35 NONAME
-	_ZN4Usif19RSifTransportClient10DeactivateEiR14TRequestStatus @ 36 NONAME
-	_ZN4Usif19RSifTransportClient15CancelOperationEv @ 37 NONAME
-	_ZN4Usif19RSifTransportClient16GetComponentInfoER5RFileRNS_14CComponentInfoER14TRequestStatus @ 38 NONAME
-	_ZN4Usif19RSifTransportClient16GetComponentInfoERK7TDesC16RNS_14CComponentInfoER14TRequestStatus @ 39 NONAME
-	_ZN4Usif19RSifTransportClient5CloseEv @ 40 NONAME
-	_ZN4Usif19RSifTransportClient7ConnectERK7TDesC16RK8TVersionS3_4TUid @ 41 NONAME
-	_ZN4Usif19RSifTransportClient7InstallER5RFileR14TRequestStatusi @ 42 NONAME
-	_ZN4Usif19RSifTransportClient7InstallER5RFileRKNS_18COpaqueNamedParamsERS3_R14TRequestStatusi @ 43 NONAME
-	_ZN4Usif19RSifTransportClient7InstallERK7TDesC16R14TRequestStatusi @ 44 NONAME
-	_ZN4Usif19RSifTransportClient7InstallERK7TDesC16RKNS_18COpaqueNamedParamsERS4_R14TRequestStatusi @ 45 NONAME
-	_ZN4Usif19RSifTransportClient8ActivateEiR14TRequestStatus @ 46 NONAME
-	_ZN4Usif19RSifTransportClient9UninstallEiR14TRequestStatusi @ 47 NONAME
-	_ZN4Usif19RSifTransportClient9UninstallEiRKNS_18COpaqueNamedParamsERS1_R14TRequestStatusi @ 48 NONAME
-	_ZN4Usif19RSifTransportClientC1Ev @ 49 NONAME
-	_ZN4Usif19RSifTransportClientC2Ev @ 50 NONAME
-	_ZN4Usif20StartTransportServerERK7TDesC16RK8TVersionPFPNS_17CSifTransportTaskENS_20TransportTaskFactory9TTaskTypeERNS_20TTransportTaskParamsEEi @ 51 NONAME
-	_ZN4Usif20TTransportTaskParamsC1Ev @ 52 NONAME
-	_ZN4Usif20TTransportTaskParamsC2Ev @ 53 NONAME
-	_ZNK4Usif14CComponentInfo12ExternalizeLER12RWriteStream @ 54 NONAME
-	_ZNK4Usif14CComponentInfo5CNode10ScomoStateEv @ 55 NONAME
-	_ZNK4Usif14CComponentInfo5CNode11ComponentIdEv @ 56 NONAME
-	_ZNK4Usif14CComponentInfo5CNode12AuthenticityEv @ 57 NONAME
-	_ZNK4Usif14CComponentInfo5CNode13ComponentNameEv @ 58 NONAME
-	_ZNK4Usif14CComponentInfo5CNode13InstallStatusEv @ 59 NONAME
-	_ZNK4Usif14CComponentInfo5CNode16MaxInstalledSizeEv @ 60 NONAME
-	_ZNK4Usif14CComponentInfo5CNode16SoftwareTypeNameEv @ 61 NONAME
-	_ZNK4Usif14CComponentInfo5CNode17GlobalComponentIdEv @ 62 NONAME
-	_ZNK4Usif14CComponentInfo5CNode17UserGrantableCapsEv @ 63 NONAME
-	_ZNK4Usif14CComponentInfo5CNode6VendorEv @ 64 NONAME
-	_ZNK4Usif14CComponentInfo5CNode7VersionEv @ 65 NONAME
-	_ZNK4Usif14CComponentInfo5CNode8ChildrenEv @ 66 NONAME
-	_ZNK4Usif14CComponentInfo9RootNodeLEv @ 67 NONAME
-	_ZNK4Usif16TSecurityContext13HasCapabilityE11TCapability @ 68 NONAME
-	_ZNK4Usif16TSecurityContext14HasCapabilityLE11TCapability @ 69 NONAME
-	_ZNK4Usif16TSecurityContext8SecureIdEv @ 70 NONAME
-	_ZNK4Usif17CSifTransportTask11ComponentIdEv @ 71 NONAME
-	_ZNK4Usif17CSifTransportTask15CustomArgumentsEv @ 72 NONAME
-	_ZNK4Usif17CSifTransportTask15SecurityContextEv @ 73 NONAME
-	_ZNK4Usif17CSifTransportTask8FileNameEv @ 74 NONAME
-	_ZNK4Usif18COpaqueNamedParams10IntByNameLERK7TDesC16 @ 75 NONAME
-	_ZNK4Usif18COpaqueNamedParams12ExternalizeLER12RWriteStream @ 76 NONAME
-	_ZNK4Usif18COpaqueNamedParams13GetIntByNameLERK7TDesC16Ri @ 77 NONAME
-	_ZNK4Usif18COpaqueNamedParams13StringByNameLERK7TDesC16 @ 78 NONAME
-	_ZNK4Usif18COpaqueNamedParams23PrepareArgumentsForIpcLER8TIpcArgsi @ 79 NONAME
-	_ZNK4Usif18COpaqueNamedParams6CountLEv @ 80 NONAME
-	_ZNK4Usif18COpaqueNamedParams9GetNamesLER13RPointerArrayI7HBufC16E @ 81 NONAME
-	_ZTIN4Usif14CComponentInfo5CNodeE @ 82 NONAME
-	_ZTIN4Usif14CComponentInfoE @ 83 NONAME
-	_ZTIN4Usif17CSifTransportTaskE @ 84 NONAME
-	_ZTIN4Usif18COpaqueNamedParamsE @ 85 NONAME
-	_ZTIN4Usif19CSifTransportServerE @ 86 NONAME
-	_ZTIN4Usif20CSifTransportRequestE @ 87 NONAME
-	_ZTIN4Usif20CSifTransportSessionE @ 88 NONAME
-	_ZTVN4Usif14CComponentInfo5CNodeE @ 89 NONAME
-	_ZTVN4Usif14CComponentInfoE @ 90 NONAME
-	_ZTVN4Usif17CSifTransportTaskE @ 91 NONAME
-	_ZTVN4Usif18COpaqueNamedParamsE @ 92 NONAME
-	_ZTVN4Usif19CSifTransportServerE @ 93 NONAME
-	_ZTVN4Usif20CSifTransportRequestE @ 94 NONAME
-	_ZTVN4Usif20CSifTransportSessionE @ 95 NONAME
-	_ZNK4Usif14CComponentInfo5CNode13HasExecutableEv @ 96 NONAME
-	_ZN4Usif14CComponentInfo16CApplicationInfo5NewLCERK4TUidRK7TDesC16S7_S7_ @ 97 NONAME
-	_ZN4Usif14CComponentInfo16CApplicationInfoD0Ev @ 98 NONAME
-	_ZN4Usif14CComponentInfo16CApplicationInfoD1Ev @ 99 NONAME
-	_ZN4Usif14CComponentInfo16CApplicationInfoD2Ev @ 100 NONAME
-	_ZNK4Usif14CComponentInfo16CApplicationInfo12IconFileNameEv @ 101 NONAME
-	_ZNK4Usif14CComponentInfo16CApplicationInfo4NameEv @ 102 NONAME
-	_ZNK4Usif14CComponentInfo16CApplicationInfo6AppUidEv @ 103 NONAME
-	_ZNK4Usif14CComponentInfo16CApplicationInfo9GroupNameEv @ 104 NONAME
-	_ZNK4Usif14CComponentInfo5CNode12ApplicationsEv @ 105 NONAME
-	_ZNK4Usif14CComponentInfo5CNode21DriveSeletionRequiredEv @ 106 NONAME
-	_ZTIN4Usif14CComponentInfo16CApplicationInfoE @ 107 NONAME
-	_ZTVN4Usif14CComponentInfo16CApplicationInfoE @ 108 NONAME
+	_ZN4Usif14CComponentInfo16CApplicationInfo5NewLCERK4TUidRK7TDesC16S7_S7_ @ 3 NONAME
+	_ZN4Usif14CComponentInfo16CApplicationInfoD0Ev @ 4 NONAME
+	_ZN4Usif14CComponentInfo16CApplicationInfoD1Ev @ 5 NONAME
+	_ZN4Usif14CComponentInfo16CApplicationInfoD2Ev @ 6 NONAME
+	_ZN4Usif14CComponentInfo19SetRootNodeAsChildLERNS0_5CNodeE @ 7 NONAME
+	_ZN4Usif14CComponentInfo4NewLEv @ 8 NONAME
+	_ZN4Usif14CComponentInfo5CNode5NewLCERK7TDesC16S4_S4_S4_NS_11TScomoStateENS_14TInstallStatusEiS4_NS_13TAuthenticityERK14TCapabilitySetiiiP13RPointerArrayINS0_16CApplicationInfoEEPSB_IS1_E @ 9 NONAME
+	_ZN4Usif14CComponentInfo5CNode9AddChildLEPS1_ @ 10 NONAME
+	_ZN4Usif14CComponentInfo5CNodeD0Ev @ 11 NONAME
+	_ZN4Usif14CComponentInfo5CNodeD1Ev @ 12 NONAME
+	_ZN4Usif14CComponentInfo5CNodeD2Ev @ 13 NONAME
+	_ZN4Usif14CComponentInfo5NewLCEv @ 14 NONAME
+	_ZN4Usif14CComponentInfoD0Ev @ 15 NONAME
+	_ZN4Usif14CComponentInfoD1Ev @ 16 NONAME
+	_ZN4Usif14CComponentInfoD2Ev @ 17 NONAME
+	_ZN4Usif16TSecurityContextC1ERK9RMessage2 @ 18 NONAME
+	_ZN4Usif16TSecurityContextC2ERK9RMessage2 @ 19 NONAME
+	_ZN4Usif17CSifTransportTask10CancelImplEv @ 20 NONAME
+	_ZN4Usif17CSifTransportTask10FileHandleEv @ 21 NONAME
+	_ZN4Usif17CSifTransportTask13ComponentInfoEv @ 22 NONAME
+	_ZN4Usif17CSifTransportTask13CustomResultsEv @ 23 NONAME
+	_ZN4Usif17CSifTransportTask13RequestStatusEv @ 24 NONAME
+	_ZN4Usif17CSifTransportTaskC2ERNS_20TTransportTaskParamsEi @ 25 NONAME
+	_ZN4Usif17CSifTransportTaskD0Ev @ 26 NONAME
+	_ZN4Usif17CSifTransportTaskD1Ev @ 27 NONAME
+	_ZN4Usif17CSifTransportTaskD2Ev @ 28 NONAME
+	_ZN4Usif18COpaqueNamedParams10AddStringLERK7TDesC16S3_ @ 29 NONAME
+	_ZN4Usif18COpaqueNamedParams12AddIntArrayLERK7TDesC16RK6RArrayIiE @ 30 NONAME
+	_ZN4Usif18COpaqueNamedParams12InternalizeLER11RReadStream @ 31 NONAME
+	_ZN4Usif18COpaqueNamedParams15AddStringArrayLERK7TDesC16RK13RPointerArrayI7HBufC16E @ 32 NONAME
+	_ZN4Usif18COpaqueNamedParams21PrepareResultsForIpcLER8TIpcArgsi @ 33 NONAME
+	_ZN4Usif18COpaqueNamedParams4NewLEv @ 34 NONAME
+	_ZN4Usif18COpaqueNamedParams5NewLCEv @ 35 NONAME
+	_ZN4Usif18COpaqueNamedParams7AddIntLERK7TDesC16i @ 36 NONAME
+	_ZN4Usif18COpaqueNamedParams7CleanupEv @ 37 NONAME
+	_ZN4Usif18COpaqueNamedParamsD0Ev @ 38 NONAME
+	_ZN4Usif18COpaqueNamedParamsD1Ev @ 39 NONAME
+	_ZN4Usif18COpaqueNamedParamsD2Ev @ 40 NONAME
+	_ZN4Usif19CSifTransportServer23NewSifTransportServerLCEv @ 41 NONAME
+	_ZN4Usif19RSifTransportClient10DeactivateEiR14TRequestStatus @ 42 NONAME
+	_ZN4Usif19RSifTransportClient15CancelOperationEv @ 43 NONAME
+	_ZN4Usif19RSifTransportClient16GetComponentInfoER5RFileRNS_14CComponentInfoER14TRequestStatus @ 44 NONAME
+	_ZN4Usif19RSifTransportClient16GetComponentInfoERK7TDesC16RNS_14CComponentInfoER14TRequestStatus @ 45 NONAME
+	_ZN4Usif19RSifTransportClient5CloseEv @ 46 NONAME
+	_ZN4Usif19RSifTransportClient7ConnectERK7TDesC16RK8TVersionS3_4TUid @ 47 NONAME
+	_ZN4Usif19RSifTransportClient7InstallER5RFileR14TRequestStatusi @ 48 NONAME
+	_ZN4Usif19RSifTransportClient7InstallER5RFileRKNS_18COpaqueNamedParamsERS3_R14TRequestStatusi @ 49 NONAME
+	_ZN4Usif19RSifTransportClient7InstallERK7TDesC16R14TRequestStatusi @ 50 NONAME
+	_ZN4Usif19RSifTransportClient7InstallERK7TDesC16RKNS_18COpaqueNamedParamsERS4_R14TRequestStatusi @ 51 NONAME
+	_ZN4Usif19RSifTransportClient8ActivateEiR14TRequestStatus @ 52 NONAME
+	_ZN4Usif19RSifTransportClient9UninstallEiR14TRequestStatusi @ 53 NONAME
+	_ZN4Usif19RSifTransportClient9UninstallEiRKNS_18COpaqueNamedParamsERS1_R14TRequestStatusi @ 54 NONAME
+	_ZN4Usif19RSifTransportClientC1Ev @ 55 NONAME
+	_ZN4Usif19RSifTransportClientC2Ev @ 56 NONAME
+	_ZN4Usif20StartTransportServerERK7TDesC16RK8TVersionPFPNS_17CSifTransportTaskENS_20TransportTaskFactory9TTaskTypeERNS_20TTransportTaskParamsEEi @ 57 NONAME
+	_ZN4Usif20TTransportTaskParamsC1Ev @ 58 NONAME
+	_ZN4Usif20TTransportTaskParamsC2Ev @ 59 NONAME
+	_ZNK4Usif14CComponentInfo12ExternalizeLER12RWriteStream @ 60 NONAME
+	_ZNK4Usif14CComponentInfo16CApplicationInfo12IconFileNameEv @ 61 NONAME
+	_ZNK4Usif14CComponentInfo16CApplicationInfo4NameEv @ 62 NONAME
+	_ZNK4Usif14CComponentInfo16CApplicationInfo6AppUidEv @ 63 NONAME
+	_ZNK4Usif14CComponentInfo16CApplicationInfo9GroupNameEv @ 64 NONAME
+	_ZNK4Usif14CComponentInfo5CNode10ScomoStateEv @ 65 NONAME
+	_ZNK4Usif14CComponentInfo5CNode11ComponentIdEv @ 66 NONAME
+	_ZNK4Usif14CComponentInfo5CNode12ApplicationsEv @ 67 NONAME
+	_ZNK4Usif14CComponentInfo5CNode12AuthenticityEv @ 68 NONAME
+	_ZNK4Usif14CComponentInfo5CNode13ComponentNameEv @ 69 NONAME
+	_ZNK4Usif14CComponentInfo5CNode13HasExecutableEv @ 70 NONAME
+	_ZNK4Usif14CComponentInfo5CNode13InstallStatusEv @ 71 NONAME
+	_ZNK4Usif14CComponentInfo5CNode16MaxInstalledSizeEv @ 72 NONAME
+	_ZNK4Usif14CComponentInfo5CNode16SoftwareTypeNameEv @ 73 NONAME
+	_ZNK4Usif14CComponentInfo5CNode17GlobalComponentIdEv @ 74 NONAME
+	_ZNK4Usif14CComponentInfo5CNode17UserGrantableCapsEv @ 75 NONAME
+	_ZNK4Usif14CComponentInfo5CNode21DriveSeletionRequiredEv @ 76 NONAME
+	_ZNK4Usif14CComponentInfo5CNode6VendorEv @ 77 NONAME
+	_ZNK4Usif14CComponentInfo5CNode7VersionEv @ 78 NONAME
+	_ZNK4Usif14CComponentInfo5CNode8ChildrenEv @ 79 NONAME
+	_ZNK4Usif14CComponentInfo9RootNodeLEv @ 80 NONAME
+	_ZNK4Usif16TSecurityContext13HasCapabilityE11TCapability @ 81 NONAME
+	_ZNK4Usif16TSecurityContext14HasCapabilityLE11TCapability @ 82 NONAME
+	_ZNK4Usif16TSecurityContext8SecureIdEv @ 83 NONAME
+	_ZNK4Usif17CSifTransportTask11ComponentIdEv @ 84 NONAME
+	_ZNK4Usif17CSifTransportTask15CustomArgumentsEv @ 85 NONAME
+	_ZNK4Usif17CSifTransportTask15SecurityContextEv @ 86 NONAME
+	_ZNK4Usif17CSifTransportTask8FileNameEv @ 87 NONAME
+	_ZNK4Usif18COpaqueNamedParams10IntByNameLERK7TDesC16 @ 88 NONAME
+	_ZNK4Usif18COpaqueNamedParams12ExternalizeLER12RWriteStream @ 89 NONAME
+	_ZNK4Usif18COpaqueNamedParams13GetIntByNameLERK7TDesC16Ri @ 90 NONAME
+	_ZNK4Usif18COpaqueNamedParams13StringByNameLERK7TDesC16 @ 91 NONAME
+	_ZNK4Usif18COpaqueNamedParams15IntArrayByNameLERK7TDesC16 @ 92 NONAME
+	_ZNK4Usif18COpaqueNamedParams18StringArrayByNameLERK7TDesC16 @ 93 NONAME
+	_ZNK4Usif18COpaqueNamedParams23PrepareArgumentsForIpcLER8TIpcArgsi @ 94 NONAME
+	_ZNK4Usif18COpaqueNamedParams6CountLEv @ 95 NONAME
+	_ZNK4Usif18COpaqueNamedParams9GetNamesLER13RPointerArrayI7HBufC16E @ 96 NONAME
+	_ZTIN4Usif11CStringItemE @ 97 NONAME
+	_ZTIN4Usif12CIntegerItemE @ 98 NONAME
+	_ZTIN4Usif14CComponentInfo16CApplicationInfoE @ 99 NONAME
+	_ZTIN4Usif14CComponentInfo5CNodeE @ 100 NONAME
+	_ZTIN4Usif14CComponentInfoE @ 101 NONAME
+	_ZTIN4Usif16CStringArrayItemE @ 102 NONAME
+	_ZTIN4Usif17CIntegerArrayItemE @ 103 NONAME
+	_ZTIN4Usif17CSifTransportTaskE @ 104 NONAME
+	_ZTIN4Usif19CSifTransportServerE @ 105 NONAME
+	_ZTIN4Usif20CSifTransportRequestE @ 106 NONAME
+	_ZTIN4Usif20CSifTransportSessionE @ 107 NONAME
+	_ZTIN4Usif9CItemBaseE @ 108 NONAME
+	_ZTVN4Usif11CStringItemE @ 109 NONAME
+	_ZTVN4Usif12CIntegerItemE @ 110 NONAME
+	_ZTVN4Usif14CComponentInfo16CApplicationInfoE @ 111 NONAME
+	_ZTVN4Usif14CComponentInfo5CNodeE @ 112 NONAME
+	_ZTVN4Usif14CComponentInfoE @ 113 NONAME
+	_ZTVN4Usif16CStringArrayItemE @ 114 NONAME
+	_ZTVN4Usif17CIntegerArrayItemE @ 115 NONAME
+	_ZTVN4Usif17CSifTransportTaskE @ 116 NONAME
+	_ZTVN4Usif19CSifTransportServerE @ 117 NONAME
+	_ZTVN4Usif20CSifTransportRequestE @ 118 NONAME
+	_ZTVN4Usif20CSifTransportSessionE @ 119 NONAME
+	_ZTVN4Usif9CItemBaseE @ 120 NONAME
 
--- a/installationservices/swinstallationfw/eabi/sifu.def	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swinstallationfw/eabi/sifu.def	Thu Jul 22 16:35:01 2010 +0100
@@ -1,85 +1,97 @@
-EXPORTS
+EXPORTS	
 	_ZN4Usif14CComponentInfo12SetRootNodeLEPNS0_5CNodeE @ 1 NONAME
 	_ZN4Usif14CComponentInfo14PrepareForIpcLER8TIpcArgsi @ 2 NONAME
-	_ZN4Usif14CComponentInfo19SetRootNodeAsChildLERNS0_5CNodeE @ 3 NONAME
-	_ZN4Usif14CComponentInfo4NewLEv @ 4 NONAME
-	_ZN4Usif14CComponentInfo5CNode5NewLCERK7TDesC16S4_S4_S4_NS_11TScomoStateENS_14TInstallStatusEiS4_NS_13TAuthenticityERK14TCapabilitySetiiiP13RPointerArrayINS0_16CApplicationInfoEEPSB_IS1_E @ 5 NONAME
-	_ZN4Usif14CComponentInfo5CNode9AddChildLEPS1_ @ 6 NONAME
-	_ZN4Usif14CComponentInfo5CNodeD0Ev @ 7 NONAME
-	_ZN4Usif14CComponentInfo5CNodeD1Ev @ 8 NONAME
-	_ZN4Usif14CComponentInfo5CNodeD2Ev @ 9 NONAME
-	_ZN4Usif14CComponentInfo5NewLCEv @ 10 NONAME
-	_ZN4Usif14CComponentInfoD0Ev @ 11 NONAME
-	_ZN4Usif14CComponentInfoD1Ev @ 12 NONAME
-	_ZN4Usif14CComponentInfoD2Ev @ 13 NONAME
-	_ZN4Usif16RSoftwareInstall10DeactivateEiR14TRequestStatus @ 14 NONAME
-	_ZN4Usif16RSoftwareInstall15CancelOperationEv @ 15 NONAME
-	_ZN4Usif16RSoftwareInstall16GetComponentInfoER5RFileRNS_14CComponentInfoER14TRequestStatus @ 16 NONAME
-	_ZN4Usif16RSoftwareInstall16GetComponentInfoERK7TDesC16RNS_14CComponentInfoER14TRequestStatus @ 17 NONAME
-	_ZN4Usif16RSoftwareInstall5CloseEv @ 18 NONAME
-	_ZN4Usif16RSoftwareInstall7ConnectEv @ 19 NONAME
-	_ZN4Usif16RSoftwareInstall7InstallER5RFileR14TRequestStatusi @ 20 NONAME
-	_ZN4Usif16RSoftwareInstall7InstallER5RFileRKNS_18COpaqueNamedParamsERS3_R14TRequestStatusi @ 21 NONAME
-	_ZN4Usif16RSoftwareInstall7InstallERK7TDesC16R14TRequestStatusi @ 22 NONAME
-	_ZN4Usif16RSoftwareInstall7InstallERK7TDesC16RKNS_18COpaqueNamedParamsERS4_R14TRequestStatusi @ 23 NONAME
-	_ZN4Usif16RSoftwareInstall8ActivateEiR14TRequestStatus @ 24 NONAME
-	_ZN4Usif16RSoftwareInstall9UninstallEiR14TRequestStatusi @ 25 NONAME
-	_ZN4Usif16RSoftwareInstall9UninstallEiRKNS_18COpaqueNamedParamsERS1_R14TRequestStatusi @ 26 NONAME
-	_ZN4Usif16RSoftwareInstallC1Ev @ 27 NONAME
-	_ZN4Usif16RSoftwareInstallC2Ev @ 28 NONAME
-	_ZN4Usif16TSecurityContextC1ERK9RMessage2 @ 29 NONAME
-	_ZN4Usif16TSecurityContextC2ERK9RMessage2 @ 30 NONAME
-	_ZN4Usif18COpaqueNamedParams10AddStringLERK7TDesC16S3_ @ 31 NONAME
-	_ZN4Usif18COpaqueNamedParams12InternalizeLER11RReadStream @ 32 NONAME
-	_ZN4Usif18COpaqueNamedParams21PrepareResultsForIpcLER8TIpcArgsi @ 33 NONAME
-	_ZN4Usif18COpaqueNamedParams4NewLEv @ 34 NONAME
-	_ZN4Usif18COpaqueNamedParams5NewLCEv @ 35 NONAME
-	_ZN4Usif18COpaqueNamedParams7AddIntLERK7TDesC16i @ 36 NONAME
-	_ZN4Usif18COpaqueNamedParams7CleanupEv @ 37 NONAME
-	_ZN4Usif18COpaqueNamedParamsD0Ev @ 38 NONAME
-	_ZN4Usif18COpaqueNamedParamsD1Ev @ 39 NONAME
-	_ZN4Usif18COpaqueNamedParamsD2Ev @ 40 NONAME
-	_ZNK4Usif14CComponentInfo12ExternalizeLER12RWriteStream @ 41 NONAME
-	_ZNK4Usif14CComponentInfo5CNode10ScomoStateEv @ 42 NONAME
-	_ZNK4Usif14CComponentInfo5CNode11ComponentIdEv @ 43 NONAME
-	_ZNK4Usif14CComponentInfo5CNode12AuthenticityEv @ 44 NONAME
-	_ZNK4Usif14CComponentInfo5CNode13ComponentNameEv @ 45 NONAME
-	_ZNK4Usif14CComponentInfo5CNode13InstallStatusEv @ 46 NONAME
-	_ZNK4Usif14CComponentInfo5CNode16MaxInstalledSizeEv @ 47 NONAME
-	_ZNK4Usif14CComponentInfo5CNode16SoftwareTypeNameEv @ 48 NONAME
-	_ZNK4Usif14CComponentInfo5CNode17GlobalComponentIdEv @ 49 NONAME
-	_ZNK4Usif14CComponentInfo5CNode17UserGrantableCapsEv @ 50 NONAME
-	_ZNK4Usif14CComponentInfo5CNode6VendorEv @ 51 NONAME
-	_ZNK4Usif14CComponentInfo5CNode7VersionEv @ 52 NONAME
-	_ZNK4Usif14CComponentInfo5CNode8ChildrenEv @ 53 NONAME
-	_ZNK4Usif14CComponentInfo9RootNodeLEv @ 54 NONAME
-	_ZNK4Usif16TSecurityContext13HasCapabilityE11TCapability @ 55 NONAME
-	_ZNK4Usif16TSecurityContext14HasCapabilityLE11TCapability @ 56 NONAME
-	_ZNK4Usif16TSecurityContext8SecureIdEv @ 57 NONAME
-	_ZNK4Usif18COpaqueNamedParams10IntByNameLERK7TDesC16 @ 58 NONAME
-	_ZNK4Usif18COpaqueNamedParams12ExternalizeLER12RWriteStream @ 59 NONAME
-	_ZNK4Usif18COpaqueNamedParams13GetIntByNameLERK7TDesC16Ri @ 60 NONAME
-	_ZNK4Usif18COpaqueNamedParams13StringByNameLERK7TDesC16 @ 61 NONAME
-	_ZNK4Usif18COpaqueNamedParams23PrepareArgumentsForIpcLER8TIpcArgsi @ 62 NONAME
-	_ZNK4Usif18COpaqueNamedParams6CountLEv @ 63 NONAME
-	_ZNK4Usif18COpaqueNamedParams9GetNamesLER13RPointerArrayI7HBufC16E @ 64 NONAME
-	_ZTIN4Usif14CComponentInfo5CNodeE @ 65 NONAME
-	_ZTIN4Usif14CComponentInfoE @ 66 NONAME
-	_ZTIN4Usif18COpaqueNamedParamsE @ 67 NONAME
-	_ZTVN4Usif14CComponentInfo5CNodeE @ 68 NONAME
-	_ZTVN4Usif14CComponentInfoE @ 69 NONAME
-	_ZTVN4Usif18COpaqueNamedParamsE @ 70 NONAME
-	_ZNK4Usif14CComponentInfo5CNode13HasExecutableEv @ 71 NONAME
-	_ZN4Usif14CComponentInfo16CApplicationInfo5NewLCERK4TUidRK7TDesC16S7_S7_ @ 72 NONAME
-	_ZN4Usif14CComponentInfo16CApplicationInfoD0Ev @ 73 NONAME
-	_ZN4Usif14CComponentInfo16CApplicationInfoD1Ev @ 74 NONAME
-	_ZN4Usif14CComponentInfo16CApplicationInfoD2Ev @ 75 NONAME
-	_ZNK4Usif14CComponentInfo16CApplicationInfo12IconFileNameEv @ 76 NONAME
-	_ZNK4Usif14CComponentInfo16CApplicationInfo4NameEv @ 77 NONAME
-	_ZNK4Usif14CComponentInfo16CApplicationInfo6AppUidEv @ 78 NONAME
-	_ZNK4Usif14CComponentInfo16CApplicationInfo9GroupNameEv @ 79 NONAME
-	_ZNK4Usif14CComponentInfo5CNode12ApplicationsEv @ 80 NONAME
-	_ZNK4Usif14CComponentInfo5CNode21DriveSeletionRequiredEv @ 81 NONAME
+	_ZN4Usif14CComponentInfo16CApplicationInfo5NewLCERK4TUidRK7TDesC16S7_S7_ @ 3 NONAME
+	_ZN4Usif14CComponentInfo16CApplicationInfoD0Ev @ 4 NONAME
+	_ZN4Usif14CComponentInfo16CApplicationInfoD1Ev @ 5 NONAME
+	_ZN4Usif14CComponentInfo16CApplicationInfoD2Ev @ 6 NONAME
+	_ZN4Usif14CComponentInfo19SetRootNodeAsChildLERNS0_5CNodeE @ 7 NONAME
+	_ZN4Usif14CComponentInfo4NewLEv @ 8 NONAME
+	_ZN4Usif14CComponentInfo5CNode5NewLCERK7TDesC16S4_S4_S4_NS_11TScomoStateENS_14TInstallStatusEiS4_NS_13TAuthenticityERK14TCapabilitySetiiiP13RPointerArrayINS0_16CApplicationInfoEEPSB_IS1_E @ 9 NONAME
+	_ZN4Usif14CComponentInfo5CNode9AddChildLEPS1_ @ 10 NONAME
+	_ZN4Usif14CComponentInfo5CNodeD0Ev @ 11 NONAME
+	_ZN4Usif14CComponentInfo5CNodeD1Ev @ 12 NONAME
+	_ZN4Usif14CComponentInfo5CNodeD2Ev @ 13 NONAME
+	_ZN4Usif14CComponentInfo5NewLCEv @ 14 NONAME
+	_ZN4Usif14CComponentInfoD0Ev @ 15 NONAME
+	_ZN4Usif14CComponentInfoD1Ev @ 16 NONAME
+	_ZN4Usif14CComponentInfoD2Ev @ 17 NONAME
+	_ZN4Usif16RSoftwareInstall10DeactivateEiR14TRequestStatus @ 18 NONAME
+	_ZN4Usif16RSoftwareInstall15CancelOperationEv @ 19 NONAME
+	_ZN4Usif16RSoftwareInstall16GetComponentInfoER5RFileRNS_14CComponentInfoER14TRequestStatus @ 20 NONAME
+	_ZN4Usif16RSoftwareInstall16GetComponentInfoERK7TDesC16RNS_14CComponentInfoER14TRequestStatus @ 21 NONAME
+	_ZN4Usif16RSoftwareInstall5CloseEv @ 22 NONAME
+	_ZN4Usif16RSoftwareInstall7ConnectEv @ 23 NONAME
+	_ZN4Usif16RSoftwareInstall7InstallER5RFileR14TRequestStatusi @ 24 NONAME
+	_ZN4Usif16RSoftwareInstall7InstallER5RFileRKNS_18COpaqueNamedParamsERS3_R14TRequestStatusi @ 25 NONAME
+	_ZN4Usif16RSoftwareInstall7InstallERK7TDesC16R14TRequestStatusi @ 26 NONAME
+	_ZN4Usif16RSoftwareInstall7InstallERK7TDesC16RKNS_18COpaqueNamedParamsERS4_R14TRequestStatusi @ 27 NONAME
+	_ZN4Usif16RSoftwareInstall8ActivateEiR14TRequestStatus @ 28 NONAME
+	_ZN4Usif16RSoftwareInstall9UninstallEiR14TRequestStatusi @ 29 NONAME
+	_ZN4Usif16RSoftwareInstall9UninstallEiRKNS_18COpaqueNamedParamsERS1_R14TRequestStatusi @ 30 NONAME
+	_ZN4Usif16RSoftwareInstallC1Ev @ 31 NONAME
+	_ZN4Usif16RSoftwareInstallC2Ev @ 32 NONAME
+	_ZN4Usif16TSecurityContextC1ERK9RMessage2 @ 33 NONAME
+	_ZN4Usif16TSecurityContextC2ERK9RMessage2 @ 34 NONAME
+	_ZN4Usif18COpaqueNamedParams10AddStringLERK7TDesC16S3_ @ 35 NONAME
+	_ZN4Usif18COpaqueNamedParams12AddIntArrayLERK7TDesC16RK6RArrayIiE @ 36 NONAME
+	_ZN4Usif18COpaqueNamedParams12InternalizeLER11RReadStream @ 37 NONAME
+	_ZN4Usif18COpaqueNamedParams15AddStringArrayLERK7TDesC16RK13RPointerArrayI7HBufC16E @ 38 NONAME
+	_ZN4Usif18COpaqueNamedParams21PrepareResultsForIpcLER8TIpcArgsi @ 39 NONAME
+	_ZN4Usif18COpaqueNamedParams4NewLEv @ 40 NONAME
+	_ZN4Usif18COpaqueNamedParams5NewLCEv @ 41 NONAME
+	_ZN4Usif18COpaqueNamedParams7AddIntLERK7TDesC16i @ 42 NONAME
+	_ZN4Usif18COpaqueNamedParams7CleanupEv @ 43 NONAME
+	_ZN4Usif18COpaqueNamedParamsD0Ev @ 44 NONAME
+	_ZN4Usif18COpaqueNamedParamsD1Ev @ 45 NONAME
+	_ZN4Usif18COpaqueNamedParamsD2Ev @ 46 NONAME
+	_ZNK4Usif14CComponentInfo12ExternalizeLER12RWriteStream @ 47 NONAME
+	_ZNK4Usif14CComponentInfo16CApplicationInfo12IconFileNameEv @ 48 NONAME
+	_ZNK4Usif14CComponentInfo16CApplicationInfo4NameEv @ 49 NONAME
+	_ZNK4Usif14CComponentInfo16CApplicationInfo6AppUidEv @ 50 NONAME
+	_ZNK4Usif14CComponentInfo16CApplicationInfo9GroupNameEv @ 51 NONAME
+	_ZNK4Usif14CComponentInfo5CNode10ScomoStateEv @ 52 NONAME
+	_ZNK4Usif14CComponentInfo5CNode11ComponentIdEv @ 53 NONAME
+	_ZNK4Usif14CComponentInfo5CNode12ApplicationsEv @ 54 NONAME
+	_ZNK4Usif14CComponentInfo5CNode12AuthenticityEv @ 55 NONAME
+	_ZNK4Usif14CComponentInfo5CNode13ComponentNameEv @ 56 NONAME
+	_ZNK4Usif14CComponentInfo5CNode13HasExecutableEv @ 57 NONAME
+	_ZNK4Usif14CComponentInfo5CNode13InstallStatusEv @ 58 NONAME
+	_ZNK4Usif14CComponentInfo5CNode16MaxInstalledSizeEv @ 59 NONAME
+	_ZNK4Usif14CComponentInfo5CNode16SoftwareTypeNameEv @ 60 NONAME
+	_ZNK4Usif14CComponentInfo5CNode17GlobalComponentIdEv @ 61 NONAME
+	_ZNK4Usif14CComponentInfo5CNode17UserGrantableCapsEv @ 62 NONAME
+	_ZNK4Usif14CComponentInfo5CNode21DriveSeletionRequiredEv @ 63 NONAME
+	_ZNK4Usif14CComponentInfo5CNode6VendorEv @ 64 NONAME
+	_ZNK4Usif14CComponentInfo5CNode7VersionEv @ 65 NONAME
+	_ZNK4Usif14CComponentInfo5CNode8ChildrenEv @ 66 NONAME
+	_ZNK4Usif14CComponentInfo9RootNodeLEv @ 67 NONAME
+	_ZNK4Usif16TSecurityContext13HasCapabilityE11TCapability @ 68 NONAME
+	_ZNK4Usif16TSecurityContext14HasCapabilityLE11TCapability @ 69 NONAME
+	_ZNK4Usif16TSecurityContext8SecureIdEv @ 70 NONAME
+	_ZNK4Usif18COpaqueNamedParams10IntByNameLERK7TDesC16 @ 71 NONAME
+	_ZNK4Usif18COpaqueNamedParams12ExternalizeLER12RWriteStream @ 72 NONAME
+	_ZNK4Usif18COpaqueNamedParams13GetIntByNameLERK7TDesC16Ri @ 73 NONAME
+	_ZNK4Usif18COpaqueNamedParams13StringByNameLERK7TDesC16 @ 74 NONAME
+	_ZNK4Usif18COpaqueNamedParams15IntArrayByNameLERK7TDesC16 @ 75 NONAME
+	_ZNK4Usif18COpaqueNamedParams18StringArrayByNameLERK7TDesC16 @ 76 NONAME
+	_ZNK4Usif18COpaqueNamedParams23PrepareArgumentsForIpcLER8TIpcArgsi @ 77 NONAME
+	_ZNK4Usif18COpaqueNamedParams6CountLEv @ 78 NONAME
+	_ZNK4Usif18COpaqueNamedParams9GetNamesLER13RPointerArrayI7HBufC16E @ 79 NONAME
+	_ZTIN4Usif11CStringItemE @ 80 NONAME
+	_ZTIN4Usif12CIntegerItemE @ 81 NONAME
 	_ZTIN4Usif14CComponentInfo16CApplicationInfoE @ 82 NONAME
-	_ZTVN4Usif14CComponentInfo16CApplicationInfoE @ 83 NONAME
+	_ZTIN4Usif14CComponentInfo5CNodeE @ 83 NONAME
+	_ZTIN4Usif14CComponentInfoE @ 84 NONAME
+	_ZTIN4Usif16CStringArrayItemE @ 85 NONAME
+	_ZTIN4Usif17CIntegerArrayItemE @ 86 NONAME
+	_ZTIN4Usif9CItemBaseE @ 87 NONAME
+	_ZTVN4Usif11CStringItemE @ 88 NONAME
+	_ZTVN4Usif12CIntegerItemE @ 89 NONAME
+	_ZTVN4Usif14CComponentInfo16CApplicationInfoE @ 90 NONAME
+	_ZTVN4Usif14CComponentInfo5CNodeE @ 91 NONAME
+	_ZTVN4Usif14CComponentInfoE @ 92 NONAME
+	_ZTVN4Usif16CStringArrayItemE @ 93 NONAME
+	_ZTVN4Usif17CIntegerArrayItemE @ 94 NONAME
+	_ZTVN4Usif9CItemBaseE @ 95 NONAME
 
--- a/installationservices/swinstallationfw/group/security_softwareinstallframework.mrp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swinstallationfw/group/security_softwareinstallframework.mrp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,19 +1,3 @@
-#
-# 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: 
-#
-
 component	security_softwareinstallframework
 source	\sf\mw\appinstall\installationservices\swinstallationfw
 source	\sf\mw\appinstall\installationservices\swinstallationfw\test
--- a/installationservices/swinstallationfw/group/sif.mmp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swinstallationfw/group/sif.mmp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -33,6 +33,7 @@
 SOURCE sif.cpp sifcommon.cpp
 
 USERINCLUDE ../inc
+USERINCLUDE ../inc_private
 
 MW_LAYER_SYSTEMINCLUDE_SYMBIAN
 
--- a/installationservices/swinstallationfw/inc/sifcommon.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swinstallationfw/inc/sifcommon.h	Thu Jul 22 16:35:01 2010 +0100
@@ -32,6 +32,7 @@
 
 namespace Usif
     {
+    class MOpaqueParam;
 
     /**
         This enumeration defines the possible values of the status of an installation package. This status
@@ -423,7 +424,7 @@
         This class is designed for sending opaque params across the process boundary. For example, a SIF
         client may use it to send custom arguments to the SIF server or receive custom results.
     */
-    class COpaqueNamedParams : public CBase
+    NONSHARABLE_CLASS(COpaqueNamedParams) : public CBase
         {
     public:
         /**
@@ -494,17 +495,40 @@
             @leave System wide error code
         */
         IMPORT_C void AddStringL(const TDesC& aName, const TDesC& aValue);
+        
+        /**
+            Adds a string array param to this object. If a param with the same name already exists it gets overwritten.
+
+            @param aName The name of the string param to be added.
+            @param aValueArray The array of value string params to be added.
+            @leave KErrOverflow if the size of the name or any value in the string array being added exceeds 128 bytes or
+            the memory allocated for all the params added to this container exceeds 512 bytes.
+            @leave System wide error code.
+        */
+        IMPORT_C void AddStringArrayL(const TDesC& aName, const RPointerArray<HBufC>& aValueArray);        
 
         /**
             Adds an integer param to this object. If a param with the same name already exists it gets overwritten.
 
             @param aName The name of the integer param to be added.
             @param aValue The value of the integer param to be added.
-            @leave KErrOverflow if the size of the name the integer param being added exceeds 128 bytes or
+            @leave KErrOverflow if the size of the name being added exceeds 128 bytes or
             the memory allocated for all the params added to this container exceeds 512 bytes.
             @leave System wide error code
         */
         IMPORT_C void AddIntL(const TDesC& aName, TInt aValue);
+        
+        /**
+            Adds an integer array param to this object. If a param with the same name already exists it gets overwritten.
+
+            @param aName The name of the integer param to be added.
+            @param aValueArray The array of value integer params to be added.
+            @leave KErrOverflow if the size of the name being added exceeds 128 bytes or
+            the memory allocated for all the params added to this container exceeds 512 bytes.
+            @leave System wide error code.
+        */
+        IMPORT_C void AddIntArrayL(const TDesC& aName, const RArray<TInt>& aValueArray);
+        
 
         /**
             Returns the list of the names of params added to the object.
@@ -524,6 +548,16 @@
             @leave System wide error code
         */
         IMPORT_C const TDesC& StringByNameL(const TDesC& aName) const;
+        
+        /**
+            Gets a reference to the string array param identified by aName.
+
+            @param aName The name of the string param to be obtained.
+            @return The string array param.
+            @leave KErrNotFound if aName is not found.
+			@leave System wide error code.
+        */
+        IMPORT_C const RPointerArray<HBufC>& StringArrayByNameL(const TDesC& aName) const;        
 
         /**
             Returns the integer param identified by aName.
@@ -544,6 +578,16 @@
             @leave Or other system-wide error code.
         */
         IMPORT_C TInt IntByNameL(const TDesC& aName) const;
+        
+        /**
+            Returns the integer array param identified by aName.
+
+            @param aName The name of the integer param to be obtained.
+            @return The integer array param.
+            @leave KErrNotFound if aName is not found.
+            @leave Or other system-wide error code.
+        */
+        IMPORT_C const RArray<TInt>& IntArrayByNameL(const TDesC& aName) const;        
 
         /**
             Empties the container and frees all memory allocated to the params.
@@ -564,32 +608,22 @@
         void ConstInternalizeL(RReadStream& aStream) const;
         void ConstCleanup() const;
         void CleanupExternalBuffer() const;
-        void VerifyExternalizedSizeForNewParamL(TInt aNameSize, TInt aValueSize) const;
-        void VerifyExternalizedSizeForExistingParamL(TInt aOldValueSize, TInt aNewValueSize) const;
-
-        struct TItem
-            {
-            HBufC* iName;
-            HBufC* iValue;
-            };
-        RArray<TItem> iParams;
-
+        void VerifyExternalizedSizeForNewParamArrayL(TInt aNameSize, TInt aValueSize) const;
+        void VerifyExternalizedSizeForExistingParamArrayL(TInt aOldValueSize, TInt aNewValueSize) const;
+        void AddOpaqueParamL(MOpaqueParam* aItemBase);
+private:
+        RPointerArray<MOpaqueParam> iParams;
+        
         mutable HBufC8* iExternalBuffer;
         mutable TPtr8 iExternalBufferPtr;
         mutable TBool iDeferredInternalization;
         mutable TInt iExternalizedSize;
 
-        enum
-            {
-            // An arbitrary limit for the length of a single descriptor (the name or value of a param)
-            KMaxDescriptorLength = 128,
-            // An arbitrary size of the internal buffer for sending the component info across the process boundary
-            KMaxExternalizedSize = 512
-            };
-
         };
 
 	/**
+        Input Opaque Parameters:
+
 		Pre-defined opaque arguments and results:
 		"InstallInactive" - Yes/No 
 		If provided in the opaque installation parameters, requests the installation of
@@ -616,7 +650,10 @@
 		Action in case of OCSP warnings 
 
 		"AllowUpgrade" - TSifPolicy
-		Allow an upgrade (if yes, upgrade the data as well) 
+		Allow an upgrade (if yes, upgrade of the application) 
+
+		"AllowUpgradeData" - TSifPolicy
+		Whether private data of the application to be retained or removed during the upgrade
 
 		"InstallOptionalItems" - TSifPolicy
 		Install optional items in package 
@@ -666,6 +703,10 @@
 		"AllowIncompatible" -  TSifPolicy
 		Check if installation of incompatible packages is allowed 
 
+        
+
+		Output Opaque parameters:
+
 		"ComponentId" - Array of TUInt
 		If returned in the custom results, provides the id's of the newly added components
 		after an install. Please note that not all installers (i.e. SIF Plugins) may support this.
@@ -696,6 +737,7 @@
 	_LIT(KSifInParam_PerformOCSP, "PerformOCSP");
 	_LIT(KSifInParam_IgnoreOCSPWarnings, "IgnoreOCSPWarnings");
 	_LIT(KSifInParam_AllowUpgrade, "AllowUpgrade");
+	_LIT(KSifInParam_AllowUpgradeData, "AllowUpgradeData");
 	_LIT(KSifInParam_InstallOptionalItems, "InstallOptionalItems");
 	_LIT(KSifInParam_AllowUntrusted, "AllowUntrusted");
 	_LIT(KSifInParam_GrantCapabilities, "GrantCapabilities");
--- a/installationservices/swinstallationfw/inc/sifnotification.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swinstallationfw/inc/sifnotification.h	Thu Jul 22 16:35:01 2010 +0100
@@ -462,7 +462,6 @@
         @param  aHandler A handle to the implementation of the MSifOperationsHandler class.      
                                         
         @return A pointer to the newly allocated CSifOperationsNotifier object, if creation is successful.
-                The pointer is also put onto the cleanup stack. 
      */         
     IMPORT_C static CSifOperationsNotifier* NewL(MSifOperationsHandler& aHandler);
     
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swinstallationfw/inc_private/sifcommon_internal.h	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,160 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: 
+* sifcommon_internal.h.
+*
+*/
+
+/**
+ @file
+ @released
+ @internal
+*/
+
+#ifndef __SIFCOMMON_INTERNAL_H__
+#define __SIFCOMMON_INTERNAL_H__
+
+namespace Usif {
+
+const TUint KMaxOpaqueParamsDescriptorSize = 128;
+const TUint KMaxOpaqueParamsExternalizedSize = 512;
+
+class MOpaqueParam
+    {
+public:
+    enum TType
+        {
+        EString,
+        EStringArray,
+        EInteger,
+        EIntegerArray
+        };
+    
+    virtual void ExternalizeL(RWriteStream& aStream) const = 0;
+    virtual void InternalizeL(RReadStream& aStream) = 0;
+    virtual const HBufC& Name() const = 0;
+    virtual TType Type() const = 0;
+    virtual TInt ValueSize() const = 0;
+    virtual ~MOpaqueParam() {}
+    };
+
+class CItemBase : public CBase, public MOpaqueParam
+    {
+public:
+    void ExternalizeL(RWriteStream& aStream) const;
+    void InternalizeL(RReadStream& aStream);
+    const HBufC& Name() const;
+    TType Type() const;
+    TInt ValueSize() const;
+    ~CItemBase();
+    
+protected:
+    CItemBase(TType aType);
+    void SetValueSize(TInt aSize);
+    void VerifyExternalizedSizeForParamL(TUint aValueSize) const;
+    void SetNameL(const TDesC& aName);
+    
+private:
+    HBufC* iName;
+    TType iType;
+    TUint iSize;
+    };
+class CStringItem : public CItemBase
+    {
+public:
+    static CStringItem* NewL(RReadStream& aStream);
+    static CStringItem* NewL(const TDesC& aName, const TDesC& aValue);
+    void ExternalizeL(RWriteStream& aStream) const;
+    void InternalizeL(RReadStream& aStream);  
+    const HBufC& Name() const;
+    TType Type() const;
+    TInt ValueSize() const;
+    const TDesC& StringValue() const;
+    ~CStringItem();
+    
+private:
+    CStringItem();
+    void ConstructL(const TDesC& aName, const TDesC& aValue);
+    
+private:
+    HBufC* iString;
+    };
+
+class CStringArrayItem : public CItemBase
+    {
+public:
+    static CStringArrayItem* NewL(RReadStream& aStream);
+    static CStringArrayItem* NewL(const TDesC& aName, const RPointerArray<HBufC>& aValueArray);
+    void ExternalizeL(RWriteStream& aStream) const;
+    void InternalizeL(RReadStream& aStream);
+    const HBufC& Name() const;
+    TType Type() const;
+    TInt ValueSize() const;
+    const RPointerArray<HBufC>& StringArrayValue() const;
+    ~CStringArrayItem();
+    
+private:
+    void ConstructL(const TDesC& aName, const RPointerArray<HBufC>& aValueArray);
+    CStringArrayItem();
+    
+private:
+    RPointerArray<HBufC> iStringArray;    
+    };
+
+class CIntegerItem : public CItemBase
+    {
+public:
+    static CIntegerItem* NewL(RReadStream& aStream);
+    static CIntegerItem* NewL(const TDesC& aName, TInt aValue);
+    void ExternalizeL(RWriteStream& aStream) const;
+    void InternalizeL(RReadStream& aStream);
+    const HBufC& Name() const;
+    TType Type() const;
+    TInt ValueSize() const;
+    TInt IntegerValue() const;
+    ~CIntegerItem();
+    
+private:
+    CIntegerItem(TInt aValue);
+    void ConstructL(const TDesC& aName);
+    
+private:
+    TInt iInteger;
+    };
+
+class CIntegerArrayItem : public CItemBase
+    {
+public:
+    static CIntegerArrayItem* NewL(RReadStream& aStream);
+    static CIntegerArrayItem* NewL(const TDesC& aName, const RArray<TInt>& aValueArray);
+    void ExternalizeL(RWriteStream& aStream) const;
+    void InternalizeL(RReadStream& aStream);
+    const HBufC& Name() const;
+    TType Type() const;
+    TInt ValueSize() const;
+    const RArray<TInt>& IntegerArrayValue() const;
+    ~CIntegerArrayItem();
+    
+private:
+    CIntegerArrayItem();
+    void ConstructL(const TDesC& aName, const RArray<TInt>& aValueArray);
+    
+private:
+    RArray<TInt> iIntegerArray;
+    };
+
+
+} //namespace 
+
+#endif //__SIFCOMMON_INTERNAL_H__
--- a/installationservices/swinstallationfw/source/sifcommon.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swinstallationfw/source/sifcommon.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -19,6 +19,9 @@
 #include <f32file.h>
 #include <usif/sif/sifcommon.h>
 #include <s32mem.h>
+#include <scs/cleanuputils.h>
+#include <scs/streamingarray.h>
+#include "sifcommon_internal.h"
 
 using namespace Usif;
 
@@ -558,7 +561,7 @@
 // ##########################################################################################
 
 COpaqueNamedParams::COpaqueNamedParams()
-	: iExternalBuffer(NULL), iExternalBufferPtr(NULL, 0, 0), iDeferredInternalization(EFalse), iExternalizedSize(sizeof(TInt))
+	: iExternalBuffer(NULL), iExternalBufferPtr(NULL, 0, 0), iDeferredInternalization(EFalse), iExternalizedSize(2*sizeof(TInt))
 	{
 	}
 
@@ -581,22 +584,20 @@
 	return self;
 	}
 
-void COpaqueNamedParams::VerifyExternalizedSizeForNewParamL(TInt aNameSize, TInt aValueSize) const
+void COpaqueNamedParams::VerifyExternalizedSizeForNewParamArrayL(TInt aNameSize, TInt aValueSize) const
 	{
 	const TInt load = 2*sizeof(TInt) + aNameSize + aValueSize;
-	if (aNameSize > KMaxDescriptorLength || aValueSize > KMaxDescriptorLength ||
-		iExternalizedSize + load > KMaxExternalizedSize)
+	if (aNameSize > KMaxOpaqueParamsDescriptorSize || iExternalizedSize + load > KMaxOpaqueParamsExternalizedSize)
 		{
 		User::Leave(KErrOverflow);
 		}
 	iExternalizedSize += load;
 	}
 
-void COpaqueNamedParams::VerifyExternalizedSizeForExistingParamL(TInt aOldValueSize, TInt aNewValueSize) const
+void COpaqueNamedParams::VerifyExternalizedSizeForExistingParamArrayL(TInt aOldValueSize, TInt aNewValueSize) const
 	{
 	const TInt diff = aNewValueSize - aOldValueSize;
-	if (aNewValueSize > KMaxDescriptorLength ||
-		iExternalizedSize + diff > KMaxExternalizedSize)
+	if (iExternalizedSize + diff > KMaxOpaqueParamsExternalizedSize)
 		{
 		User::Leave(KErrOverflow);
 		}
@@ -605,43 +606,60 @@
 
 EXPORT_C void COpaqueNamedParams::AddStringL(const TDesC& aName, const TDesC& aValue)
 	{
-	HBufC* value = HBufC::NewLC(aValue.Length());
-	TPtr bufValue(value->Des());
-	bufValue.Copy(aValue);
+	CStringItem* stringItem = CStringItem::NewL(aName, aValue);
+	CleanupStack::PushL(stringItem);
+	
+	AddOpaqueParamL(stringItem);
+    CleanupStack::Pop(stringItem);
+	}
 
-	const TInt len = iParams.Count();
-	for (TInt i=0; i<len; ++i)
-		{
-		if (iParams[i].iName->CompareF(aName) == 0)
-			{
-			VerifyExternalizedSizeForExistingParamL(iParams[i].iValue->Size(), value->Size());
-			delete iParams[i].iValue;
-			iParams[i].iValue = value;
-			CleanupStack::Pop(value);
-			return;
-			}
-		}
-
-	VerifyExternalizedSizeForNewParamL(aName.Size(), aValue.Size());
-
-	HBufC* name = HBufC::NewLC(aName.Length());
-	TPtr bufName(name->Des());
-	bufName.Copy(aName);
-
-	TItem item = {name, value};
-	iParams.AppendL(item);
-
-	CleanupStack::Pop(2, value);
-	}
+EXPORT_C void COpaqueNamedParams::AddStringArrayL(const TDesC& aName, const RPointerArray<HBufC>& aValueArray)
+    {
+    CStringArrayItem* stringArray = CStringArrayItem::NewL(aName, aValueArray);
+    CleanupStack::PushL(stringArray);
+    
+    AddOpaqueParamL(stringArray);
+    CleanupStack::Pop(stringArray);
+    }
 
 EXPORT_C void COpaqueNamedParams::AddIntL(const TDesC& aName, TInt aValue)
 	{
-  	// Assumption: the code below won't be compiled in __KERNEL_MODE__ so HBufC is always defined as HBufC16
-  	TBuf<sizeof(TInt)/2> buf;
-  	buf.Copy(reinterpret_cast<TUint16*>(&aValue), sizeof(TInt)/2);
-	AddStringL(aName, buf);
+	CIntegerItem* integer = CIntegerItem::NewL(aName, aValue);
+    CleanupStack::PushL(integer);
+    
+    AddOpaqueParamL(integer);
+    CleanupStack::Pop(integer);	
 	}
 
+EXPORT_C void COpaqueNamedParams::AddIntArrayL(const TDesC& aName, const RArray<TInt>& aValueArray)
+    {
+    CIntegerArrayItem* integerArray = CIntegerArrayItem::NewL(aName, aValueArray);
+    CleanupStack::PushL(integerArray);
+    
+    AddOpaqueParamL(integerArray);
+    CleanupStack::Pop(integerArray);     
+    }
+
+void COpaqueNamedParams::AddOpaqueParamL(MOpaqueParam* aItemBase)
+    {
+    const TInt count = iParams.Count();
+        
+    for (TInt i=0; i<count; ++i)
+        {
+        if (iParams[i]->Name().CompareF(aItemBase->Name()) == 0)
+            {
+            VerifyExternalizedSizeForExistingParamArrayL(iParams[i]->ValueSize(), aItemBase->ValueSize());
+            
+            delete iParams[i];
+            iParams[i] = aItemBase;
+            return;
+            }
+        }
+
+    VerifyExternalizedSizeForNewParamArrayL(aItemBase->Name().Size(), aItemBase->ValueSize());
+    iParams.AppendL(aItemBase); 
+    }
+
 EXPORT_C void COpaqueNamedParams::GetNamesL(RPointerArray<HBufC>& aNames) const
 	{
 	InternalizeFromExternalBufferL();
@@ -649,10 +667,7 @@
 	const TInt len = iParams.Count();
 	for (TInt i=0; i<len; ++i)
 		{
-		const TDesC& ref = *iParams[i].iName;
-		HBufC* name = HBufC::NewLC(ref.Length());
-		TPtr bufName(name->Des());
-		bufName.Copy(ref);
+		HBufC* name = iParams[i]->Name().AllocLC();
 		aNames.AppendL(name);
 		CleanupStack::Pop(name);
 		}
@@ -662,39 +677,59 @@
 	{
 	InternalizeFromExternalBufferL();
 
-	TInt len = iParams.Count();
-	aStream.WriteInt32L(len);
-	for (TInt i=0; i<len; ++i)
+	TInt count = iParams.Count();
+	aStream.WriteInt32L(count);
+	for (TInt i=0; i<count; ++i)
 		{
-		aStream << *iParams[i].iName;
-		aStream << *iParams[i].iValue;
+		aStream.WriteInt32L(iParams[i]->Type());
+		iParams[i]->ExternalizeL(aStream);
 		}
+	
+	aStream.WriteInt32L(iExternalizedSize);
 	}
 
 EXPORT_C void COpaqueNamedParams::InternalizeL(RReadStream& aStream)
 	{
-	Cleanup();
 	ConstInternalizeL(aStream);
 	}
 
 void COpaqueNamedParams::ConstInternalizeL(RReadStream& aStream) const
 	{
-	RArray<TItem>& refParams = const_cast<RArray<TItem>&>(iParams);
+    ConstCleanup();
+	RPointerArray<MOpaqueParam>& refParams = const_cast<RPointerArray<MOpaqueParam>& >(iParams);
 	
-	TInt len = aStream.ReadInt32L();
-	for (TInt i=0; i<len; ++i)
+	TInt count = aStream.ReadInt32L();
+	for (TInt i=0; i<count; ++i)
 		{
-		HBufC* name = HBufC::NewLC(aStream, KMaxDescriptorLength);
-		HBufC* value = HBufC::NewLC(aStream, KMaxDescriptorLength);
-
-		// We need to update iExternalizedSize here because its value must correspond to the params beind added from aStream
-		VerifyExternalizedSizeForNewParamL(name->Size(), value->Size());
-
-		TItem item = {name, value};
-		refParams.AppendL(item);
-
-		CleanupStack::Pop(2, name);
+		MOpaqueParam::TType type = static_cast<MOpaqueParam::TType>(aStream.ReadInt32L());
+	    MOpaqueParam* param(0);
+		switch(type)
+		    {
+		    case MOpaqueParam::EString:
+		        param = CStringItem::NewL(aStream);
+		        break;
+		        
+            case MOpaqueParam::EStringArray:
+                param = CStringArrayItem::NewL(aStream);
+                break;
+                
+            case MOpaqueParam::EInteger:
+                param = CIntegerItem::NewL(aStream);
+                break;     
+                
+            case MOpaqueParam::EIntegerArray:
+                param = CIntegerArrayItem::NewL(aStream);
+                break;     
+                
+            default:
+                User::Leave(KErrCorrupt);
+		    }
+		CleanupStack::PushL(param);
+		refParams.AppendL(param);
+		CleanupStack::Pop(param);
 		}
+		
+	iExternalizedSize = aStream.ReadInt32L();
 	}
 
 EXPORT_C void COpaqueNamedParams::PrepareArgumentsForIpcL(TIpcArgs& aIpcArgs, TInt aIndex) const
@@ -717,7 +752,7 @@
 	{
 	delete iExternalBuffer;
 	iExternalBuffer = NULL;
-	iExternalBuffer = HBufC8::NewL(KMaxExternalizedSize);
+	iExternalBuffer = HBufC8::NewL(KMaxOpaqueParamsExternalizedSize);
 	iExternalBufferPtr.Set(iExternalBuffer->Des());
 	
 	RDesWriteStream ws(iExternalBufferPtr);
@@ -735,8 +770,6 @@
 	if (iDeferredInternalization)
 		{
 		iDeferredInternalization = EFalse;
-
-		ConstCleanup();
 		
 		RDesReadStream rs(*iExternalBuffer);
 		CleanupClosePushL(rs);
@@ -751,28 +784,57 @@
 	{
 	InternalizeFromExternalBufferL();
 	
-	const TInt len = iParams.Count();
-	for (TInt i=0; i<len; ++i)
+	const TInt count = iParams.Count();
+	for (TInt i=0; i<count; ++i)
 		{
-		if (iParams[i].iName->CompareF(aName) == 0)
+		if (iParams[i]->Type() == MOpaqueParam::EString && iParams[i]->Name().CompareF(aName) == 0)
 			{
-			return *iParams[i].iValue;
+			CStringItem* string = static_cast<CStringItem*>(iParams[i]);
+			return string->StringValue();
 			}
 		}
+	
 	return KNullDesC;    
 	}
 
+EXPORT_C const RPointerArray<HBufC>& COpaqueNamedParams::StringArrayByNameL(const TDesC& aName) const
+    {
+    InternalizeFromExternalBufferL();
+  
+    const TInt count = iParams.Count();
+    TInt i;
+    for (i=0; i<count; ++i)
+        {
+        if (iParams[i]->Type() == MOpaqueParam::EStringArray && iParams[i]->Name().CompareF(aName) == 0)
+            {
+            break;
+            }
+        }
+    
+    if(i == count)
+        {
+        User::Leave(KErrNotFound); 
+        }
+    CStringArrayItem* stringArray = static_cast<CStringArrayItem*>(iParams[i]);  
+    return stringArray->StringArrayValue();
+    }
+
 EXPORT_C TBool COpaqueNamedParams::GetIntByNameL(const TDesC& aName, TInt& aValue) const
 	{
 	InternalizeFromExternalBufferL();
-
-	const TDesC& value = StringByNameL(aName);
-	if (value == KNullDesC)
-		{
-		return EFalse;
-		}
-	aValue = *(reinterpret_cast<const TUint*>(value.Ptr()));
-	return ETrue;
+	
+    const TInt count = iParams.Count();
+    for (TInt i=0; i<count; ++i)
+        {
+        if (iParams[i]->Type() == MOpaqueParam::EInteger && iParams[i]->Name().CompareF(aName) == 0)
+            {
+            CIntegerItem* integer = static_cast<CIntegerItem*>(iParams[i]); 
+            aValue = integer->IntegerValue();
+            return ETrue;
+            }
+        }
+    
+    return EFalse;
 	}
 
 EXPORT_C TInt COpaqueNamedParams::IntByNameL(const TDesC& aName) const
@@ -787,6 +849,28 @@
 	return val;
 	}
 
+EXPORT_C  const RArray<TInt>& COpaqueNamedParams::IntArrayByNameL(const TDesC& aName) const
+    {  
+    InternalizeFromExternalBufferL();
+  
+    const TInt count = iParams.Count();
+    TInt i;
+    for (i=0; i<count; ++i)
+        {
+        if (iParams[i]->Type() == MOpaqueParam::EIntegerArray && iParams[i]->Name().CompareF(aName) == 0)
+            {
+            break;
+            }
+        }
+    
+    if(i == count)
+        {
+        User::Leave(KErrNotFound); 
+        }
+    CIntegerArrayItem* integerArray = static_cast<CIntegerArrayItem*>(iParams[i]);      
+    return integerArray->IntegerArrayValue();
+    }
+
 EXPORT_C TInt COpaqueNamedParams::CountL() const
 	{
 	InternalizeFromExternalBufferL();
@@ -801,16 +885,10 @@
 void COpaqueNamedParams::ConstCleanup() const
 	{
 	// Cleanup internal params
-	iExternalizedSize = sizeof(TInt);
-
-	const TInt len = iParams.Count();
-	for (TInt i=0; i<len; ++i)
-		{
-		delete iParams[i].iName;
-		delete iParams[i].iValue;
-		}
-	RArray<TItem>& refParams = const_cast<RArray<TItem>&>(iParams);
-	refParams.Reset();
+	iExternalizedSize = 2*sizeof(TInt);
+	
+	RPointerArray<MOpaqueParam>& refParams = const_cast<RPointerArray<MOpaqueParam>&>(iParams);
+	refParams.ResetAndDestroy();
 	}
 
 	void COpaqueNamedParams::CleanupExternalBuffer() const
@@ -819,3 +897,368 @@
 	iExternalBuffer = NULL;
 	iDeferredInternalization = EFalse;
 	}
+	
+
+/*
+ * SifCommon internal classes
+ */
+
+
+CItemBase::CItemBase(TType aType):
+    iType(aType)
+    {
+    
+    }
+
+CItemBase::TType CItemBase::Type() const
+    {
+    return iType;
+    }
+
+void CItemBase::SetNameL(const TDesC& aName)
+    {
+    delete iName;
+    iName = aName.AllocL();
+    }
+
+
+CItemBase::~CItemBase()
+    {
+    delete iName;
+    }
+
+const HBufC& CItemBase::Name() const
+    {
+    return *iName;
+    }
+
+void CItemBase::SetValueSize(TInt aSize)
+    {
+    iSize = aSize;
+    }
+
+TInt CItemBase::ValueSize() const
+    {
+    return iSize;
+    }
+
+void CItemBase::VerifyExternalizedSizeForParamL(TUint aValueSize) const
+    {
+    if(aValueSize > KMaxOpaqueParamsDescriptorSize)
+        {
+        User::Leave(KErrOverflow);
+        }
+    }
+
+void CItemBase::ExternalizeL(RWriteStream& aStream) const
+    {
+    aStream << Name();
+    aStream.WriteInt32L(iSize);
+    }
+
+void CItemBase::InternalizeL (RReadStream& aStream)
+    {
+    delete iName;
+    iName = HBufC::NewL(aStream, KMaxOpaqueParamsDescriptorSize);
+    iSize = aStream.ReadInt32L();
+    }
+    
+/*
+ * CStringItem
+ */
+CStringItem::CStringItem():
+    CItemBase(EString)
+    {
+    
+    }
+
+CStringItem* CStringItem::NewL(const TDesC& aName, const TDesC& aValue)
+    {
+    CStringItem* self = new(ELeave)CStringItem();
+    CleanupStack::PushL(self);
+    self->ConstructL(aName, aValue);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CStringItem* CStringItem::NewL(RReadStream& aStream)
+    {   
+    CStringItem *self = new(ELeave)CStringItem();
+    CleanupStack::PushL(self);
+    self->InternalizeL(aStream);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+void CStringItem::ConstructL(const TDesC& aName, const TDesC& aValue)
+    {
+    VerifyExternalizedSizeForParamL(aValue.Size());
+    SetNameL(aName);
+    iString = aValue.AllocL();
+    SetValueSize(iString->Size());
+    }
+
+CStringItem::~CStringItem()
+    {
+    delete iString;
+    }
+
+void CStringItem::ExternalizeL(RWriteStream& aStream) const
+    {
+	CItemBase::ExternalizeL(aStream);
+    aStream << *iString;
+    }
+
+void CStringItem::InternalizeL(RReadStream& aStream)
+    {
+    CItemBase::InternalizeL(aStream);
+    delete iString;
+    iString = HBufC::NewL(aStream, KMaxOpaqueParamsDescriptorSize);
+    }
+
+const TDesC& CStringItem::StringValue() const
+    {
+    return *iString;
+    }
+
+const HBufC& CStringItem::Name() const
+    {
+    return CItemBase::Name(); 
+    }
+
+MOpaqueParam::TType CStringItem::Type() const
+    {
+    return CItemBase::Type();
+    }
+
+TInt CStringItem::ValueSize() const
+    {
+    return CItemBase::ValueSize();
+    }
+/*
+ * CStringArrayItem
+ */
+
+CStringArrayItem::CStringArrayItem():
+    CItemBase(EStringArray)
+    {
+    
+    }
+
+CStringArrayItem* CStringArrayItem::NewL(const TDesC& aName, const RPointerArray<HBufC>& aValueArray)
+    {
+    CStringArrayItem* self = new(ELeave)CStringArrayItem();
+    CleanupStack::PushL(self);
+    self->ConstructL(aName, aValueArray);
+    CleanupStack::Pop(self);    
+    return self;
+    }
+
+CStringArrayItem* CStringArrayItem::NewL(RReadStream& aStream)
+    {   
+    CStringArrayItem *self = new(ELeave)CStringArrayItem();
+    CleanupStack::PushL(self);    
+    self->InternalizeL(aStream);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+void CStringArrayItem::ConstructL(const TDesC& aName, const RPointerArray<HBufC>& aValueArray)
+    {
+    SetNameL(aName);
+    for(TInt i=0; i< aValueArray.Count(); ++i)
+        {
+        VerifyExternalizedSizeForParamL(aValueArray[i]->Size());
+        HBufC* value = aValueArray[i]->AllocLC();
+        iStringArray.AppendL(value);
+        SetValueSize(ValueSize()+ value->Size());
+        CleanupStack::Pop();
+        }
+    }
+
+void CStringArrayItem::ExternalizeL(RWriteStream& aStream) const
+    {
+    CItemBase::ExternalizeL(aStream);
+    ExternalizePointersArrayL(iStringArray, aStream);
+    }
+
+void CStringArrayItem::InternalizeL(RReadStream& aStream)
+    {
+    CItemBase::InternalizeL(aStream);
+    iStringArray.ResetAndDestroy();
+    InternalizePointersArrayL(iStringArray, aStream);
+    }
+
+const RPointerArray<HBufC>& CStringArrayItem:: StringArrayValue() const
+    {
+    return iStringArray;
+    }
+
+const HBufC& CStringArrayItem::Name() const
+    {
+    return CItemBase::Name(); 
+    }
+
+MOpaqueParam::TType CStringArrayItem::Type() const
+    {
+    return CItemBase::Type();
+    }
+
+TInt CStringArrayItem::ValueSize() const
+    {
+    return CItemBase::ValueSize();
+    }
+
+CStringArrayItem::~CStringArrayItem()
+    {
+    iStringArray.ResetAndDestroy();
+    }
+
+/*
+ * CIntegerItem
+ */
+
+CIntegerItem::CIntegerItem(TInt aValue):
+    CItemBase(EInteger),
+    iInteger(aValue)
+    {
+    
+    }
+
+CIntegerItem* CIntegerItem::NewL(const TDesC& aName, TInt aValue)
+    {
+    CIntegerItem* self = new(ELeave)CIntegerItem(aValue);
+    CleanupStack::PushL(self);
+    self->ConstructL(aName);
+    CleanupStack::Pop(self);  
+    return self;
+    }
+
+CIntegerItem* CIntegerItem::NewL(RReadStream& aStream)
+    {   
+    CIntegerItem *self = new(ELeave)CIntegerItem(0);
+    CleanupStack::PushL(self);
+    self->InternalizeL(aStream);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+void CIntegerItem::ConstructL(const TDesC& aName)
+    {
+    SetNameL(aName);
+    SetValueSize(sizeof(TInt));
+    }
+
+void CIntegerItem::ExternalizeL(RWriteStream& aStream) const
+    {
+    CItemBase::ExternalizeL(aStream);
+    aStream.WriteInt32L(iInteger);
+    }
+
+void CIntegerItem::InternalizeL(RReadStream& aStream)
+    {
+    CItemBase::InternalizeL(aStream);
+    iInteger = aStream.ReadInt32L();
+    }
+
+TInt CIntegerItem::IntegerValue() const
+    {
+    return iInteger;
+    }
+
+const HBufC& CIntegerItem::Name() const
+    {
+    return CItemBase::Name(); 
+    }
+
+MOpaqueParam::TType CIntegerItem::Type() const
+    {
+    return CItemBase::Type();
+    }
+
+TInt CIntegerItem::ValueSize() const
+    {
+    return CItemBase::ValueSize();
+    }
+
+CIntegerItem::~CIntegerItem()
+    {
+    }
+
+/*
+ * CIntegerArrayItem
+ */
+
+CIntegerArrayItem::CIntegerArrayItem():
+    CItemBase(EIntegerArray)
+    {
+    
+    }
+
+CIntegerArrayItem* CIntegerArrayItem::NewL(const TDesC& aName, const RArray<TInt>& aValueArray)
+    {
+    CIntegerArrayItem* self = new(ELeave)CIntegerArrayItem();
+    CleanupStack::PushL(self);
+    self->ConstructL(aName, aValueArray);
+    CleanupStack::Pop(self);    
+    return self;
+    }
+
+CIntegerArrayItem* CIntegerArrayItem::NewL(RReadStream& aStream)
+    {   
+    CIntegerArrayItem *self = new(ELeave)CIntegerArrayItem();
+    CleanupStack::PushL(self);    
+    self->InternalizeL(aStream);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+
+void CIntegerArrayItem::ConstructL(const TDesC& aName, const RArray<TInt>& aValueArray)
+    {
+    SetNameL(aName);
+    
+    for(TInt i=0; i<aValueArray.Count(); ++i)
+        {
+        iIntegerArray.AppendL(aValueArray[i]);
+        SetValueSize(ValueSize()+sizeof(TInt));
+        }
+    }
+
+void CIntegerArrayItem::ExternalizeL(RWriteStream& aStream) const
+    {
+    CItemBase::ExternalizeL(aStream);
+    ExternalizeFixedLengthArrayL(iIntegerArray, aStream);
+    }
+
+void CIntegerArrayItem::InternalizeL(RReadStream& aStream)
+    {
+    CItemBase::InternalizeL(aStream);
+    iIntegerArray.Reset();
+    InternalizeFixedLengthArrayL(iIntegerArray, aStream);
+    }
+
+const RArray<TInt>& CIntegerArrayItem::IntegerArrayValue() const
+    {
+    return iIntegerArray;
+    }
+
+const HBufC& CIntegerArrayItem::Name() const
+    {
+    return CItemBase::Name(); 
+    }
+
+MOpaqueParam::TType CIntegerArrayItem::Type() const
+    {
+    return CItemBase::Type();
+    }
+
+TInt CIntegerArrayItem::ValueSize() const
+    {
+    return CItemBase::ValueSize();
+    }
+
+CIntegerArrayItem::~CIntegerArrayItem()
+    {
+    iIntegerArray.Close();
+    }
--- a/installationservices/swinstallationfw/test/securitytests/source/scrpluginmanagement.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swinstallationfw/test/securitytests/source/scrpluginmanagement.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -65,17 +65,40 @@
 	// First, add a new sofwtare type
 	_LIT(KSwTypeName, "usifsecuritytestsoftwaretype");
 	TUid sifPluginUid = {0xA01B7211};
-	_LIT_SECURE_ID(installerSecureId, 0xAAFFEE11);
-	_LIT_SECURE_ID(executionLayerSecureId, 0xAAEEDD11);
+	
+	RArray<TCustomAccessInfo> sidArray;
+	CleanupClosePushL(sidArray);
+	
+	TCustomAccessInfo id1(TSecureId(0xAAFFEE11), static_cast<TAccessMode>(1));
+	TCustomAccessInfo id2(TSecureId(0xAAEEDD11), static_cast<TAccessMode>(1));
+
+	sidArray.AppendL(id1);
+	sidArray.AppendL(id2);
 	
 	_LIT(KMimeType, "usifsecuritytestmimetype");
 	RPointerArray<HBufC> mimeTypes;
 	CleanupResetAndDestroyPushL(mimeTypes);
 	mimeTypes.Append(KMimeType().AllocL());
 	
-	TRAP(err, scrSession.AddSoftwareTypeL(KSwTypeName, sifPluginUid, installerSecureId, executionLayerSecureId, mimeTypes));
+	_LIT(KLauncherExecutable, "usifsecuritytestLauncherExec");
+	
+	Usif::CSoftwareTypeRegInfo* swType = Usif::CSoftwareTypeRegInfo::NewL(KSwTypeName);
+	CleanupStack::PushL(swType);
+	swType->SetSifPluginUid(sifPluginUid);
+	for(TInt i=0;i<sidArray.Count(); ++i)
+		{
+		swType->SetCustomAccessL(sidArray[i]);
+		}
+	for(TInt i=0;i<mimeTypes.Count(); ++i)
+		{
+		swType->SetMimeTypeL(mimeTypes[i]->Des());
+		}
+
+	swType->SetLauncherExecutableL(KLauncherExecutable);
+	
+	TRAP(err, scrSession.AddSoftwareTypeL(*swType));
 	CheckFailL(err, _L("AddSoftwareTypeL"));
-	CleanupStack::PopAndDestroy(&mimeTypes);
+	CleanupStack::PopAndDestroy(3, &sidArray);
 	
 	// Then, delete the newly added sofwtare type. 
 	RPointerArray<HBufC> deletedMimeTypes;
--- a/installationservices/swinstallationfw/test/tusif/scripts/data/swtype.dtd	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/swtype.dtd	Thu Jul 22 16:35:01 2010 +0100
@@ -1,6 +1,6 @@
 <!ELEMENT LayeredExecutionEnvironments (softwareType+)>
 
-<!ELEMENT softwareType (localizedName*,mimeType+,sifPluginUid,installerSecureId,executionLayerSecureId)>
+<!ELEMENT softwareType (localizedName*,mimeType+,sifPluginUid,CustomAcess*,launcherExecutable)>
 <!ATTLIST softwareType name CDATA #REQUIRED>
 
 <!ELEMENT localizedName (#PCDATA)>
@@ -8,6 +8,7 @@
 
 <!ELEMENT sifPluginUid (#PCDATA)>
 
-<!ELEMENT installerSecureId (#PCDATA)>
+<!ELEMENT CustomAcess (#PCDATA)>
+<!ATTLIST CustomAcess SecureId CDATA #REQUIRED AccessMode CDATA #REQUIRED>
 
-<!ELEMENT executionLayerSecureId (#PCDATA)>
\ No newline at end of file
+<!ELEMENT launcherExecutable (#PCDATA)>
--- a/installationservices/swinstallationfw/test/tusif/scripts/data/swtypereginfo.xml	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swinstallationfw/test/tusif/scripts/data/swtypereginfo.xml	Thu Jul 22 16:35:01 2010 +0100
@@ -6,7 +6,8 @@
 		<localizedName language="31">testSwTypeLoc31</localizedName>
 		<mimeType>binary/sif-testpkg</mimeType>
 		<sifPluginUid>102866EF</sifPluginUid>
-		<installerSecureId>10285BCB</installerSecureId>
-		<executionLayerSecureId>80285DE0</executionLayerSecureId>
+		<CustomAcess SecureId="10285BCB" AccessMode="1"/>
+		<CustomAcess SecureId="80285DE0" AccessMode="1"/>
+		<launcherExecutable>testLauncherExecutable</launcherExecutable>		
 	</softwareType>
 </LayeredExecutionEnvironments>
--- a/installationservices/swinstallationfw/test/tusif/source/tsifcommonunitteststep.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swinstallationfw/test/tusif/source/tsifcommonunitteststep.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -25,6 +25,7 @@
 #include "tsifsuitedefs.h"
 #include <usif/sif/sifcommon.h>
 #include <ct/rcpointerarray.h>
+#include <scs/cleanuputils.h>
 
 using namespace Usif;
 
@@ -297,11 +298,35 @@
 	
 	_LIT(KStringValue1, "value 1");
 	_LIT(KStringValue2, "value 2");
+	_LIT(KStringValue3, "value 3");
 
 	const TInt KIntValue1 = 111;
 	const TInt KIntValue2 = 222;
 	const TInt KIntValue3 = 333;
 	
+	//String Array
+	RPointerArray<HBufC> stringArray;
+	CleanupResetAndDestroyPushL(stringArray);
+	
+	HBufC* stringPtr = KStringValue1().AllocLC();
+	stringArray.AppendL(stringPtr);
+	CleanupStack::Pop();
+	
+    stringPtr = KStringValue2().AllocLC();
+    stringArray.AppendL(stringPtr);
+    CleanupStack::Pop();
+    
+    stringPtr = KStringValue3().AllocLC();
+    stringArray.AppendL(stringPtr);
+    CleanupStack::Pop(); 
+    
+    //Int Array
+    RArray<TInt> intArray;
+    CleanupClosePushL(intArray);
+    intArray.AppendL(KIntValue1);
+    intArray.AppendL(KIntValue2);
+    intArray.AppendL(KIntValue3);
+    
 	/*  NewL */
 	COpaqueNamedParams* params1 = COpaqueNamedParams::NewL();
 	CleanupStack::PushL(params1);
@@ -330,6 +355,13 @@
 		INFO_PRINTF1(_L("TestOpaqueNamedParamsL: 'StringByNameL for an existing param' failed"));
 		User::Leave(KErrGeneral);
 		}
+	//Added as string , trying to retrieve as int.
+    TRAPD(err, params1->IntByNameL(KParamName1));
+    if(err != KErrNotFound)
+        {
+        INFO_PRINTF1(_L("TestOpaqueNamedParamsL: 'IntByNameL for an existing param' failed"));
+        User::Leave(KErrGeneral);
+        }	
 	// StringByNameL for a non-existing param
 	if (params1->StringByNameL(KParamName2) != KNullDesC)
 		{
@@ -368,7 +400,7 @@
 		User::Leave(KErrGeneral);
 		}
 	// IntByNameL for a non-existing param
-	TRAPD(err, params2->IntByNameL(KParamName2));
+	TRAP(err, params2->IntByNameL(KParamName2));
 	if (err != KErrNotFound)
 		{
 		INFO_PRINTF1(_L("TestOpaqueNamedParamsL: 'IntByNameL for a non-existing param' failed"));
@@ -435,4 +467,81 @@
 		}
 
 	CleanupStack::PopAndDestroy(4, params2);
+
+	COpaqueNamedParams* params4 = COpaqueNamedParams::NewLC();
+	
+	params4->AddStringArrayL(KParamName1, stringArray);
+	
+	const RPointerArray<HBufC>& strArray = params4->StringArrayByNameL(KParamName1);
+	if(*strArray[0] != KStringValue1 || *strArray[1] != KStringValue2 || *strArray[2] != KStringValue3)
+	    {
+	    INFO_PRINTF1(_L("TestOpaqueNamedParamsL: StringArrayByNameL failed"));
+	    User::Leave(err);
+	    }
+
+	TRAP(err, const RArray<TInt>& intArray1 = params4->IntArrayByNameL(KParamName1));
+    if(err != KErrNotFound)
+        {
+        INFO_PRINTF1(_L("TestOpaqueNamedParamsL: IntArrayByNameL failed"));
+        User::Leave(err);  
+        }	
+	//Append a big string ( greater than 128 bytes)
+	HBufC* largeString = HBufC::NewLC(150);
+	largeString->Des().FillZ(150);
+	stringArray.AppendL(largeString);
+	CleanupStack::Pop();
+	
+	TRAP(err, params4->AddStringArrayL(KParamName1, stringArray));
+	  
+	if(err != KErrOverflow)
+	    {
+        INFO_PRINTF1(_L("TestOpaqueNamedParamsL: AddStringArrayL overflow check failed"));
+        User::Leave(err);	    
+	    }
+	
+	stringArray.ResetAndDestroy();
+	// Few large strings
+    HBufC* bigString2 = HBufC::NewLC(64);
+    bigString2->Des().FillZ(64);
+    stringArray.AppendL(bigString2);
+    CleanupStack::Pop();
+    
+    HBufC* bigString3 = HBufC::NewLC(64);
+    bigString3->Des().FillZ(64);
+    stringArray.AppendL(bigString3);
+    CleanupStack::Pop();
+
+    HBufC* bigString4 = HBufC::NewLC(64);
+    bigString4->Des().FillZ(64);
+    stringArray.AppendL(bigString4);
+    CleanupStack::Pop();
+    
+     HBufC* bigString5 = HBufC::NewLC(64);
+     bigString5->Des().FillZ(64);
+     stringArray.AppendL(bigString5);
+     CleanupStack::Pop();
+     
+     TRAP(err, params4->AddStringArrayL(KParamName1, stringArray));
+      
+      if(err != KErrOverflow)
+          {
+          INFO_PRINTF1(_L("TestOpaqueNamedParamsL: AddStringArrayL overflow check failed"));
+          User::Leave(err);       
+          }    
+	params4->AddIntArrayL(KParamName1, intArray);
+    const RArray<TInt>& RefIntArray = params4->IntArrayByNameL(KParamName1);
+    if(RefIntArray[0] != KIntValue1 || RefIntArray[1] != KIntValue2 || RefIntArray[2] != KIntValue3)
+        {
+        INFO_PRINTF1(_L("TestOpaqueNamedParamsL: IntArrayByNameL failed"));
+        User::Leave(err);
+        }	
+    
+    TRAP(err, const RPointerArray<HBufC>& strArray1 = params4->StringArrayByNameL(KParamName1));
+	if(err != KErrNotFound)
+	    {
+        INFO_PRINTF1(_L("TestOpaqueNamedParamsL: StringArrayByNameL failed"));
+        User::Leave(err);  
+	    }
+
+	CleanupStack::PopAndDestroy(3, &stringArray);
 	}
--- a/installationservices/switestfw/group/install_testframework.mrp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/switestfw/group/install_testframework.mrp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,19 +1,3 @@
-#
-# 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: 
-#
-
 component	install_testframework
 source	\sf\mw\appinstall\installationservices\switestfw\bwins
 source	\sf\mw\appinstall\installationservices\switestfw\eabi
--- a/installationservices/switestfw/test/autotesting/apr_bld.inf	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/switestfw/test/autotesting/apr_bld.inf	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -47,12 +47,9 @@
 
 #include "mw/appinstall/installationservices/swi/group/bld.inf"
 #include "mw/appinstall/installationservices/swidevicetools/group/bld.inf"
-#include "mw/appinstall/secureswitools/swianalysistoolkit/group/bld.inf"
-
-
 
 #endif //TOOLS2
 
-// Only the SISTOOLS (makesis/signsis) and certapp build with TOOLS2
 #include "mw/appinstall/secureswitools/swisistools/group/bld.inf"
-
+#include "mw/appinstall/secureswitools/swianalysistoolkit/group/bld.inf"
+#include "mw/appinstall/secureswitools/makekeys/group/bld.inf"
\ No newline at end of file
--- a/installationservices/switestfw/test/autotesting/runswiromtests_9.5.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/switestfw/test/autotesting/runswiromtests_9.5.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 @rem
-@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
 @rem under the terms of the License "Eclipse Public License v1.0"
@@ -103,6 +103,9 @@
 testexecute z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors.script
 move c:\logs\testexecute\tuiscriptadaptors.htm e:\testresults\tuiscriptadaptors.htm
 
+testexecute z:\tswi\tuiscriptadaptors\scripts\nonusiftuiscriptadaptors.script
+move c:\logs\testexecute\nonusiftuiscriptadaptors.htm e:\testresults\nonusiftuiscriptadaptors.htm
+
 testexecute z:\tswi\tuiscriptadaptors\scripts\tuninstallpkgs_h4.script
 move c:\logs\testexecute\tuninstallpkgs_h4.htm e:\testresults\tuninstallpkgs_h4.htm
 
--- a/installationservices/switestfw/test/autotesting/runswiromtests_9.6.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/switestfw/test/autotesting/runswiromtests_9.6.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 @rem
-@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
 @rem under the terms of the License "Eclipse Public License v1.0"
@@ -62,6 +62,9 @@
 testexecute z:\tswi\tsisregistrytest\scripts\tsisregistry_performance.script
 move c:\logs\testexecute\tsisregistry_performance.htm e:\testresults\tsisregistry_performance.htm
 
+testexecute z:\tswi\tuiscriptadaptors\scripts\tuiscriptadaptors_app_performance.script
+move c:\logs\testexecute\tuiscriptadaptors_app_performance.htm e:\testresults\tuiscriptadaptors_app_performance.htm
+
 REM Run recognizer tests
 md c:\trecog
 copy /s z:\trecog\* c:\trecog
--- a/installationservices/switestfw/test/autotesting/testMakesis.pl	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/switestfw/test/autotesting/testMakesis.pl	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 # All rights reserved.
 # This component and the accompanying materials are made available
 # under the terms of the License "Eclipse Public License v1.0"
@@ -1779,6 +1779,39 @@
 }
 
 #
+# New test code for DEF145101 - MakeSIS cannot handle package files that contain large (>1000) language codes.
+# 
+sub TestDEF145101 {
+
+	my $path = "/epoc32/winscw/c/tswi";
+	my $pkgfile = "$path/largelanguagecodes";
+	my $expectedResult = 0;
+
+	WriteLog("Test for DEF145101 - MakeSIS cannot handle package files that contain large (>1000) language codes.\n");
+	
+	# Do MAKESIS test
+	@retval = system("$makesisExeLocation $pkgfile.pkg $pkgfile-tmp.sis > $pkgfile.log");
+	
+	$logMsg = sprintf "Expected code:%5d   result Code:%5d\n", $expectedResult, $?;
+	WriteLog( $logMsg);
+
+	$NumberOfTests++;
+	
+	if( $? == $expectedResult ) {
+		$NumberOfPassed++;
+		WriteLog("Passed\n\n");
+	}
+	else {
+		$NumberOfFailed++;
+		WriteLog("Failed\n\n");
+	}
+
+	unlink("$pkgfile-tmp.sis");
+	unlink("$pkgfile.sis");
+	unlink("$pkgfile.log");
+}
+
+#
 # Main
 #
 # Create environment and control test flow to testing MAKESIS.EXE 
@@ -2914,6 +2947,11 @@
 TestInterpretsisReport();
 
 #
+# Test for DEF145101 - MakeSIS cannot handle package files that contain large (>1000) language codes.
+#
+TestDEF145101();
+
+#
 # These tests are very specific to windows OS only
 #
 #
--- a/installationservices/switestfw/test/autotesting/test_spec_apr_9.5.txt	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/switestfw/test/autotesting/test_spec_apr_9.5.txt	Thu Jul 22 16:35:01 2010 +0100
@@ -26,7 +26,7 @@
 {9.5}=Common,SWI,IntegrityServices,SisTools,SwiTools95Only,SwiTools,Misc,ToolsLegacy,UptoMCL
 {9.6}=Common,SWI,IntegrityServices,SisTools,SwiTools95Only,SwiTools,Misc,ToolsLegacy,UptoMCL
 {future}=Common,SWI,SisTools,SwiTools,USIF,Misc,ToolsNew,SwiDiran
-{tb92}=Common,SWI,IntegrityServices,SisTools,SwiTools95Only,SwiTools,Misc,ToolsLegacy,UptoMCL
+{tb92}=Common,SWI,IntegrityServices,SisTools,SwiTools95Only,SwiTools,Misc,ToolsLegacy,UptoMCL,NonUSIFMCL
 {tb101}=Common,SWI,SisTools,SwiTools,USIF,Misc,ToolsNew,SwiDiran
 
 
@@ -122,6 +122,9 @@
 TESTEXECUTE, \logs\testexecute\tstartuprecovery.htm,, \tswi\tintegrityservices\scripts\tstartuprecovery.script, 300, UDEB#UREL, \epoc32\winscw\c\tswi\tintegrityservices\scripts\batchfiles\recoverystartup_pre.bat,
 TESTEXECUTE, \logs\testexecute\tintegrityservices.htm,, -Dstartupmode=1 -- \tswi\tintegrityservices\scripts\tintegrityservices.script, 300, UDEB#UREL,,
 
+[NonUSIFMCL]
+TESTEXECUTE, \logs\testexecute\nonusiftuiscriptadaptors.htm,, \tswi\tuiscriptadaptors\scripts\nonusiftuiscriptadaptors.script, 10000, UDEB#UREL, \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\batchfiles\tuiscriptadaptors_pre.bat, \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\batchfiles\tuiscriptadaptors_post.bat
+
 [SWI]
 TESTEXECUTE, \logs\testexecute\testfotaupdate1.htm,,    -Dstartupmode=1 -- \tswi\tuiscriptadaptors\scripts\testfotaupdate1.script, 300, UDEB#UREL, \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\batchfiles\testfotaupdate1_pre.bat, \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\batchfiles\testfotaupdate1_post.bat
 TESTEXECUTE, \logs\testexecute\testfotaupdate2.htm,,    -Dstartupmode=1 -- \tswi\tuiscriptadaptors\scripts\testfotaupdate2.script, 300, UDEB#UREL, \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\batchfiles\testfotaupdate2_pre.bat, \epoc32\winscw\c\tswi\tuiscriptadaptors\scripts\batchfiles\testfotaupdate2_post.bat
@@ -346,10 +349,10 @@
 PERL, \dumpchainvalidity_test.txt,,\epoc32\winscw\c\tswi\tchainvalidity\testChainValidity.pl, 300, UDEB,,
 # DUMPINSTALLFILESTATUS test
 PERL, \dumpinstallstatus_test.txt,,\epoc32\winscw\c\tswi\tinstallfilestatus\testInstallStatus.pl, 300, UDEB,,
+# DUMPSWICERTSTORE test
+PERL, \dumpswicertstore_test.txt,,\epoc32\winscw\c\tswi\tdumpcertstore\testswiCertstore.pl, 600, UDEB,\epoc32\winscw\c\tswi\tdumpcertstore\predumpcertstoretest.bat, \epoc32\winscw\c\tswi\tdumpcertstore\postdumpcertstoretest.bat
 
 [SwiTools95Only]
-# DUMPSWICERTSTORE test
-PERL, \dumpswicertstore_test.txt,,\epoc32\winscw\c\tswi\tdumpcertstore\testswiCertstore.pl, 600, UDEB,\epoc32\winscw\c\tswi\tdumpcertstore\predumpcertstoretest.bat, \epoc32\winscw\c\tswi\tdumpcertstore\postdumpcertstoretest.bat
 # DUMPSWIREGISTRY test
 PERL, \dumpregistry_test.txt,,\epoc32\winscw\c\tswi\tdumpregistry\testregistry.pl, 300, UDEB,,
 
--- a/installationservices/swtransactionservices/group/security_softwaretransactionservices.mrp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swtransactionservices/group/security_softwaretransactionservices.mrp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,19 +1,3 @@
-#
-# 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: 
-#
-
 component	security_softwaretransactionservices
 source	\sf\mw\appinstall\installationservices\swtransactionservices
 binary	\sf\mw\appinstall\installationservices\swtransactionservices\group	all
--- a/installationservices/swtransactionservices/inc_private/integrityservices.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swtransactionservices/inc_private/integrityservices.h	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -28,6 +28,7 @@
 
 #include <e32base.h>
 #include <f32file.h>
+#include <e32ldr_private.h>
 #include <usif/sts/stsdefs.h>
 #include "integrityservicesevent.h"
 
@@ -199,15 +200,6 @@
 		 */
 		static void RollbackAllL();
 
-
-		/**
-		 * Creates a backup file by copying the source to a defined backup name. This MUST be used for executables.
-		 * The source files will then be deleted by invoking RLoader::Delete
-		 * @param aSource	the file to backup
-		 * @param aBackup	the name of the backup file
-		*/
-		void CopyToBackupL(const TDesC& aSource, const TDesC& aBackup);
-
 		/**
 		 * Failure types - indicate when to simulate power failure during
 		 * testing
--- a/installationservices/swtransactionservices/inc_private/operationfunctions.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swtransactionservices/inc_private/operationfunctions.h	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -27,6 +27,8 @@
 
 #include <e32base.h>
 #include <f32file.h>
+#include <e32ldr_private.h>
+#include <e32uid.h>
 
 namespace Usif
 {
--- a/installationservices/swtransactionservices/source/server/integrityservices.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swtransactionservices/source/server/integrityservices.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -131,43 +131,6 @@
 		}			
 }
 
-void CIntegrityServices::CopyToBackupL(const TDesC& aSource, const TDesC& aBackup)
-{
-	// Copying a file isn't atomic so we create a temporary backup file first
-	RBuf backupTmpName;
-	backupTmpName.Create(aBackup.Length() + 4);
-	CleanupClosePushL(backupTmpName);
-	backupTmpName.Copy(aBackup);
-	_LIT(KTmpExt, ".tmp");
-	backupTmpName.Append(KTmpExt);
-	
-	// Copying a file is not an atomic operation so add the temporary
-	// file to the journal to enable cleanup if a power failure occurs before
-	// the rename
-	SimulatePowerFailureL(EFailAddingTempFile, EBeforeJournal, backupTmpName);
-	RegisterTemporaryL(backupTmpName);
-	SimulatePowerFailureL(EFailAddingTempFile, EAfterJournal, backupTmpName);	
-		
-	CFileMan* fileMan = CFileMan::NewL(iFs);
-	CleanupStack::PushL(fileMan);
-		
-	TInt err = fileMan->Copy(aSource, backupTmpName);
-	DEBUG_PRINTF4(_L("CIntegrityServices::CopyToBackupL() - Copying %S to %S, err %d"), &aSource, &backupTmpName, err);
-	User::LeaveIfError(err);
-	
-	// Backup is complete, use RFs::Rename as atomic 'commit' of backup
-	err = iFs.Rename(backupTmpName, aBackup);			
-	DEBUG_PRINTF2(_L("CIntegrityServices::CopyToBackupL() - Commit backup returned error %d"), err);	
-	User::LeaveIfError(err);	
-	CleanupStack::PopAndDestroy(2, &backupTmpName); // backupTmpName, fileMan 
-	
-	//  Now the backup is safe the original can be deleted
-	err = iLoader.Delete(aSource);
-	DEBUG_PRINTF3(_L("CIntegrityServices::CopyToBackupL() - RLoader::Delete %S returned error %d"), &aSource, err);
-	User::LeaveIfError(err);
-}
-
-
  void CIntegrityServices::RegisterNewL(const TDesC& aFileName)
 	{
 	DEBUG_PRINTF3(_L("CIntegrityServices::RegisterNewL() - Session %X, File: %S."),	iTransactionID, &aFileName);
@@ -253,19 +216,9 @@
 		VerifyMkDirErrorL(err);
 
 		SimulatePowerFailureL(EFailRemovingFile, EBeforeAction, aFileName);
-		_LIT(KSysBinMatch, "?:\\sys\\bin\\*");
-		if (localFilename.MatchF(KSysBinMatch) == 0)
-		{
-			// A copy is slower than a rename to only use the 
-			// demand paging safe API for files in sys\bin
-			CopyToBackupL(localFilename, backupFileName);			
-		}
-		else
-		{
 			err = iFs.Rename(localFilename, backupFileName);
 			DEBUG_PRINTF4(_L("CIntegrityServices::RemoveL() - Renamed %S as %S error %d"), &localFilename, &backupFileName, err);
 			User::LeaveIfError(err);
-		}				
 		SimulatePowerFailureL(EFailRemovingFile, EAfterAction, aFileName);
 		}
 	else
--- a/installationservices/swtransactionservices/source/server/operationfunctions.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/installationservices/swtransactionservices/source/server/operationfunctions.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -23,12 +23,18 @@
 */
 
 #include "operationfunctions.h"
-
 #include "integritytree.h"
+#include "usiflog.h"
 
 namespace Usif
 {
 
+TBool IsBinary(const TEntry& aEntry)
+    {
+    return (aEntry[0].iUid == KExecutableImageUidValue || aEntry[0].iUid == KDynamicLibraryUidValue) ? ETrue : EFalse;
+    }
+
+
 void VerifyDeletionErrorL(TInt err)
 	{
 	if (err != KErrNone && err != KErrNotFound && err != KErrPathNotFound)
@@ -38,6 +44,7 @@
 void IntegrityDeleteFileL(const TDesC& aPath, CIntegrityTreeLeaf* aLeaf, RFs& aFs, 
 							   RLoader& aLoader, CFileMan& aFileMan)
 	{
+    _LIT(KSysBin, "\\sys\\bin");
 	RBuf name;
 	name.CreateL(aPath, KMaxFileName);
 	CleanupClosePushL(name);
@@ -58,17 +65,76 @@
 			User::LeaveIfError(aFileMan.RmDir(name));
 			}
 		else
-			{
-			User::LeaveIfError(aLoader.Delete(name));
+			{			
+            if ( aLeaf->Type() == EBackupFile ) // Implies a commit operation is in progress
+                {
+                
+                 if ( IsBinary(entry) )
+                     {
+                     // Forming the file name so the renamed file can be under sys/bin
+					 // for special delete mechanism using RLoader::Delete
+                     RBuf tmpName;
+                     TParsePtrC fileName(name);
+                     tmpName.CreateL(name.Length() + KSysBin.iTypeLength);
+                     CleanupClosePushL(tmpName);
+
+                     tmpName.Append(fileName.Drive());
+                     tmpName.Append(KSysBin);
+                     tmpName.Append(fileName.Path());
+                     tmpName.Append(fileName.NameAndExt());
+
+					 DEBUG_PRINTF3(_L("Integrity Services - Renaming %S to %S"), &name, &tmpName);
+                     aFileMan.Rename(name,tmpName,CFileMan::EOverWrite);
+                     User::LeaveIfError(aLoader.Delete(tmpName)); // Using RLoader delete for paged binaries
+					 DEBUG_PRINTF2(_L("Integrity Services - Deleted renamed file %S"), &tmpName);
+
+					 // prune the directory tree if possible
+                     RemoveDirectoryTreeL(aFs, tmpName);
+                     CleanupStack::PopAndDestroy(&tmpName);
+                     }
+                 else
+                     {
+                     User::LeaveIfError(aFileMan.Delete(name));
+                     }
+                }
+            else
+                {
+				// Need to use RLoader Delete which can be used during deletion of Added files during Rollback
+                User::LeaveIfError(aLoader.Delete(name));
+                }
 			}
 			
 		// prune the directory tree if possible
 		RemoveDirectoryTreeL(aFs, name);
 		}
-	else
+	else if(err != KErrNotFound && err != KErrPathNotFound)
 		{
-		VerifyDeletionErrorL(err);
+		DEBUG_PRINTF3(_L("Integrity Services - error %d removing %S"), err, &name);
+		User::Leave(err);
 		}
+	else
+	    {
+
+		DEBUG_PRINTF3(_L("Integrity Services - error %d removing %S"), err, &name);
+
+	    // Check for any renamed files to move it to sys/bin for special delete mechanism
+	    RBuf tmpName;
+	    TParsePtrC fileName(name);
+	    tmpName.CreateL(name.Length() + KSysBin.iTypeLength);
+	    CleanupClosePushL(tmpName);
+
+	    tmpName.Append(fileName.Drive());
+	    tmpName.Append(KSysBin);
+	    tmpName.Append(fileName.Path());
+	    tmpName.Append(fileName.NameAndExt());
+		DEBUG_PRINTF2(_L("Integrity Services - Removing  %S renamed binary files if any"), &tmpName);
+
+	    aLoader.Delete(tmpName);
+		// prune the directory tree if possible
+	    RemoveDirectoryTreeL(aFs, tmpName);
+	    CleanupStack::PopAndDestroy(&tmpName);
+	    }
+
 	CleanupStack::PopAndDestroy(&name);
 	}
 
--- a/ncdengine/debuglogger/group/catalogslogger.mmp	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/debuglogger/group/catalogslogger.mmp	Thu Jul 22 16:35:01 2010 +0100
@@ -58,11 +58,7 @@
 USERINCLUDE     ../inc ../obex/inc
 
 // System include paths
-#ifndef __SERIES60_30__
-APP_LAYER_SYSTEMINCLUDE
-#else
-SYSTEMINCLUDE     /epoc32/include
-#endif
+MW_LAYER_SYSTEMINCLUDE
 
 LIBRARY         euser.lib
 LIBRARY         apparc.lib
--- a/ncdengine/engine/accesspointmanager/src/catalogsaccesspointmanagerimpl.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/engine/accesspointmanager/src/catalogsaccesspointmanagerimpl.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -537,7 +537,7 @@
 TInt CCatalogsAccessPointManager::AccessPointIdL(
     const TDesC& aNameSpace,
     const MCatalogsAccessPointManager::TAction& aAction,
-    const TUid& /* aClientUid */,
+    const TUid& aClientUid,
     TUint32& aAccessPointId ) 
     {
     DLTRACEIN((_L("Namespace: %S, Action: %d, clientUid: %d"), &aNameSpace, aAction, aClientUid.iUid));
@@ -565,7 +565,7 @@
     const TDesC& aNameSpace,
     const TDesC& aCatalogId,
     const MCatalogsAccessPointManager::TAction& aAction,
-    const TUid& /* aClientUid */,
+    const TUid& aClientUid,
     TUint32& aAccessPointId) 
     {
     DLTRACEIN((_L("Namespace: %S, CatalogId: %S, Action: %d, clientUid: %d"), &aNameSpace, &aCatalogId, aAction, aClientUid.iUid));
@@ -592,7 +592,7 @@
 TInt CCatalogsAccessPointManager::AccessPointIdL(
     const CNcdNodeIdentifier& aNodeIdentifier,
     const MCatalogsAccessPointManager::TAction& aAction,
-    const TUid& /* aClientUid */,
+    const TUid& aClientUid,
     TUint32& aAccessPointId) 
     {
     DLTRACEIN((_L("Namespace: %S, NodeId: %S, Action: %d, clientUid: %d"),
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/engine/engine.pri	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,280 @@
+
+#
+# Copyright (c) 2010 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: 
+#
+
+
+# Input
+HEADERS +=./transport/inc/catalogshttpdownload.h \
+					./transport/inc/catalogshttpdownloadmanagerimpl.h \
+
+SOURCES += ./src/catalogsbasemessageimpl.cpp \
+./src/catalogsclientserverserver.cpp \
+./src/catalogsclientserverserversession.cpp \
+./src/catalogsincompletemessage.cpp \
+./src/catalogsserverengine.cpp \
+./src/catalogsutils.cpp \
+./src/catalogskeyvaluepair.cpp \
+./src/catalogscontextimpl.cpp \
+./src/catalogsbigdes.cpp \
+./src/catalogsinterfacebase.cpp \
+./src/catalogsinterfaceidentifier.cpp \
+./src/catalogsstringmanager.cpp \
+./src/catalogsshutdownoperation.cpp \
+./transport/src/catalogstransportimpl.cpp \
+./transport/src/catalogshttpconfigimpl.cpp \
+./transport/src/catalogshttpheadersimpl.cpp \
+./transport/src/catalogshttpsessionimpl.cpp \
+./transport/src/catalogshttpdownloadmanagerimpl.cpp \
+./transport/src/catalogshttpdownload.cpp \
+./transport/src/catalogshttptransaction.cpp \
+./transport/src/catalogshttptransactionmanagerimpl.cpp \
+./transport/src/catalogshttpstack.cpp \
+./transport/src/catalogshttpsessionmanagerimpl.cpp \
+./transport/src/catalogshttpconnectioncreator.cpp \
+./transport/src/catalogshttpconnectionmanager.cpp \
+./transport/src/catalogssmssessionimpl.cpp \
+./transport/src/catalogssmsoperationimpl.cpp \
+./transport/src/catalogssmssender.cpp \
+./transport/src/catalogssmsutils.cpp \
+./transport/src/catalogsnetworkmanager.cpp \
+./transport/src/catalogsconnectioneventsink.cpp \
+./transport/src/catalogshttprequestparser.cpp \
+./transport/src/catalogshttprequestadapter.cpp \
+./transport/src/catalogshttpresponsecomposer.cpp \
+./transport/src/catalogshttputils.cpp \
+./transport/src/catalogsconnection.cpp \
+./accesspointmanager/src/catalogsaccesspointmanagerimpl.cpp \
+./accesspointmanager/src/catalogsaccesspoint.cpp \
+./accesspointmanager/src/catalogsaccesspointsettings.cpp\
+./accesspointmanager/src/catalogsaccesspointmap.cpp \
+./accesspointmanager/src/catalogsclientaccesspointdata.cpp \
+./accesspointmanager/src/catalogsremoveaccesspointshutdownoperation.cpp \
+../provider/server/src/ncdcommunicable.cpp \
+../provider/server/src/ncdproviderimpl.cpp \
+../provider/server/src/ncdnodemanager.cpp \
+../provider/server/src/ncdnodedbmanager.cpp \
+../provider/server/src/ncdoperationmanager.cpp \
+../provider/server/src/ncdnodeimpl.cpp \
+../provider/server/src/ncdnodefolder.cpp \
+../provider/server/src/ncdparentoftransparentnode.cpp \
+../provider/server/src/ncdnodetransparentfolder.cpp \
+../provider/server/src/ncdnodeitem.cpp \
+../provider/server/src/ncdrootnode.cpp \
+../provider/server/src/ncdnodemetadataimpl.cpp \
+../provider/server/src/ncdnodeitemmetadata.cpp \
+../provider/server/src/ncdnodefoldermetadata.cpp \
+../provider/server/src/ncdnodedisclaimer.cpp \
+../provider/server/src/ncdnodeiconimpl.cpp \
+../provider/server/src/ncdnodescreenshotimpl.cpp \
+../provider/server/src/ncdnodeskinimpl.cpp \
+../provider/server/src/ncdnodelink.cpp \
+../provider/server/src/ncdnodeitemlink.cpp \
+../provider/server/src/ncdnodefolderlink.cpp \
+../provider/server/src/ncdnodeidentifier.cpp \
+../provider/server/src/ncdnodeuserdataimpl.cpp \
+../provider/server/src/ncdnodedownloadimpl.cpp \
+../provider/server/src/ncdnodeupgradeimpl.cpp \
+../provider/server/src/ncdnodedependencyimpl.cpp \
+../provider/server/src/ncdnodecachecleaner.cpp \
+../provider/server/src/ncdnodecachecleanermanager.cpp \
+../provider/server/src/ncdnodefactory.cpp \
+../provider/server/src/ncdnodeidentifiereditor.cpp \
+../provider/server/src/ncddbmaxsizemap.cpp \
+../provider/server/src/ncdbaseoperation.cpp \
+../provider/server/src/ncdloadnodeoperationimpl.cpp \
+../provider/server/src/ncdloadrootnodeoperationimpl.cpp \
+../provider/server/src/ncdsendableprogress.cpp \
+../provider/server/src/ncdconfigurationmanagerimpl.cpp \
+../provider/server/src/ncdpurchaseoperationimpl.cpp \
+../provider/server/src/ncdpurchaseoptionimpl.cpp \
+../provider/server/src/ncdserversubscription.cpp \
+../provider/server/src/ncdserverpartofsubscription.cpp \
+../provider/server/src/ncdserverupgrade.cpp \
+../provider/server/src/ncdserversubscribablecontent.cpp \
+../provider/server/src/ncdnodeinstallimpl.cpp \
+../provider/server/src/ncdinstalloperationimpl.cpp \
+../provider/server/src/ncdnodecontentinfoimpl.cpp \
+../provider/server/src/ncdnodeuricontentimpl.cpp \
+../provider/server/src/ncdinstallinfo.cpp \
+../provider/server/src/ncdfileinfo.cpp \
+../provider/server/src/ncdsubscriptionmanagerimpl.cpp \
+../provider/server/src/ncdclientssubscriptions.cpp \
+../provider/server/src/ncdsubscriptiongroup.cpp \
+../provider/server/src/ncdsubscriptionimpl.cpp \
+../provider/server/src/ncdsubscriptionoperationimpl.cpp \
+../provider/server/src/ncdsubscriptionssourceidentifier.cpp \
+../provider/server/src/ncdrightsobjectoperationimpl.cpp \
+../provider/server/src/ncdnodepreviewimpl.cpp \
+../provider/server/src/ncdserveraddress.cpp \
+../provider/server/src/ncdsearchoperationimpl.cpp \
+../provider/server/src/ncdsearchnodeitem.cpp \
+../provider/server/src/ncdsearchnodefolder.cpp \
+../provider/server/src/ncdsearchnodebundle.cpp \
+../provider/server/src/ncdbundlefolder.cpp \
+../provider/server/src/ncdpreviewmanager.cpp \
+../provider/server/src/ncdchildentity.cpp \
+../provider/server/src/ncdchildentitymap.cpp \
+../provider/server/src/ncdsearchrootnode.cpp \
+../provider/server/src/ncdproviderutils.cpp \
+../provider/server/src/ncdserverdetailsimpl.cpp \
+../provider/server/src/ncdcontentdescriptor.cpp \
+../provider/server/src/ncdsubscriptiondatacompleter.cpp \
+../provider/server/src/ncdnodesupplier.cpp \
+../provider/server/src/ncdnodesupplierlink.cpp \
+../provider/server/src/ncddownloadinfo.cpp \
+../provider/server/src/ncdextendedinstallinfo.cpp \
+../provider/server/src/ncdloadbundlenodeoperationimpl.cpp \
+../provider/server/src/ncddependencyinfo.cpp \
+../provider/server/src/ncdfavoritemanagerimpl.cpp \
+../provider/server/src/ncdreportmanager.cpp \
+../provider/server/src/ncdreport.cpp \
+../provider/server/src/ncdreportdownload.cpp \
+../provider/server/src/ncdreportomadownload.cpp \
+../provider/server/src/ncdreportinstall.cpp \
+../provider/server/src/ncdnodeseeninfo.cpp \
+../provider/server/src/ncdnodeseenimpl.cpp \
+../provider/server/src/ncdnodeseenfolderimpl.cpp \
+../provider/server/src/ncdnodeidentifierutils.cpp \
+../provider/server/src/ncdpurchasehistoryutils.cpp \
+../provider/server/src/ncdcreateaccesspointoperationimpl.cpp \
+../provider/server/src/ncdsendhttprequestoperationimpl.cpp \
+../provider/server/src/ncdhttputils.cpp \
+../provider/server/src/ncdserverreportoperationimpl.cpp \
+../provider/server/src/ncdserverreportmanagerimpl.cpp \
+../provider/server/src/ncdprovidermanager.cpp \
+../provider/server/src/ncdgeneralmanager.cpp \
+../provider/server/src/ncddownloadoperationimpl.cpp \
+../provider/server/src/ncdbasedownloadhandler.cpp \
+../provider/server/src/ncdskindownloadhandler.cpp \
+../provider/server/src/ncdfilestoragefilehandler.cpp \
+../provider/server/src/ncddatabasefilehandler.cpp \
+../provider/server/src/ncdicondownloadhandler.cpp \
+../provider/server/src/ncdfiledownloadhandler.cpp \
+../provider/server/src/ncdpreviewdownloadhandler.cpp \
+../provider/server/src/ncdscreenshotdownloadhandler.cpp \
+../provider/server/src/ncdcontentdownloadoperation.cpp \
+../provider/server/src/ncddownloadsuboperation.cpp \
+../provider/server/src/ncddescriptordownloadsuboperation.cpp \
+../provider/server/src/ncdconfigurationparser.cpp \
+../provider/server/src/ncdengineconfigurationimpl.cpp \
+../provider/client/src/ncdqueryimpl.cpp \
+../provider/client/src/ncdqueryitemimpl.cpp \
+../provider/client/src/ncdquerytextitemimpl.cpp \
+../provider/client/src/ncdquerynumericitemimpl.cpp \
+../provider/client/src/ncdqueryselectionitemimpl.cpp \
+../provider/client/src/ncdquerypincodeitemimpl.cpp \
+../provider/client/src/ncdqueryoptionimpl.cpp \
+../provider/client/src/ncdexpirednode.cpp \
+../provider/client/src/ncdlocalizerutils.cpp \
+../provider/storage/src/ncdstoragemanagerimpl.cpp \
+../provider/storage/src/ncdstorageimpl.cpp \
+../provider/storage/src/ncdstorageclientimpl.cpp \
+../provider/storage/src/ncddbstoragemanager.cpp \
+../provider/storage/src/ncdstoragefiledataitem.cpp \
+../provider/storage/src/ncdfilestorageimpl.cpp \
+../provider/storage/src/ncdstoragebase.cpp \
+../provider/storage/src/ncddatabasestorageimpl.cpp \
+../provider/storage/src/ncdstoragedescriptordataitem.cpp \
+../provider/protocol/src/ncdparserimpl.cpp \
+../provider/protocol/src/ncdparserfactory.cpp \
+../provider/protocol/src/ncdprotocoldefaultobserverimpl.cpp \
+../provider/protocol/src/ncd_pp_iconimpl.cpp \
+../provider/protocol/src/ncd_pp_skinimpl.cpp \
+../provider/protocol/src/ncd_parser_pp_response.cpp \
+../provider/protocol/src/ncd_parser_pp_entityref.cpp \
+../provider/protocol/src/ncd_parser_pp_embeddeddata.cpp \
+../provider/protocol/src/ncd_parser_pp_datablocks.cpp \
+../provider/protocol/src/ncd_parser_pp_purchaseoption.cpp \
+../provider/protocol/src/ncd_parser_pp_dataentity.cpp \
+../provider/protocol/src/ncd_parser_pp_dataentitycontent.cpp \
+../provider/protocol/src/ncd_parser_pp_entitydependency.cpp \
+../provider/protocol/src/ncd_parser_pp_download.cpp \
+../provider/protocol/src/ncd_parser_pp_rights.cpp \
+../provider/protocol/src/ncd_parser_pp_information.cpp \
+../provider/protocol/src/ncd_parser_pp_messages.cpp \
+../provider/protocol/src/ncd_parser_pp_moreinfo.cpp \
+../provider/protocol/src/ncd_parser_pp_purchase.cpp \
+../provider/protocol/src/ncd_parser_pp_purchaseinformation.cpp \
+../provider/protocol/src/ncd_parser_pp_purchaseprocessed.cpp \
+../provider/protocol/src/ncd_parser_pp_purchaseentity.cpp \
+../provider/protocol/src/ncd_parser_pp_payment.cpp \
+../provider/protocol/src/ncd_parser_pp_expiredcacheddata.cpp \
+../provider/protocol/src/ncd_parser_pp_subscriptionreport.cpp \
+../provider/protocol/src/ncd_parser_pp_subscription.cpp \
+../provider/protocol/src/ncd_parser_pp_subscriptiondetails.cpp \
+../provider/protocol/src/ncd_parser_cp_actionrequest.cpp \
+../provider/protocol/src/ncd_parser_cp_response.cpp \
+../provider/protocol/src/ncd_parser_cp_capabilities.cpp \
+../provider/protocol/src/ncd_parser_cp_clientconfiguration.cpp \
+../provider/protocol/src/ncd_parser_cp_cookie.cpp \
+../provider/protocol/src/ncd_parser_cp_detail.cpp \
+../provider/protocol/src/ncd_parser_cp_details.cpp \
+../provider/protocol/src/ncd_parser_cp_error.cpp \
+../provider/protocol/src/ncd_parser_cp_query.cpp \
+../provider/protocol/src/ncd_parser_cp_queryelement.cpp \
+../provider/protocol/src/ncd_parser_cp_serverdetails.cpp \
+../provider/protocol/src/ncd_pp_folderrefimpl.cpp \
+../provider/protocol/src/ncd_pp_itemrefimpl.cpp \
+../provider/protocol/src/ncd_pp_datablockimpl.cpp \
+../provider/protocol/src/ncd_pp_dataentityimpl.cpp \
+../provider/protocol/src/ncd_pp_dataentitycontentimpl.cpp \
+../provider/protocol/src/ncd_pp_entitydependencyimpl.cpp \
+../provider/protocol/src/ncd_pp_embeddeddataimpl.cpp \
+../provider/protocol/src/ncd_pp_expiredcacheddataimpl.cpp \
+../provider/protocol/src/ncd_pp_informationimpl.cpp \
+../provider/protocol/src/ncd_pp_purchaseoptionimpl.cpp \
+../provider/protocol/src/ncd_pp_subscriptionimpl.cpp \
+../provider/protocol/src/ncd_pp_subscriptiondetailsimpl.cpp \
+../provider/protocol/src/ncd_pp_downloadimpl.cpp \
+../provider/protocol/src/ncd_pp_descriptorimpl.cpp \
+../provider/protocol/src/ncd_pp_rightsimpl.cpp \
+../provider/protocol/src/ncd_pp_purchaseimpl.cpp \
+../provider/protocol/src/ncd_pp_purchaseinformationimpl.cpp \
+../provider/protocol/src/ncd_pp_purchaseprocessedimpl.cpp \
+../provider/protocol/src/ncd_pp_purchaseentityimpl.cpp \
+../provider/protocol/src/ncd_pp_paymentimpl.cpp \
+../provider/protocol/src/ncd_pp_smsdetailsimpl.cpp \
+../provider/protocol/src/ncd_cp_actionrequestimpl.cpp \
+../provider/protocol/src/ncd_cp_clientconfigurationimpl.cpp \
+../provider/protocol/src/ncd_cp_cookieimpl.cpp \
+../provider/protocol/src/ncd_cp_detailimpl.cpp \
+../provider/protocol/src/ncd_cp_errorimpl.cpp \
+../provider/protocol/src/ncd_pp_errorimpl.cpp \
+../provider/protocol/src/ncd_cp_queryimpl.cpp \
+../provider/protocol/src/ncd_cp_queryelementimpl.cpp \
+../provider/protocol/src/ncd_cp_queryoptionimpl.cpp \
+../provider/protocol/src/ncd_cp_queryresponseimpl.cpp \
+../provider/protocol/src/ncd_cp_serverdetailsimpl.cpp \
+../provider/protocol/src/ncdsubparser.cpp \ 
+../provider/protocol/src/ncdtoplevelparser.cpp \
+../provider/protocol/src/ncdunknownparser.cpp \
+../provider/protocol/src/ncdprotocolutils.cpp \
+../provider/protocol/src/ncdparserobserverbundleimpl.cpp \
+../provider/protocol/src/ncdprotocolimpl.cpp \
+../provider/protocol/src/ncdsessionhandler.cpp \
+../provider/protocol/src/ncdstring.cpp \
+../provider/protocol/src/ncdrequestgenerator.cpp \
+../provider/protocol/src/ncdrequestbase.cpp \
+../provider/protocol/src/ncdrequestbrowsesearch.cpp \
+../provider/protocol/src/ncdrequestconfiguration.cpp \
+../provider/protocol/src/ncdrequestconfigurationdata.cpp \
+../provider/protocol/src/ncdrequestpurchase.cpp \
+../provider/protocol/src/ncdrequestmanagesubscriptions.cpp \
+../provider/protocol/src/ncdrequestinstallation.cpp \
+../provider/purchasehistory/src/ncdpurchasehistorydbimpl.cpp \
+../provider/src/ncdkeyvaluemap.cpp \
+../provider/src/ncdpurchasedetails.cpp \
+../provider/src/ncddelay.cpp
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/engine/engine.pro	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,58 @@
+
+#
+# Copyright (c) 2010 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 ( engine.pri )
+
+IncludeBlock = \
+	"$${LITERAL_HASH}include <data_caging_paths.hrh>" \
+	"$${LITERAL_HASH}include <platform_paths.hrh>"  \
+	"$${LITERAL_HASH}include <../inc/catalogsuids.h>" \
+	"$${LITERAL_HASH}include <./inc/build_config.mmpi>" 
+
+
+TEMPLATE = app
+TARGET = ncdserver_20019119
+CONFIG += qt
+ 
+symbian: { 
+	TARGET.CAPABILITY = CAP_APPLICATION 
+	TARGET.VID = VID_DEFAULT
+	TARGET.UID3 = 0x20019119
+	TARGET.EPOCALLOWDLLDATA = 1
+	INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE
+	INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+	INCLUDEPATH +=   ../provider/inc 
+	INCLUDEPATH +=   ../provider/server/inc 
+	INCLUDEPATH +=   ../provider/client/inc
+	INCLUDEPATH +=   ../provider/storage/inc
+	INCLUDEPATH +=   ../provider/protocol/inc
+	INCLUDEPATH +=   ../provider/deviceinteraction/inc
+	INCLUDEPATH +=   ../provider/purchasehistory/inc
+	
+	INCLUDEPATH +=   ../inc
+	INCLUDEPATH +=   ../engine/inc
+	INCLUDEPATH +=   ../engine/transport/inc
+	INCLUDEPATH +=   ../engine/accesspointmanager/inc
+	INCLUDEPATH += /epoc32/include/platform/mw/cwrt
+	INCLUDEPATH += /epoc32/include/ecom
+
+	LIBS += -lcommonui -lWrtDownloadMgr -lapmime -lcmmanager -lecom -lapengine -lmsgs -lsmcm -lgsmu -linetprotutil 
+	LIBS += -lhttpfiltercommon -lecom -lhttp -lesock -lcommdb -lsysutil -lhash -lestlib -lestor -lbafl -lplatformenv
+	LIBS += -lXmlEngineUtils  -lXmlEngineDOM -lXmlEngine -lXmlInterface -lxmlframework  -lcharconv -ledbms -lefsrv
+  LIBS += -lncdutils_20019119 -lncddevicemgmt_20019119
+}
--- a/ncdengine/engine/group/bld.inf	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/engine/group/bld.inf	Thu Jul 22 16:35:01 2010 +0100
@@ -20,7 +20,7 @@
 catalogsdebug.mmp
 ncdutils.mmp
 ncddevicemgmt.mmp
-catalogsserver.mmp
+//catalogsserver.mmp
 catalogsengine.mmp
 catalogsproxy.mmp
 catalogsundertaker.mmp
--- a/ncdengine/engine/group/catalogsdebug.mmp	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/engine/group/catalogsdebug.mmp	Thu Jul 22 16:35:01 2010 +0100
@@ -55,11 +55,7 @@
 #endif
 
 // System include paths
-#ifndef __SERIES60_30__
 MW_LAYER_SYSTEMINCLUDE
-#else
-SYSTEMINCLUDE /Epoc32/include
-#endif
 
 LIBRARY euser.lib flogger.lib hal.lib
 
--- a/ncdengine/engine/group/catalogsengine.mmp	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/engine/group/catalogsengine.mmp	Thu Jul 22 16:35:01 2010 +0100
@@ -48,12 +48,7 @@
 USERINCLUDE   ../../engine/inc
 
 // System include paths
-#ifndef __SERIES60_30__
 MW_LAYER_SYSTEMINCLUDE
-#else
-SYSTEMINCLUDE /Epoc32/include
-#endif
-
 
 LIBRARY euser.lib flogger.lib ecom.lib estor.lib
 
--- a/ncdengine/engine/group/catalogsproxy.mmp	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/engine/group/catalogsproxy.mmp	Thu Jul 22 16:35:01 2010 +0100
@@ -169,11 +169,7 @@
 USERINCLUDE   ../../provider/deviceinteraction/inc
 
 // System include paths
-#ifndef __SERIES60_30__
 MW_LAYER_SYSTEMINCLUDE
-#else
-SYSTEMINCLUDE /epoc32/include
-#endif
 
 SYSTEMINCLUDE /epoc32/include/libc
 
--- a/ncdengine/engine/group/catalogsserver.mmp	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/engine/group/catalogsserver.mmp	Thu Jul 22 16:35:01 2010 +0100
@@ -376,11 +376,7 @@
 
 
 // System include paths
-#ifndef __SERIES60_30__
 APP_LAYER_SYSTEMINCLUDE
-#else
-SYSTEMINCLUDE   /epoc32/include
-#endif
 
 SYSTEMINCLUDE   /epoc32/include/libc
 SYSTEMINCLUDE   /epoc32/include/ecom
--- a/ncdengine/engine/group/catalogsundertaker.mmp	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/engine/group/catalogsundertaker.mmp	Thu Jul 22 16:35:01 2010 +0100
@@ -48,12 +48,7 @@
 USERINCLUDE   ../../engine/inc
 
 // System include paths
-#ifndef __SERIES60_30__
 MW_LAYER_SYSTEMINCLUDE
-#else
-SYSTEMINCLUDE   /epoc32/include
-#endif
-
 
 LIBRARY         euser.lib flogger.lib
 
--- a/ncdengine/engine/group/ncddevicemgmt.mmp	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/engine/group/ncddevicemgmt.mmp	Thu Jul 22 16:35:01 2010 +0100
@@ -60,12 +60,7 @@
 USERINCLUDE   ../../provider/deviceinteraction/inc
 
 // System include paths
-#ifndef __SERIES60_30__
 MW_LAYER_SYSTEMINCLUDE
-#else
-SYSTEMINCLUDE /Epoc32/include
-#endif
-
 
 LIBRARY euser.lib estor.lib 
 LIBRARY bafl.lib charconv.lib efsrv.lib  // needed for ARMV5 building
@@ -91,8 +86,10 @@
 LIBRARY         avkon.lib
 LIBRARY         etel3rdparty.lib 
 LIBRARY         apgrfx.lib
-LIBRARY         swinstcli.lib           // Silent install
-LIBRARY         widgetregistryclient.lib // Widget Registry
+//LIBRARY         swinstcli.lib           // Silent install
+LIBRARY         sif.lib // SIF installer
+LIBRARY         scrclient.lib  //Registry client
+//LIBRARY         widgetregistryclient.lib // Widget Registry
 
 // HLa - temporary java remove
 //#if defined( __SERIES60_30__ ) || defined( __SERIES60_31__ ) || defined( __S60_32__ )
--- a/ncdengine/engine/group/ncdutils.mmp	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/engine/group/ncdutils.mmp	Thu Jul 22 16:35:01 2010 +0100
@@ -61,12 +61,7 @@
 USERINCLUDE   ../../provider/server/inc
 
 // System include paths
-#ifndef __SERIES60_30__
 MW_LAYER_SYSTEMINCLUDE
-#else
-SYSTEMINCLUDE /Epoc32/include
-#endif
-
 
 LIBRARY euser.lib estor.lib 
 LIBRARY bafl.lib charconv.lib efsrv.lib  // needed for ARMV5 building
--- a/ncdengine/engine/transport/inc/catalogshttpdownload.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/engine/transport/inc/catalogshttpdownload.h	Thu Jul 22 16:35:01 2010 +0100
@@ -20,7 +20,8 @@
 #define C_CATALOGSHTTPDOWNLOAD_H
 
 #include <DownloadMgrClient.h>
-
+#include <download.h>
+#include <downloadevent.h>
 #include <s32file.h>
 
 #include "catalogshttpoperation.h"
@@ -33,7 +34,8 @@
 class CCatalogsHttpHeaders;
 class CCatalogsKeyValuePair;
 class CCatalogsHttpDownloadManager;
-
+class CCatalogsHttpQTDownload;
+using namespace WRT;
 /**
 * HTTP file download implementation
 *
@@ -77,7 +79,7 @@
     */
     static CCatalogsHttpDownload* NewLC( 
         CCatalogsHttpDownloadManager& aOwner, 
-        RHttpDownload* aDownload,
+        Download* aDownload,
         const CCatalogsHttpConfig& aConfig );
 
 
@@ -238,7 +240,8 @@
      */
     TInt StatusCode() const;        
     
-    
+    TDownloadDeleteState GetStatusState();
+    Download* GetDownload();
     /**
      * Not supported
      * @see MCatalogsHttpOperation::StatusText()
@@ -282,7 +285,9 @@
         
     TBool HandleHttpError( MCatalogsHttpOperation& aOperation, 
         TCatalogsHttpError aError );
-            
+
+     void HandledownloadEventL(DownloadEvent& aEvent);   
+              
 public:     
 
     /**
@@ -321,7 +326,7 @@
     */
     CCatalogsHttpDownload( 
         CCatalogsHttpDownloadManager& aOwner, 
-        RHttpDownload* aDownload );
+        Download* aDownload );
     
     /**
     * 2nd phase constructor
@@ -509,13 +514,14 @@
 
     CCatalogsHttpDownloadManager& iOwner;
     TCatalogsTransportOperationId iId;  // Operation id
-    RHttpDownload* iDownload;           // Platform download
+    Download* iDownload;           // Platform download
     CCatalogsHttpConfig* iConfig;       // Configuration
     MCatalogsHttpObserver* iObserver;   // Observer        
     TCatalogsHttpEvent iState;          // State of the download
     HBufC8* iUri;                       // Current URI
     HBufC8* iEncodedUri;                // Current URI as encoded
     CCatalogsHttpHeaders* iResponseHeaders; // Headers from HTTP response
+    CCatalogsHttpQTDownload* iQTDownload;
     
     // added request headers not supported by DL man
     HBufC8* iAddedRequestHeaders;       
@@ -555,7 +561,7 @@
     // For managing async pause with dlmgr.
     TBool iPausePending;
     TBool iQueuedResume;
-    
+    TDownloadDeleteState iStatus;
 protected:
 
     // Grant access to UpdateContentType
@@ -563,4 +569,18 @@
     
     };
 
+class  CCatalogsHttpQTDownload: public QObject
+	{
+		 Q_OBJECT
+		 	public:
+		 		CCatalogsHttpQTDownload(CCatalogsHttpDownload* aHttpDownload,Download* aDownload);
+	    public slots:
+    	void downloadEvent(WRT::DownloadEvent*);
+    	void downloadError(WRT::Error);
+	    public:
+	    	CCatalogsHttpDownload* iCatalogsHttpDownload;
+	    	Download* iDownload;           // Platform download
+	};
+	
+	
 #endif // C_CATALOGSHTTPDOWNLOAD_H
--- a/ncdengine/engine/transport/inc/catalogshttpdownloadmanagerimpl.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/engine/transport/inc/catalogshttpdownloadmanagerimpl.h	Thu Jul 22 16:35:01 2010 +0100
@@ -24,9 +24,12 @@
 #include "catalogstransportoperationid.h"
 #include "catalogshttpsession.h"    // RCatalogsHttpOperationArray
 #include "catalogshttpsessionmanager.h"
+
 #include "catalogsconnectionmethod.h"
 #include "catalogsaccesspointobserver.h"
-
+#include <download.h>
+#include <downloadmanager.h>
+#include <QObject>
 class MCatalogsHttpConfig;
 class CCatalogsHttpConfig;
 class CCatalogsHttpDownload;
@@ -38,16 +41,22 @@
 class CCatalogsHttpSession;
 class CCatalogsConnection;
 class CCatalogsNetworkManager;
+class CCatalogsHttpQTDownloadManager;
+using namespace WRT;
+
+const TInt KNCDEngineAppID = 0X2002E685;
+
 
 /**
  * HTTP file download manager
  *
  */
 class CCatalogsHttpDownloadManager :       
+
     public CActive, 
-    public MHttpDownloadMgrObserver,
     public MCatalogsAccessPointObserver  
     {
+  
     public: // Constructors and destructor
     
         /**
@@ -69,7 +78,7 @@
         * Destructor
         */
         virtual ~CCatalogsHttpDownloadManager();
-        
+         
     public: // New methods
     
 	    /**
@@ -159,7 +168,7 @@
 
         void AddRef();
 
-
+		DownloadManager* GetDownloadManager();
         TInt Release();    
         
         void SetConnectionMethodL( 
@@ -202,15 +211,9 @@
         
         TInt NewDownloadId();
         
-        RHttpDownload& CreatePlatformDownloadL( const TDesC8& aUrl );
-    
-    public: // From MHttpDownloadMngrObserver
-     
-        /**
-        * Handles events from Download manager 
-        */
-        virtual void HandleDMgrEventL( RHttpDownload& aDownload,
-			THttpDownloadEvent aEvent );    
+       WRT::Download& CreatePlatformDownloadL( const TDesC8& aUrl );
+      void downloadMgrEventRecieved(WRT::DownloadEvent* dlmEvent);
+
 
 
     public: // from MCatalogsAccessPointObserver
@@ -316,8 +319,7 @@
          * Deletes downloads that have not been paused by the user
          */
         void DeleteHangingDownloads();
-        
-        
+
     private:
     
         MCatalogsHttpSessionManager& iManager;
@@ -326,8 +328,9 @@
         CCatalogsHttpConnectionManager& iConnectionManager;
         CCatalogsNetworkManager* iNetworkManager; // Not owned
         TInt32 iSessionId;
-        RHttpDownloadMgr iDmgr;
-        
+        DownloadManager *iDmgr;
+        CCatalogsHttpQTDownloadManager* iQTmgr;
+        WRT::Download* iDownload;           // Platform download
         // All downloads except those that are in Restored
         RCatalogsHttpOperationArray iDownloads;
         RCatalogsHttpOperationArray iRestoredDownloads;
@@ -344,4 +347,18 @@
         TInt iCurrentDlId; // id of the last created download
     };
 
-#endif // C_CATALOGSHTTPDOWNLOADMANAGER_H
+
+
+class  CCatalogsHttpQTDownloadManager: public QObject
+	{
+		 Q_OBJECT
+		 	public:
+		 		CCatalogsHttpQTDownloadManager(CCatalogsHttpDownloadManager* aDownloadManager,DownloadManager* aDmgr);
+	    public slots:
+    	void downloadMgrEventRecieved(WRT::DownloadEvent*);
+	    public:
+	    	CCatalogsHttpDownloadManager* iDownloadManager;
+	    	DownloadManager* iDmgr ;
+	};
+	
+	#endif // C_CATALOGSHTTPDOWNLOADMANAGER_H
\ No newline at end of file
--- a/ncdengine/engine/transport/src/catalogshttpdownload.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/engine/transport/src/catalogshttpdownload.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -23,7 +23,10 @@
 #include <DocumentHandler.h>
 #include <apmstd.h> // TDataType
 #include <escapeutils.h>
+#include <downloadmanager.h>
 
+
+#include <QtGlobal>
 #include "catalogshttpdownloadmanagerimpl.h"
 #include "catalogshttpobserver.h"
 #include "catalogshttpconfigimpl.h"
@@ -95,7 +98,7 @@
 //	
 CCatalogsHttpDownload* CCatalogsHttpDownload::NewLC( 
     CCatalogsHttpDownloadManager& aOwner, 
-    RHttpDownload* aDownload,
+    Download* aDownload,
     const CCatalogsHttpConfig& aConfig )
     {
     CCatalogsHttpDownload* self = new( ELeave ) CCatalogsHttpDownload( 
@@ -140,7 +143,7 @@
         else 
             {
             DLTRACE(( "Deleting download" ));
-            iDownload->Delete();                        
+             iOwner.GetDownloadManager()->removeOne(iDownload);                      
             
             if ( iState.iOperationState != ECatalogsHttpOpCompleted ) 
                 {
@@ -244,8 +247,8 @@
         {
         iObserver = NULL;
         TInt32 state = 0;
-        iDownload->GetIntAttribute( EDlAttrState, state );
-        
+
+         state = (Download::State)iDownload->attribute(State).toInt();
         if ( IsOneOf( 
                 static_cast<THttpDownloadState>( state ), 
                 EHttpDlCreated,
@@ -473,7 +476,14 @@
         TInt err = KErrNone;
         if ( iDownload ) 
             {
-            err = iDownload->Pause();
+					    try
+							{
+							iDownload->pause();
+							}
+			        catch(const std::exception& exception)
+			        	{
+							 err = qt_symbian_exception2Error(exception);
+			        	}
             }
         
         DLTRACE(("Pause err: %d", err ));
@@ -680,7 +690,8 @@
     // client-server communication with the Download manager server
     if ( iDownload && iContentSize <= 0 ) 
         {                
-        iDownload->GetIntAttribute( EDlAttrLength, iContentSize );    
+    
+        int  downloadbytes   =  iDownload->attribute(DownloadedSize).toInt();
         DLTRACE(("Content size from download: %i", iContentSize ));
         }
     return iContentSize;
@@ -706,7 +717,8 @@
     TBool pausable = ETrue;
     if ( iDownload ) 
         {        
-        iDownload->GetBoolAttribute( EDlAttrPausable, pausable );
+
+        pausable=iDownload->attribute(Pausable).toBool();
         }
     return pausable;
     }
@@ -839,7 +851,88 @@
     return KErrNone;
     }
 
+void CCatalogsHttpDownload::HandledownloadEventL(DownloadEvent& aEvent)
+{
+	
+	switch(aEvent.type())
+	{
+		
+		case DownloadEvent::Started:
+		
+			break;
+		
+		case DownloadEvent::Failed:
+			{
+		      TInt32 errorId = -1;
+            SetTransferring( EFalse );
+            errorId = iDownload->attribute(LastError).toInt();
+            if ( ( errorId == ConnectionFailed || 
+                   errorId == TransactionFailed )) 
+                {
+                DLTRACE(("Try to reconnect"));
+                iReconnectWhenFail = EFalse;
+                iDownload->start();
+                break;
+                }
+            else if ( errorId == ContentExpired ||
+                      errorId == PartialContentModified )
+                {
+                DLTRACE(("Content has changed, reset and restart"));
+                iReconnectWhenFail = EFalse;
+                iDownload->cancel();
+                iDownload->start();
+                break;
+                }
+ 
+			}
+			break;
+		
+		case DownloadEvent::Cancelled:
+		
+			break;
+		case DownloadEvent::ContentTypeChanged:
+			
+			break;
+		case DownloadEvent::HeadersReceived:
+			{
+					// Read the response headers from platform DL manager
+			UpdateResponseHeadersL();		
+			UpdateContentType();
+		  }
+			break;
+		
+		case DownloadEvent::NetworkLoss:
+			
+		  break;
+		  
+		case DownloadEvent::Completed:
+			  {            
+            // move/rename temp file as the target file
+            TRAPD( err, MoveFileL() );
+            
+            // DLMAIN-546, delete DL manager's download before starting
+            // the next one so that downloads don't jam, again
+            if ( iDownload ) 
+                {   
+                	iTransferredSize = iDownload->attribute(DownloadedSize).toInt();             
+         
+                    
+                DLTRACE(("Deleting download"));                
+                DeletePlatformDownload();                
+                }
 
+	     }
+			break;
+			
+		case DownloadEvent::InProgress:
+		
+		  break;
+		  
+	  default:
+            {
+            }		  
+	};
+}
 // ---------------------------------------------------------------------------
 // Handles events from the transaction
 // ---------------------------------------------------------------------------
@@ -1025,20 +1118,20 @@
     
 	TInt32 statusCode = -1;
 	
-	iDownload->GetIntAttribute( EDlAttrStatusCode, statusCode );
-	DLINFO( ("Response status: %i", statusCode ) );
+	 statusCode  = (Download::State)iDownload->attribute(WRT::State).toInt(); 
+	 DLINFO( ("Response status: %i", statusCode ) );
 
 #ifdef CATALOGS_BUILD_CONFIG_DEBUG    
     TInt32 errorId = 0;
+		errorId=iDownload->attribute(LastError).toInt();
 
-	iDownload->GetIntAttribute( EDlAttrErrorId, errorId );
 	DLINFO( ("Error id: %i", errorId ) );
 	    
 #endif
 
     TInt32 globalErrorId = 0;    
-	iDownload->GetIntAttribute( 
-	    EDlAttrGlobalErrorId, globalErrorId );
+   globalErrorId= iDownload->attribute(LastError).toInt();
+
 	DLINFO( ("Global error id: %i", globalErrorId ) );
 	
 
@@ -1085,7 +1178,7 @@
                 {
                 DLTRACE(("Try to reconnect"));
                 iReconnectWhenFail = EFalse;
-                iDownload->Start();                
+                iDownload->start();                
                 break;
                 }
             
@@ -1143,9 +1236,9 @@
             // DLMAIN-546, delete DL manager's download before starting
             // the next one so that downloads don't jam, again
             if ( iDownload ) 
-                {                
-                iDownload->GetIntAttribute( 
-                    EDlAttrDownloadedSize, iTransferredSize );   
+                {   
+                	iTransferredSize = iDownload->attribute(DownloadedSize).toInt();             
+         
                     
                 DLTRACE(("Deleting download"));                
                 DeletePlatformDownload();                
@@ -1179,7 +1272,8 @@
             DLTRACE(( "Download failed" ));
             TInt32 errorId = -1;
             SetTransferring( EFalse );
-        	iDownload->GetIntAttribute( EDlAttrErrorId, errorId );
+            errorId = iDownload->attribute(LastError).toInt();
+        
         	DLINFO( ("Error id: %i", errorId ) );
 
         	DLINFO( ("Global error id: %i", globalErrorId ) );
@@ -1190,7 +1284,7 @@
                 {
                 DLTRACE(("Try to reconnect"));
                 iReconnectWhenFail = EFalse;
-                iDownload->Start();
+                iDownload->start();
                 break;
                 }
             else if ( errorId == EContentExpired ||
@@ -1198,8 +1292,8 @@
                 {
                 DLTRACE(("Content has changed, reset and restart"));
                 iReconnectWhenFail = EFalse;
-                iDownload->Reset();
-                iDownload->Start();
+                iDownload->cancel();
+                iDownload->start();
                 break;
                 }
             
@@ -1388,8 +1482,7 @@
 		    if ( !iPaused ) 
 		        {		  
                 TInt32 globalErrorId = 0;
-            	iDownload->GetIntAttribute( 
-            	    EDlAttrGlobalErrorId, globalErrorId );
+            	    globalErrorId = iDownload->attribute(LastError).toInt();
             	DLINFO( ("Global error id: %i", globalErrorId ) );
 
                 if ( globalErrorId == KErrCancel ) 
@@ -1495,7 +1588,8 @@
 		    iReconnectCount = KReconnectAttempts;
 
 		    TInt32 size = 0;
-	        iDownload->GetIntAttribute( EDlAttrDownloadedSize, size );   
+		     size = iDownload->attribute(DownloadedSize).toInt();
+
 	        DLTRACE(("Transferred size from download: %i", size));
 
 	        if ( size != iTransferredSize ) 
@@ -1636,7 +1730,7 @@
 //	
 CCatalogsHttpDownload::CCatalogsHttpDownload( 
     CCatalogsHttpDownloadManager& aOwner, 
-    RHttpDownload* aDownload ) :
+    Download* aDownload ) :
     iOwner( aOwner ), 
     iDownload( aDownload ), 
     iState( ECatalogsHttpOpCreated, ECatalogsHttpNone ),
@@ -1659,7 +1753,8 @@
         {        
         // id part will be updated from disk
         iId = TCatalogsTransportOperationId( iOwner.SessionId(), KErrNotFound );
-
+				iQTDownload = new CCatalogsHttpQTDownload(this,iDownload);
+				 
         UpdateSecondaryIdL();
         
         User::LeaveIfError( SetDeleteState( EDownloadCanBeDeleted ) );
@@ -1700,8 +1795,11 @@
         {
         // Download always exists when this is called so no need to check
         DLTRACE(("Updating the content type"));
-        iDownload->GetStringAttribute( EDlAttrContentType,
-            iContentType );
+        QString contentType;
+        contentType= iDownload->attribute(WRT::ContentType).toString();
+        	TBuf<KMaxContentTypeLength>  ContentType(contentType.utf16());
+        	iContentType.Copy(ContentType);
+   
         }
     DLTRACEOUT(("Content-type: %S", &iContentType ));
     }
@@ -1821,9 +1919,16 @@
     RBuf8 buf;
     CleanupClosePushL( buf );
     buf.CreateL( KMaxUrlLength );
-    
-    User::LeaveIfError( iDownload->GetStringAttribute( EDlAttrCurrentUrl,
-        buf ) );
+    QString string;
+	try
+	{
+    string = iDownload->attribute(SourceUrl).toString();
+	}
+    catch(const std::exception& exception)
+    	{
+			 qt_symbian_exception2LeaveL(exception);
+    	}
+
     
     // DL manager has the encoded URI
     AssignDesL( iEncodedUri, buf );
@@ -1867,8 +1972,8 @@
             }
         else 
             {
-            User::LeaveIfError( iDownload->SetStringAttribute(
-                predefined, headers[i]->Value() ) );
+/*            User::LeaveIfError( iDownload->SetStringAttribute(
+                predefined, headers[i]->Value() ) );*/
             }
         }
 
@@ -1877,8 +1982,8 @@
     if ( iAddedRequestHeaders ) 
         {
         DLTRACE(( "added request headers: %S", iAddedRequestHeaders ));
-        User::LeaveIfError( iDownload->SetStringAttribute(
-            EDlAttrRequestHeaderAddon, *iAddedRequestHeaders ) );
+     /*   User::LeaveIfError( iDownload->SetStringAttribute(
+            EDlAttrRequestHeaderAddon, *iAddedRequestHeaders ) );*/
         delete iAddedRequestHeaders;
         iAddedRequestHeaders = NULL;
         }    
@@ -2254,10 +2359,17 @@
             InitializeDownloadL();
             }
         });
-    
+   
     if ( err == KErrNone ) 
         {
-        err = iDownload->Start();
+						 try
+							{
+							iDownload->start();
+							}
+			        catch(const std::exception& exception)
+			        	{
+							 qt_symbian_exception2LeaveL(exception);
+			        	}
         }
     return err;
     }
@@ -2471,13 +2583,17 @@
     TInt err = KErrNone;
     if ( iDownload ) 
         {    
-        err = iDownload->SetIntAttribute( EDlAttrUserData, aStatus );
+
+        iStatus = aStatus;
         }
     
     return err;
     }
 
-
+CCatalogsHttpDownload::TDownloadDeleteState CCatalogsHttpDownload::GetStatusState()
+	{
+		return iStatus;
+	}
 // ---------------------------------------------------------------------------
 // Gets delete status and download id from the platform download
 // ---------------------------------------------------------------------------
@@ -2491,7 +2607,8 @@
     TInt err = KErrNotReady;
     if ( iDownload ) 
         {
-        err = iDownload->GetIntAttribute( EDlAttrUserData, data );
+
+        err = iStatus;
         DLTRACE(("Data: %d", data));
         aStatus = static_cast<TDownloadDeleteState>( data );
         }
@@ -2572,8 +2689,14 @@
                 
         // Check if the download has been set progressive
         TBool progressive = EFalse;
-        User::LeaveIfError( iDownload->GetBoolAttribute( 
-            EDlAttrProgressive, progressive ) );
+		try
+		{
+		         progressive =iDownload->attribute(Progressive).toBool(); 
+		}
+        catch(const std::exception& exception)
+        	{
+				 qt_symbian_exception2LeaveL(exception);
+        	}  
 
         
         // We want to have progressive downloads because then DL manager uses
@@ -2591,18 +2714,30 @@
              !iFileIsSet ) 
             {
             DLTRACE(("Setting download as progressive"));
-            User::LeaveIfError( iDownload->SetBoolAttribute( 
-                EDlAttrProgressive, ETrue ) );
-            }
+						try
+						{
+						   iDownload->setAttribute(Progressive,ETrue);
+						}
+						catch(const std::exception& exception)
+						{
+							qt_symbian_exception2LeaveL(exception);
+						}  
+						}
         
         // Doesn't pause the download after content type has been received
-        User::LeaveIfError( iDownload->SetBoolAttribute( 
-            EDlAttrNoContentTypeCheck, ETrue ) );
+					try
+					{
+						iDownload->setAttribute(Progressive,ETrue);
+					}
+					catch(const std::exception& exception)
+					{
+						qt_symbian_exception2LeaveL(exception);
+					}  
 
         if ( !iFileIsSet )
             {
             DLTRACE(("Setting filehandle to download"));
-            User::LeaveIfError( iDownload->SetFileHandleAttribute( file ) );
+           // User::LeaveIfError( iDownload->SetFileHandleAttribute( file ) );
             iFileIsSet = ETrue;                        
             }
 
@@ -2610,7 +2745,10 @@
         }        
     }
 
-
+Download* CCatalogsHttpDownload::GetDownload()
+{
+	return iDownload;
+}
 // ---------------------------------------------------------------------------
 // Delete platform download and reset secondary id
 // ---------------------------------------------------------------------------
@@ -2619,7 +2757,7 @@
     {
     if ( iDownload )
         {
-        iDownload->Delete();
+        iOwner.GetDownloadManager()->removeOne(iDownload);
         iDownload = NULL;
         iId.SetSecondaryId( KErrNotFound );
         }
@@ -2633,8 +2771,7 @@
 void CCatalogsHttpDownload::UpdateSecondaryIdL()
     {
     TInt32 secondaryId = KErrNotFound;
-    User::LeaveIfError( 
-        iDownload->GetIntAttribute( EDlAttrId, secondaryId ) );
+    secondaryId = iDownload->id();
     iId.SetSecondaryId( secondaryId );    
     }
 
@@ -2675,3 +2812,19 @@
        aName.Append( aExt );
        }
     }
+    
+CCatalogsHttpQTDownload::CCatalogsHttpQTDownload(CCatalogsHttpDownload* aHttpDownload,Download* aDownload)
+	{
+		iCatalogsHttpDownload = aHttpDownload;
+		iDownload = aDownload;
+		connect(iDownload, SIGNAL(downloadEvent(DownloadManagerEvent*)), this,SLOT(downloadEvent(DownloadEvent*)));
+	}
+	
+void CCatalogsHttpQTDownload::downloadEvent(WRT::DownloadEvent* aEvent)
+	{
+		iCatalogsHttpDownload->HandledownloadEventL(*aEvent);
+	}
+void CCatalogsHttpQTDownload::downloadError(WRT::Error)
+	{
+		//iCatalogsHttpDownload->HandledownloadEventL(*aEvent);
+	}
\ No newline at end of file
--- a/ncdengine/engine/transport/src/catalogshttpdownloadmanagerimpl.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/engine/transport/src/catalogshttpdownloadmanagerimpl.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -32,7 +32,10 @@
 #include "catalogsconnection.h"
 
 #include "catalogsdebug.h"
-
+#include <QString.h>
+#include <QVector.h>
+#include <QList.h>
+#include <downloadevent.h>
 // ======== MEMBER FUNCTIONS ========
 
 // ---------------------------------------------------------------------------
@@ -59,6 +62,7 @@
             
     DLTRACE(("constructor ok"));
     CleanupStack::PushL( self );
+   
     self->ConstructL( aCleanup );
     CleanupStack::Pop( self );
     return self;
@@ -102,15 +106,17 @@
         iNetworkManager->RemoveObserver( *this );
         }
 
-    if ( iDmgr.Handle() ) 
+
+    if ( iDmgr ) 
         {
         DLTRACE(("We were connected to DL manager"));
         DeleteHangingDownloads();
         }
-        
+      
     // Close download manager session    
-    iDmgr.Close();
+    iDmgr->removeAll();
     
+   
     delete iDefaultConfig;
     iManager.Release();
     
@@ -124,24 +130,20 @@
     {
     DLTRACEIN((""));
     // This pauses all downloads in addition to disconnecting
-    iDmgr.Disconnect();
-    const CDownloadArray& downloads( iDmgr.CurrentDownloads() );
-
-    TInt count = downloads.Count();
-    while( count-- )
-        {                         
-        RHttpDownload& dl = *( downloads[ count ] );
-        TInt32 deleteStatus = 0;
-        dl.GetIntAttribute( EDlAttrUserData, deleteStatus );
-        DLTRACE(("DeleteStatus: %d", deleteStatus ));
-        
-        if ( deleteStatus == CCatalogsHttpDownload::EDownloadCanBeDeleted ) 
+ 	iDmgr->pauseAll(); 
+   TInt count = iDownloads.Count();
+    for ( TInt i = 0; i < count; ++i )
+        {
+         TInt32 deleteStatus = 0;
+         deleteStatus = dynamic_cast<CCatalogsHttpDownload*>(iDownloads[i])->GetStatusState();
+       
+         if ( deleteStatus == CCatalogsHttpDownload::EDownloadCanBeDeleted ) 
             {
             DLTRACE(("Deleting download"));
-            dl.Delete();
+            iDmgr->removeOne(dynamic_cast<CCatalogsHttpDownload*>(iDownloads[i])->GetDownload());
             }
+        }        
         
-        }
     }
 
 // ---------------------------------------------------------------------------
@@ -172,16 +174,18 @@
     {
     DLTRACEIN((""));
     // Create a new download
+   	QString Url =	QString::fromRawData( reinterpret_cast<const QChar*>(aUrl.Ptr()),aUrl.Length());
+    iDownload = iDmgr->createDownload( Url );
+    
     CCatalogsHttpDownload* dl = CCatalogsHttpDownload::NewLC( 
         *this,
         //download,
-        NULL,
+        iDownload,
         *iDefaultConfig );
     
     dl->SetUriL( aUrl );
     dl->SetFileServerSession( iFs );
-    
-    // If the given observer != NULL, set it as the observer for the download
+        // If the given observer != NULL, set it as the observer for the download
     if ( aObserver ) 
         {        
         dl->Config().SetObserver( aObserver );        
@@ -207,6 +211,7 @@
     TInt count = iDownloads.Count();
     for ( TInt i = 0; i < count; ++i )
         {
+        	
         if ( iDownloads[i]->OperationId() == aId ) 
             {
             return iDownloads[i];
@@ -396,12 +401,19 @@
     DLTRACEIN((""));
     if ( aMethod != iCurrentAp )
         {
+		try
+		{
         DLTRACE( ( "Set AP, type: %d, id: %u, apn: %d", 
             aMethod.iType, aMethod.iId, aMethod.iApnId ));
-        User::LeaveIfError( iDmgr.Disconnect() );    
-        User::LeaveIfError( iDmgr.SetIntAttribute( EDlMgrIap, aMethod.iApnId ) );
+		 iDmgr->pauseAll(); 
+		 
         iCurrentAp = aMethod;
         DLTRACE(("AP set"));
+		}
+		 catch(const std::exception& exception)
+		 {
+		 qt_symbian_exception2LeaveL(exception);
+		 }
         }    
     }
 
@@ -460,40 +472,23 @@
     {
     return iSessionId;
     }
-    
-    
+
 // ---------------------------------------------------------------------------
 // Handles download manager events
 // ---------------------------------------------------------------------------
-//
-void CCatalogsHttpDownloadManager::HandleDMgrEventL( RHttpDownload& aDownload,
-	THttpDownloadEvent aEvent )
-    {
-    DLTRACEIN(( "Dl state: %i, pr: %i, DL: %x", aEvent.iDownloadState, 
-        aEvent.iProgressState, &aDownload ));
-        
-    TDownloadEvent event( aDownload, aEvent );
+//    
+ void CCatalogsHttpDownloadManager::downloadMgrEventRecieved(WRT::DownloadEvent* dlmEvent)
+  {
+  	
+  	switch(dlmEvent ->type())
+		{
+ 
+    default:
+    	break;
+		};
 
-    if ( IsOneOf( aEvent.iDownloadState, EHttpDlDeleted, EHttpDlDeleting ) )
-        {
-        DLTRACEOUT(("Download was deleted"))
-        RemoveUnhandledEvents( event );
-        }
-    // Handle everything but Download name change events
-    else if ( aEvent.iProgressState != EHttpProgDlNameChanged )     
-        {        
-        DLTRACE(("Adding event to queue"));        
-        
-        if ( aEvent.iProgressState == EHttpProgResponseBodyReceived ) 
-            {
-            // Filter unhandled progress events from the queue
-            RemoveUnhandledProgressEvents( event );
-            }
-        
-        iEventQueue.AppendL( event );    
-        ContinueEventHandling();    
-        }
-    }
+  	
+  }  
 
 
 // ---------------------------------------------------------------------------
@@ -507,8 +502,19 @@
     DLTRACEIN((""));
     if ( aEvent == ECatalogsAccessPointClosed ) 
         {
+		try
+		{
         DLTRACE(("Disconnecting download manager"));
-        User::LeaveIfError( iDmgr.Disconnect() );
+
+		iDmgr->pauseAll();
+	}
+
+ 		catch(const std::exception& exception) 
+               { 
+               qt_symbian_exception2LeaveL(exception); 
+               } 
+            
+
         }
     }
 
@@ -556,6 +562,11 @@
     
     // shared so that RFiles can be given to Download manager
     User::LeaveIfError( iFs.ShareProtected() ); 
+   	
+   	QString DmgrUid(QString::number(KNCDEngineAppID));
+    iDmgr =  new DownloadManager(DmgrUid);
+    iDmgr->initialize();
+    iQTmgr = new CCatalogsHttpQTDownloadManager(this,iDmgr);
     
     TUid sessionId( TUid::Uid( iSessionId ) );
     if ( aCleanup ) 
@@ -581,7 +592,6 @@
     
     do    
         {
-        // TRAP( err, iDmgr.ConnectL( sessionId, *this, ETrue ) );
         if ( err != KErrNone ) 
             {
             DLERROR(("DL manager connection failed with err: %d, retry attempts left", 
@@ -607,13 +617,17 @@
     iNetworkManager = &CCatalogsHttpSessionManager::NetworkManagerL();
     iNetworkManager->AddObserverL( *this );    
     
-//    iDmgr.SetIntAttribute( EDlMgrExitAction, EExitPause );
     // Restore downloads from previous sessions
 //    RestoreDownloadsL();
+ 
     DLTRACEOUT((""));
+
     }
     
-
+DownloadManager* CCatalogsHttpDownloadManager::GetDownloadManager()
+{
+	return iDmgr;
+}
 // ---------------------------------------------------------------------------
 // Restore downloads from previous session
 // ---------------------------------------------------------------------------
@@ -621,17 +635,19 @@
 void CCatalogsHttpDownloadManager::RestoreDownloadsL()
     {
     DLTRACEIN((""));
-    const CDownloadArray& downloads = iDmgr.CurrentDownloads();    
     
     TBuf8<KMaxUrlLength> url;
-    TBuf<KMaxPath> filename;
+    
     
+    QList<WRT::Download*> downloads = iDmgr->currentDownloads();
+
+
     // Go through downloads, create wrappers for DL manager downloads and
     // add them to HttpDownloadManager
-    for ( TInt i = 0; i < downloads.Count(); ++i ) 
+    for ( TInt i = 0; i < downloads.size(); ++i ) 
         {                 
         DLTRACE(( "Restoring dl %i", i ));
-        RHttpDownload* dlPtr = downloads[i];
+        WRT::Download *dlPtr = downloads[i];
 
         // Create the download and push it to cleanup stack
         CCatalogsHttpDownload* dl = CCatalogsHttpDownload::NewLC( *this,
@@ -639,8 +655,9 @@
 
         // set file server session
         dl->SetFileServerSession( iFs );
-        
-        dlPtr->GetStringAttribute( EDlAttrDestFilename, filename );
+       
+         QString name   =  dlPtr->attribute(FileName).toString();
+         TBuf<KMaxPath> filename(name.utf16());
 
         // Separate the filename from the path
         TParsePtrC parser( filename );
@@ -683,7 +700,7 @@
     DASSERT( aDownload );
     
     TInt32 id = 0;
-    aDownload->GetIntAttribute( EDlAttrId, id );    
+    //aDownload->GetIntAttribute( EDlAttrId, id );    
             
     TInt count = aArray.Count();
     for ( TInt i = 0; i < count; ++i )
@@ -954,8 +971,23 @@
     }
 
 
-RHttpDownload& CCatalogsHttpDownloadManager::CreatePlatformDownloadL( 
+Download& CCatalogsHttpDownloadManager::CreatePlatformDownloadL( 
     const TDesC8& aUrl )
     {
-    return iDmgr.CreateDownloadL( aUrl );
+    
+   	QString myString=	QString::fromRawData( reinterpret_cast<const QChar*>(aUrl.Ptr()),aUrl.Length());
+
+    return *(iDmgr->createDownload( myString ));
     }
+    
+CCatalogsHttpQTDownloadManager::CCatalogsHttpQTDownloadManager(CCatalogsHttpDownloadManager* aDownloadManager,DownloadManager* aDmgr)
+	{
+		iDownloadManager = aDownloadManager;
+		iDmgr = aDmgr;
+		connect(iDmgr, SIGNAL(downloadManagerEvent(WRT::DownloadManagerEvent*)), this,SLOT(downloadMgrEventRecieved(WRT::DownloadEvent*)));
+	}
+	
+void CCatalogsHttpQTDownloadManager::downloadMgrEventRecieved(WRT::DownloadEvent* aEvent)
+	{
+		iDownloadManager->downloadMgrEventRecieved(aEvent);
+	}
\ No newline at end of file
--- a/ncdengine/inc/ncdnodeinstall.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/inc/ncdnodeinstall.h	Thu Jul 22 16:35:01 2010 +0100
@@ -32,18 +32,12 @@
 class MDesCArray;
 class MNcdInstalledContent;
 
-// Forward declaration for SwiUI::TInstallOptions
-// SwiUI namespace contains install options 
-// that are used for the silent install.
-// #include <SWInstDefs.h> 
-// is required when SwiUI::TInstallOptions is created 
-// in the implementation code.
-namespace SwiUI
+// Forward declaration for Usif::TInstallOptions
+namespace Usif
     {
-    class TInstallOptions;    
+    class COpaqueNamedParams;    
     }
 
-
 /**
  *  Provides functions that can be used to install the node object.
  *  Before installing, the data should have been downloaded using
@@ -83,7 +77,6 @@
      */
     virtual MNcdInstallOperation* InstallL( MNcdInstallOperationObserver& aObserver ) = 0;
 
-
     /**
      * Starts the silent installing operation of the node object.
      * Because installation is silent, normal installation query dialogs are not shown.
@@ -96,7 +89,7 @@
      * function of the operation should be called when operation is not needed anymore.
      * 
      * @note Requires TrustedUI capabilities
-     * @note Only SIS packages and Java archives are installed silently, other content
+     * @note Only SIS packages and Java archives and widgets are installed silently, other content
      * is installed exactly like with InstallL
      * 
      * @param aObserver Observer for the operation.
@@ -109,9 +102,9 @@
      * Leaves with KNcdErrorParallelOperationNotAllowed if a parallel client is running
      *  an operation for the same metadata. See MNcdOperation for full explanation.
      */
-    virtual MNcdInstallOperation* SilentInstallL( MNcdInstallOperationObserver& aObserver,
-                                                  const SwiUI::TInstallOptions& aInstallOptions ) = 0;
-
+    virtual MNcdInstallOperation* SilentInstallL( 
+                MNcdInstallOperationObserver& aObserver,
+                Usif::COpaqueNamedParams* aInstallOptions ) = 0;
 
     /**
      * Checks if the item content has already been installed and is currently present in the
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/ncdengine.pro	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,19 @@
+#
+# Copyright (c) 2010 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: 
+#
+
+TEMPLATE = subdirs
+
+SUBDIRS += engine/engine.pro 
--- a/ncdengine/provider/client/inc/ncdnodeinstallproxy.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/provider/client/inc/ncdnodeinstallproxy.h	Thu Jul 22 16:35:01 2010 +0100
@@ -125,14 +125,12 @@
      */ 
     MNcdInstallOperation* InstallL( MNcdInstallOperationObserver& aObserver );
 
-
     /**
      * @see MNcdNodeInstall::SilentInstallL()
      */ 
-    MNcdInstallOperation* SilentInstallL( MNcdInstallOperationObserver& aObserver,
-                                          const SwiUI::TInstallOptions& aInstallOptions );
-    
-
+    MNcdInstallOperation* SilentInstallL( 
+                MNcdInstallOperationObserver& aObserver,
+                Usif::COpaqueNamedParams* aInstallOptions );
     /**
      * @see MNcdNodeInstall::IsInstalledL()
      */ 
--- a/ncdengine/provider/client/inc/ncdoperationmanagerproxy.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/provider/client/inc/ncdoperationmanagerproxy.h	Thu Jul 22 16:35:01 2010 +0100
@@ -63,10 +63,10 @@
 
 
 // Forward declaration for silent install
-// SwiUI::TInstallOptions
-namespace SwiUI
+// Usif::TInstallOptions
+namespace Usif
     {
-    class TInstallOptions;    
+    class COpaqueNamedParams;    
     }
 
 /**
@@ -230,7 +230,7 @@
     virtual CNcdSilentInstallOperationProxy* CreateSilentInstallOperationL(
         CNcdNodeProxy& aNode, 
         MNcdInstallOperationObserver* aObserverconst,
-        const SwiUI::TInstallOptions& aInstallOptions );
+        Usif::COpaqueNamedParams* aInstallOptions );
     
     
     /**
--- a/ncdengine/provider/client/inc/ncdsilentinstalloperationproxy.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/provider/client/inc/ncdsilentinstalloperationproxy.h	Thu Jul 22 16:35:01 2010 +0100
@@ -22,7 +22,7 @@
 #include <e32cmn.h>
 
 // For silent install options and options package
-#include <SWInstDefs.h>
+#include <usif/sif/sifcommon.h>
 
 #include "ncdinstalloperationproxy.h"
 
@@ -51,7 +51,7 @@
                         CNcdNodeManagerProxy* aNodeManager,
                         MNcdInstallOperationObserver* aObserver,
                         MNcdInstallationService& aInstallationService,
-                        const SwiUI::TInstallOptions& aInstallOptions );
+                        Usif::COpaqueNamedParams* aInstallOptions );
 
 
 protected: // CActive
@@ -70,7 +70,7 @@
      * @see NewLC
      */
     CNcdSilentInstallOperationProxy( MNcdInstallationService& aInstallationService,
-                                     const SwiUI::TInstallOptions& aInstallOptions );
+                                     Usif::COpaqueNamedParams* aInstallOptions );
     
     virtual ~CNcdSilentInstallOperationProxy();
 
@@ -99,10 +99,10 @@
     virtual void UseInstallServiceL( const CNcdFileInfo& aFile );
     
     /**
-     * @return const SwiUI::TInstallOptionsPckg& Contains the install options 
+     * @return const Usif::COpaqueNamedParams* Contains the install options 
      * for silent install in a data buffer.
      */
-    const SwiUI::TInstallOptionsPckg& SilentInstallOptionsPackage() const;
+    const Usif::COpaqueNamedParams* SilentInstallOptions() const;
     
     
 private: // new methods
@@ -114,8 +114,9 @@
 
 private: // data
 
+    
     // This will contain the install options for silent install in a data buffer.
-    SwiUI::TInstallOptionsPckg iInstallOptionsPackage;
+    Usif::COpaqueNamedParams* iInstallOptions;
 
     };
 
--- a/ncdengine/provider/client/src/ncdnodeinstallproxy.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/provider/client/src/ncdnodeinstallproxy.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -202,14 +202,13 @@
     return op;
     }
 
-
 // ---------------------------------------------------------------------------
 // Creates an install operation
 // ---------------------------------------------------------------------------
 //
 MNcdInstallOperation* CNcdNodeInstallProxy::SilentInstallL( 
     MNcdInstallOperationObserver& aObserver,
-    const SwiUI::TInstallOptions& aInstallOptions )
+    Usif::COpaqueNamedParams* aInstallOptions )
     {
     DLTRACEIN((""));
 
@@ -219,9 +218,12 @@
     // observer.
     // Notice that TrustedUI capabilites are checked when silent install operation is
     // created in the server side.
+    
     CNcdInstallOperationProxy* op = 
         Metadata().Node().OperationManager().CreateSilentInstallOperationL(
         Metadata().Node(), this, aInstallOptions );
+    
+    
     iOperationObserver = &aObserver;
        
     DLTRACEOUT((""));    
--- a/ncdengine/provider/client/src/ncdoperationmanagerproxy.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/provider/client/src/ncdoperationmanagerproxy.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -442,7 +442,7 @@
 CNcdSilentInstallOperationProxy* CNcdOperationManagerProxy::CreateSilentInstallOperationL(
     CNcdNodeProxy& aNode,
     MNcdInstallOperationObserver* aObserver,
-    const SwiUI::TInstallOptions& aInstallOptions )
+    Usif::COpaqueNamedParams* aInstallOptions )
     {
    DLTRACEIN((""));
 
--- a/ncdengine/provider/client/src/ncdsilentinstalloperationproxy.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/provider/client/src/ncdsilentinstalloperationproxy.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -39,7 +39,7 @@
     CNcdNodeManagerProxy* aNodeManager,
     MNcdInstallOperationObserver* aObserver,
     MNcdInstallationService& aInstallationService,
-    const SwiUI::TInstallOptions& aInstallOptions )
+    Usif::COpaqueNamedParams* aInstallOptions )
     {
     CNcdSilentInstallOperationProxy* self =
         new( ELeave ) CNcdSilentInstallOperationProxy( aInstallationService, 
@@ -59,15 +59,14 @@
 //
 CNcdSilentInstallOperationProxy::CNcdSilentInstallOperationProxy( 
     MNcdInstallationService& aInstallationService,
-    const SwiUI::TInstallOptions& aInstallOptions )
+    /*const*/ Usif::COpaqueNamedParams* aInstallOptions )
 : CNcdInstallOperationProxy( aInstallationService )
     {
     // Copy all the install options into the buffer that will be used
     // when silent installation is delegated to the installer.
-    iInstallOptionsPackage = aInstallOptions;
+    iInstallOptions = aInstallOptions;
     }
 
-
 // ---------------------------------------------------------------------------
 // Destructor
 // ---------------------------------------------------------------------------
@@ -190,7 +189,7 @@
                 iFileHandle, 
                 aFile.MimeType(), 
                 aFile.Purpose(), 
-                SilentInstallOptionsPackage() );
+                SilentInstallOptions() ); 
             break;
             }
         
@@ -201,7 +200,7 @@
                 iFileHandle, 
                 aFile.MimeType(), 
                 aFile.Data(),
-                SilentInstallOptionsPackage() );             
+                SilentInstallOptions() );             
             break;
             }            
 
@@ -212,7 +211,7 @@
             {
             Installer().SilentInstallWidgetL(
                     iFileHandle, 
-                    SilentInstallOptionsPackage() );
+                    SilentInstallOptions() );
    
             break;
             }
@@ -227,9 +226,8 @@
     DLTRACEOUT((""));   
     }
 
-
-const SwiUI::TInstallOptionsPckg& CNcdSilentInstallOperationProxy::SilentInstallOptionsPackage() const
+const Usif::COpaqueNamedParams* CNcdSilentInstallOperationProxy::SilentInstallOptions() const
     {
     DLTRACEIN((""));
-    return iInstallOptionsPackage;
+    return iInstallOptions;
     }
--- a/ncdengine/provider/deviceinteraction/inc/ncddeviceserviceimpl.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/provider/deviceinteraction/inc/ncddeviceserviceimpl.h	Thu Jul 22 16:35:01 2010 +0100
@@ -218,10 +218,6 @@
      */
     TAknSkinSrvSkinPackageLocation SkinLocationFromPath( const TDesC& aPath );
     
-#ifdef GET_DEVICE_ID_FROM_USERAGENT    
-    HBufC8* UserAgentL() const;
-#endif    
-    
     void GetPhoneLC( RTelServer& aServer, RPhone& aPhone );
 
     void GetSubscriberId();
--- a/ncdengine/provider/deviceinteraction/inc/ncdinstallationservice.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/provider/deviceinteraction/inc/ncdinstallationservice.h	Thu Jul 22 16:35:01 2010 +0100
@@ -22,7 +22,8 @@
 // SwiUI namespace contains install options 
 // and install options package definitions
 // that are used for the silent install.
-#include <SWInstDefs.h>
+//#include <SWInstDefs.h>
+#include <usif/sif/sifcommon.h>
 
 #include "ncditempurpose.h"
 
@@ -124,7 +125,7 @@
     virtual void SilentInstallL( RFile& aFile,
                                  const TDesC& aMimeType,
                                  const TNcdItemPurpose& aPurpose ,
-                                 const SwiUI::TInstallOptionsPckg& aInstallOptionsPckg ) = 0;
+                                 const Usif::COpaqueNamedParams* aInstallOptionsPckg ) = 0;
 
 
     /**
@@ -134,13 +135,13 @@
     virtual void SilentInstallJavaL( RFile& aFile,
                                      const TDesC& aMimeType,
                                      const TDesC8& aDescriptorData,
-                                     const SwiUI::TInstallOptionsPckg& aInstallOptionsPckg ) = 0;
+                                     const Usif::COpaqueNamedParams* aInstallOptionsPckg ) = 0;
     
     /*
      * Use SWI API to install widget silently. 
      */     
     virtual void SilentInstallWidgetL(RFile& aFile,
-                                      const SwiUI::TInstallOptionsPckg& aInstallOptionsPckg ) = 0;
+                                      const Usif::COpaqueNamedParams* aInstallOptionsPckg ) = 0;
 
     /**
      * Cancels the silent installation if it is going on.
--- a/ncdengine/provider/deviceinteraction/inc/ncdinstallationserviceimpl.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/provider/deviceinteraction/inc/ncdinstallationserviceimpl.h	Thu Jul 22 16:35:01 2010 +0100
@@ -26,8 +26,8 @@
 #include <swi/sisregistryentry.h>
 #include <apgcli.h>
 #include <centralrepository.h>
-#include <SWInstApi.h>
-#include <WidgetRegistryClient.h>
+#include <usif/sif/sif.h>
+#include <usif/scr/scr.h>
 
 #include "ncdinstallationservice.h"
 #include "ncditempurpose.h"
@@ -36,25 +36,6 @@
 
 #include "ncdwidgetregistrydata.h"
 
-/**
- * New Java registry API was introduced in 3.2. We start using it 
- * from 5.0 onwards because it seems that some 3.2 devices don't support
- * it entirely
- */
- 
- /*  HLa - temporary java remove
-#if defined( __SERIES60_30__ ) || defined( __SERIES60_31__ ) || defined ( __S60_32__ )
-    #define USE_OLD_JAVA_API
-    class MJavaRegistrySuiteEntry;
-    class MJavaRegistry;
-#else
-    namespace Java
-        {
-        class CJavaRegistry;
-        }
-#endif
-*/
-
 class CDocumentHandler;
 
 class MNcdInstallationServiceObserver;
@@ -140,7 +121,7 @@
     void SilentInstallL( RFile& aFile,
                          const TDesC& aMimeType,
                          const TNcdItemPurpose& aPurpose,
-                         const SwiUI::TInstallOptionsPckg& aInstallOptionsPckg );
+                         const Usif::COpaqueNamedParams* aInstallOptionsPckg );
     
     /**
      * @see MNcdInstallationService::SilentInstallJavaL
@@ -148,13 +129,13 @@
     void SilentInstallJavaL( RFile& aFile,
                              const TDesC& aMimeType,
                              const TDesC8& aDescriptorData,
-                             const SwiUI::TInstallOptionsPckg& aInstallOptionsPckg );
+                             const Usif::COpaqueNamedParams* aInstallOptionsPckg );
     
     /**
      * @see MNcdInstallationService::SilentInstallWidgetJavaL
      */
     void SilentInstallWidgetL( RFile& aFile,
-                               const SwiUI::TInstallOptionsPckg& aInstallOptionsPckg );
+                               const Usif::COpaqueNamedParams* aInstallOptionsPckg );
     
     /**
      * @see MNcdInstallationService::MNcdCancelSilentInstall
@@ -312,7 +293,7 @@
     void InstallL( RFile& aFile,
                    const TDesC& aMimeType,
                    const TNcdItemPurpose& aPurpose,
-                   const SwiUI::TInstallOptionsPckg* aSilentInstallOptionsPckg );
+                   const Usif::COpaqueNamedParams* aSilentInstallOptions );
 
     /**
      * @see MNcdInstallationService::InstallJavaL
@@ -323,12 +304,12 @@
     void InstallJavaL( RFile& aFile,
                        const TDesC& aMimeType,
                        const TDesC8& aDescriptorData,
-                       const SwiUI::TInstallOptionsPckg* aSilentInstallOptionsPckg );
+                       const Usif::COpaqueNamedParams* aSilentInstallOptions );
 
     
     void InstallWidgetL( 
         RFile& aFile,
-        const SwiUI::TInstallOptionsPckg* aSilentInstallOptionsPckg );
+        const Usif::COpaqueNamedParams* aSilentInstallOptions );
         
 
     // Sets correct values for member variables after installation has finished
@@ -386,23 +367,6 @@
      */
     TBool IsRomApplication( const TUid& aUid ) const;
     
-    
-    /**
-     * Gets the UID of the latest installed midlet by using the 
-     * Java installer's P&S key
-     * 
-     * @param aJavaRegistry Java registry
-     * @return Midlet UID
-     */
-     
-     /* HLa - temporary java remove
-#ifdef USE_OLD_JAVA_API
-    TUid LatestMidletUidL( MJavaRegistry& aJavaRegistry ) const;
-#else    
-    TUid LatestMidletUidL( Java::CJavaRegistry& aJavaRegistry ) const;
-#endif
-    */
-    
     static TBool MatchJava( const TDesC& aMime );
     
     TUid InstalledMidletUidL();
@@ -459,11 +423,6 @@
     // When installing java with JAD, the JAD path is stored here
     HBufC* iJadFileName;
     
-#ifdef USE_OLD_JAVA_API    
-    // For comparing installed midlet uids to find out the uid for the newly 
-    // installed java app.
-    RArray<TUid> iMIDletUids;
-#endif
 
     // Theme handling
     // Server session
@@ -487,18 +446,18 @@
     
     CNcdActiveOperationObserver* iInstallStatusObserver;
 
-    SwiUI::RSWInstLauncher iInstaller;
-        
+    //SwiUI::RSWInstLauncher iInstaller;
+    Usif::RSoftwareInstall iInstaller;
+    Usif::COpaqueNamedParams* iArguments; 
+    Usif::COpaqueNamedParams* iResults;
+    
     // ROM application UIDS
     RArray<TUid> iRomUids; 
     
-    // needed for cancelling install correctly
-    SwiUI::TServerRequest iCancelCode;  
-    
+    //RWidgetRegistryClientSession iWidgetRegistry; 
+    Usif::RSoftwareComponentRegistry iScrSession;
     
-    RWidgetRegistryClientSession iWidgetRegistry;    
-    
-    RWidgetInfoArray iInstalledWidgets;    
+    //RWidgetInfoArray iInstalledWidgets;    
     RPointerArray<CExtendedWidgetInfo> iInstalledWidgetsInfos; 
     };
 
--- a/ncdengine/provider/deviceinteraction/inc/ncdsilentinstallactiveobserver.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/provider/deviceinteraction/inc/ncdsilentinstallactiveobserver.h	Thu Jul 22 16:35:01 2010 +0100
@@ -23,7 +23,9 @@
 #include <e32base.h>
 #include <f32file.h>
 // For silent install
-#include <SWInstApi.h> 
+#include <usif/sif/sif.h>
+
+
 
 class MNcdAsyncSilentInstallObserver;
 
@@ -68,20 +70,20 @@
      * Sets this object active for observing a silent install operation.
      * 
      * @param aFileName Installation file name.
-     * @param aSilentInstallOptionsPckg Silent installation options.
+     * @param aSilentInstallOptions Silent installation options.
      */
     void StartToObserveL( const TDesC& aFileName,
-                          const SwiUI::TInstallOptionsPckg& aSilentInstallOptionsPckg );
+                          const Usif::COpaqueNamedParams* aSilentInstallOptions );
 
 
     /**
      * Sets this object active for observing a silent install operation.
      * 
      * @param aFile Installation file handle.
-     * @param aSilentInstallOptionsPckg Silent installation options.
+     * @param aSilentInstallOptions Silent installation options.
      */
     void StartToObserveL( RFile& aFile,
-                          const SwiUI::TInstallOptionsPckg& aSilentInstallOptionsPckg );
+                          const Usif::COpaqueNamedParams* aSilentInstallOptions );
 
 
     /**
@@ -147,8 +149,7 @@
      * that handles the installation operations that this
      * class object observes. Ownerhsip is not transferred.
      */
-    SwiUI::RSWInstSilentLauncher& SilentLauncher();
-
+    Usif::RSoftwareInstall& SilentLauncher();
 
     /**
      * Converts the given error code if necessary.
@@ -176,10 +177,11 @@
 
     // The silent launcher handles the install operations that
     // this class object observes. 
-    SwiUI::RSWInstSilentLauncher iSilentLauncher;
+    // SwiUI::RSWInstSilentLauncher iSilentLauncher;
+    Usif::RSoftwareInstall iInstaller;
+    Usif::COpaqueNamedParams* iResults;
+    Usif::COpaqueNamedParams* iArguments;
     
-    SwiUI::TServerRequest iCancelCode;
-
 };
 
 #endif // NCD_SILENT_INSTALL_ACTIVE_OBSERVER_H
--- a/ncdengine/provider/deviceinteraction/inc/ncdwidgetregistrydata.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/provider/deviceinteraction/inc/ncdwidgetregistrydata.h	Thu Jul 22 16:35:01 2010 +0100
@@ -20,7 +20,7 @@
 
 // INCLUDES
 #include <f32file.h>
-#include <WidgetRegistryClient.h>
+//#include <WidgetRegistryClient.h>  //HLa: Widget registry remove
 #include "catalogsutils.h"
 
 // CONSTANTS
@@ -44,7 +44,9 @@
         inline CExtendedWidgetInfo()
             {
             iUid = TUid::Uid(0);
-            iVersion = HBufC::New( KWidgetRegistryVal + 1 );
+            //HLa: Widget registry remove
+            //iVersion = HBufC::New( KWidgetRegistryVal + 1 );
+            iVersion = HBufC::New( KMaxFileName + 1 ); 
             
             }
         /**
--- a/ncdengine/provider/deviceinteraction/src/ncddeviceserviceimpl.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/provider/deviceinteraction/src/ncddeviceserviceimpl.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -38,7 +38,7 @@
 #endif
 
 #ifdef GET_DEVICE_ID_FROM_USERAGENT
-    #include <CUserAgent.h>
+    #include <sysversioninfo.h>
 #endif
 
 #include "catalogs_device_config.h"
@@ -681,30 +681,16 @@
     return KCatalogsOverrideDeviceId().AllocLC();
 #endif    
 
-#ifdef GET_DEVICE_ID_FROM_USERAGENT    
-    // Assume the device id begins with "Nokia" and ends with "/"
-    HBufC8* userAgent = UserAgentL();
-    CleanupStack::PushL( userAgent );
-    TInt offset = userAgent->Find( _L8( "Nokia" ));
-    if ( offset == KErrNotFound )
-        {
-        DLTRACEOUT(("No Nokia"));
-        CleanupStack::PopAndDestroy( userAgent );
-        return KNullDesC().AllocLC();
-        }
-    TPtrC8 id = userAgent->Des().Mid( offset );
-    offset = id.Locate( '/' );
-    if ( offset == KErrNotFound )
-        {
-        DLTRACEOUT(("no /"));
-        CleanupStack::PopAndDestroy( userAgent );
-        return KNullDesC().AllocLC();
-        }
-    TPtrC8 id2 = id.Left( offset );
-    HBufC* devId = HBufC::NewL( id2.Length() );
-    devId->Des().Copy( id2 );
-    CleanupStack::PopAndDestroy( userAgent );
-    CleanupStack::PushL( devId );
+#ifdef GET_DEVICE_ID_FROM_USERAGENT  
+    
+    // Get model version.
+    TBuf< KSysVersionInfoTextLength > modelVersion;
+    User::LeaveIfError( SysVersionInfo::GetVersionInfo(
+        SysVersionInfo::EModelVersion, modelVersion ) );
+    
+    // Create buffer.
+    HBufC* devId = HBufC::NewLC( modelVersion.Length() );
+    devId->Des().Append( modelVersion );
     DLTRACEOUT(( _L("devId: %S"), devId ));
     return devId;
     
@@ -751,36 +737,16 @@
     
     if ( !iDeviceModel )
         {
-        // Get manufacturer 
-        HBufC8* manufacturer = Des16ToDes8LC( DeviceManufacturerL() );
-        
-        HBufC8* userAgent = UserAgentL();
-        CleanupStack::PushL( userAgent );
-        
-        TInt offset = userAgent->FindF( *manufacturer ); 
-        if ( offset == KErrNotFound )
-            {
-            DLTRACEOUT(("Device manufacturer not found"));
-            CleanupStack::PopAndDestroy( 2, manufacturer ); // manufacturer, useragent
-            return KNullDesC();
-            }
+        // Get model version.
+        TBuf< KSysVersionInfoTextLength > modelVersion;
+        User::LeaveIfError( SysVersionInfo::GetVersionInfo(
+            SysVersionInfo::EModelVersion, modelVersion ) );
+    
+        // Create buffer.
+        iDeviceModel = HBufC::NewL( modelVersion.Length() );
+        iDeviceModel->Des().Append( modelVersion );
+        }
         
-        // Strip manufacturer of the string    
-        TPtrC8 id = userAgent->Des().Mid( offset + manufacturer->Length() );
-        
-        // Locate the end of the device model
-        offset = id.Locate( '/' );
-        if ( offset == KErrNotFound )
-            {
-            DLTRACE(("no /"));
-            CleanupStack::PopAndDestroy( 2, manufacturer ); // manufacturer, useragent
-            return KNullDesC();
-            }
-        TPtrC8 id2 = id.Left( offset );
-        iDeviceModel = Des8ToDes16L( id2 );                        
-        
-        CleanupStack::PopAndDestroy( 2, manufacturer ); // manufacturer, useragent
-        }
     DLTRACEOUT(( _L("device model: %S"), iDeviceModel ));
     return *iDeviceModel;
 #endif // CATALOGS_OVERRIDE_MODEL   
@@ -853,30 +819,6 @@
         }
     return EAknsSrvPhone;
     }
-    
-
-// ---------------------------------------------------------------------------
-// On SDK 3.0 UA looks like this:
-// Mozilla/4.0 ( compatible; MSIE 5.0; Series60/3.0 Nokia6630/4.06.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 ) 
-// ---------------------------------------------------------------------------
-#ifdef GET_DEVICE_ID_FROM_USERAGENT
-
-HBufC8* CNcdDeviceService::UserAgentL() const
-    {
-    DLTRACEIN((""));
-#ifndef CATALOGS_OVERRIDE_USERAGENT    
-    CUserAgent* ua = CUserAgent::NewL();
-    CleanupStack::PushL( ua );
-    HBufC8* uas = ua->UserAgentL();
-    CleanupStack::PopAndDestroy( ua );
-    DLTRACEOUT(("UserAgent: %S", uas));
-    return uas;
-#else // CATALOGS_OVERRIDE_USERAGENT
-    return KCatalogsOverrideUserAgent().AllocL(); 
-#endif    
-    }
-
-#endif    
 
 // ---------------------------------------------------------------------------
 // GetPhoneLC
--- a/ncdengine/provider/deviceinteraction/src/ncdinstallationserviceimpl.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/provider/deviceinteraction/src/ncdinstallationserviceimpl.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -32,17 +32,6 @@
 #include <e32property.h>
 #include <sacls.h>
 
-/*  HLa - temporary java remove
-#ifdef USE_OLD_JAVA_API
-    #include <mjavaregistry.h>
-    #include <swi/minstalledappsregistry.h>
-#else
-    #include <javaregistry.h>
-    #include <javaregistrypackageentry.h>
-
-    using namespace Java;
-#endif
-*/
 #include "ncdinstallationserviceobserver.h"
 #include "ncdactiveoperationobserver.h"
 #include "ncdsilentinstallactiveobserver.h"
@@ -56,23 +45,7 @@
 
 const TUint KFileOpenFlags = EFileShareReadersOrWriters;
 
-/*  HLa - temporary java remove
-#ifdef __SERIES60_31__
-
-    const TInt32 KPSUidJavaLatestInstallation = KUidJmiLatestInstallation;
-
-#else
-
-    // Defined originally in /mw/java/inc/javauids.h
-    // This should become available at some point in javadomainpskeys.h
-    //const TInt32 KPSUidJavaLatestInstallation = 0x10282567;
-    #include <javadomainpskeys.h>
-
-#endif
-*/
-
-// length taken from WidgetRegistryData.h
-const TInt KWidgetBundleIdLength = KWidgetRegistryVal + 1;    
+//const TInt KWidgetBundleIdLength = KMaxFileName + 1; 
 
 // ======== CALLBACK FUNCTION ========
  
@@ -135,12 +108,11 @@
     delete iJadFileName;
     delete iRecognizedMime;
     
-     /*  HLa - temporary java remove
-#ifdef USE_OLD_JAVA_API    
-    iMIDletUids.Close();
-#endif    
+    delete iResults;
+    delete iArguments;
+    
     iApaLs.Close();
-    */
+    
     
     if( iThemes )
         {
@@ -152,17 +124,7 @@
     CancelInstall(); 
     iRomUids.Close();
     
-    if ( iWidgetRegistry.Handle() )
-        {
-        // decreases widget server's refcount but this cannot be called
-        // if Connect has not been called or we'll get a KERN-EXEC 0
-        iWidgetRegistry.Disconnect();
-        }
-    else
-        {
-        iWidgetRegistry.Close();
-        }
-    iInstalledWidgets.ResetAndDestroy();
+    iScrSession.Close();
     iInstalledWidgetsInfos.ResetAndDestroy();
     }
 
@@ -181,13 +143,18 @@
 void CNcdInstallationService::ConstructL()
     {
     DLTRACEIN((""));
+    
+    iResults = 0;
+    iArguments = 0;
+    
     iDocHandler = CDocumentHandler::NewL();
     iDocHandler->SetExitObserver( this );
     
     User::LeaveIfError( iFs.Connect() );
     User::LeaveIfError( iFs.ShareProtected() );
     User::LeaveIfError( iRegistrySession.Connect() );
-    User::LeaveIfError( iAknsSrv.Connect() ); 
+    User::LeaveIfError( iAknsSrv.Connect() );
+    User::LeaveIfError( iScrSession.Connect());
 
     iInstallationCompleteCallback = new(ELeave) CAsyncCallBack( 
         TCallBack( InstallationCompleteCallback, this ),
@@ -266,7 +233,7 @@
 void CNcdInstallationService::SilentInstallL( RFile& aFile,
                                         const TDesC& aMimeType,
                                         const TNcdItemPurpose& aPurpose,
-                                        const SwiUI::TInstallOptionsPckg& aInstallOptionsPckg )
+                                        const Usif::COpaqueNamedParams* aInstallOptionsPckg )
     {
     DLTRACEIN((""));
 
@@ -276,7 +243,7 @@
         iSilentInstallActiveObserver = CNcdSilentInstallActiveObserver::NewL( *this );        
         }
 
-    InstallL( aFile, aMimeType, aPurpose, &aInstallOptionsPckg );
+    InstallL( aFile, aMimeType, aPurpose, aInstallOptionsPckg );
 
     DLTRACEOUT(("")); 
     }
@@ -289,7 +256,7 @@
 void CNcdInstallationService::SilentInstallJavaL( RFile& aFile,
                                             const TDesC& aMimeType,
                                             const TDesC8& aDescriptorData,
-                                            const SwiUI::TInstallOptionsPckg& aInstallOptionsPckg )
+                                            const Usif::COpaqueNamedParams* aInstallOptionsPckg )
     {
     DLTRACEIN((""));
 
@@ -299,7 +266,7 @@
         iSilentInstallActiveObserver = CNcdSilentInstallActiveObserver::NewL( *this );        
         }
 
-    InstallJavaL( aFile, aMimeType, aDescriptorData, &aInstallOptionsPckg );
+    InstallJavaL( aFile, aMimeType, aDescriptorData, aInstallOptionsPckg );
 
     DLTRACEOUT((""));
     }
@@ -309,7 +276,7 @@
 // ---------------------------------------------------------------------------
 //
 void CNcdInstallationService::SilentInstallWidgetL( RFile& aFile,
-                                                    const SwiUI::TInstallOptionsPckg& aInstallOptionsPckg )
+                                                    const Usif::COpaqueNamedParams* aInstallOptionsPckg )
     {
     DLTRACEIN((""));
     
@@ -319,7 +286,7 @@
         iSilentInstallActiveObserver = CNcdSilentInstallActiveObserver::NewL( *this );        
         }
 
-    InstallWidgetL( aFile, &aInstallOptionsPckg );
+    InstallWidgetL( aFile, aInstallOptionsPckg );
     
     DLTRACEOUT((""));
     }
@@ -382,11 +349,6 @@
             iJadFileName = NULL;
             }
         
-#ifdef USE_OLD_JAVA_API        
-        // Clean the array.
-        iMIDletUids.Reset();
-#endif        
-
         // Reset information flags.            
         InstallationFinishedSetup( aError );
         }
@@ -518,55 +480,53 @@
 // ---------------------------------------------------------------------------
 //
 
-#ifdef USE_OLD_JAVA_API
-
-TBool CNcdInstallationService::JavaAppExistsL( 
-    const TUid& aUid )
-    {
-    	
-    /*  HLa - temporary java remove
-    DLTRACEIN((""));
-
-    MJavaRegistry* javaRegistry = MJavaRegistry::CreateL();
-    CleanupReleasePushL( *javaRegistry );
-    
-    TRAPD( err, 
-        {
-        // Leaves with KErrNotFound if not found
-        MJavaRegistryMIDletEntry* midletEntry = javaRegistry->MIDletEntryL(
-            aUid );    
-        midletEntry->Release();
-        });
-    
-    LeaveIfNotErrorL( err, KErrNotFound );
-    
-    CleanupStack::PopAndDestroy( javaRegistry );
-    return err == KErrNone;
-    */
-    
-    }
-
-#else
-
 TBool CNcdInstallationService::JavaAppExistsL( 
     const TUid& aUid )
     {
     DLTRACEIN((""));
-    /*  HLa - temporary java remove
 
-    CJavaRegistry* javaRegistry = CJavaRegistry::NewLC();    
-
-    TBool exists = javaRegistry->RegistryEntryExistsL( aUid );
+    TBool retVal = EFalse;
+    Usif::TComponentId compId = 0;
+        
+    // Get component id
+    TRAPD( ret, compId = iScrSession.GetComponentIdForAppL( aUid ) ); 
+    if ( ret == KErrNotFound )
+        {
+        return EFalse;
+        }
+    else if  (ret != KErrNone )
+        {
+        User::Leave( ret );
+        }
+         
+    Usif::CComponentEntry* entry = Usif::CComponentEntry::NewLC();
+    TRAPD(err, iScrSession.GetComponentL(compId, *entry));
     
-    CleanupStack::PopAndDestroy( javaRegistry );
-    return exists;
-    */
-    return EFalse;
+    if ( err == KErrNotFound )
+        {
+        retVal = EFalse;
+        }
+    else if  (err != KErrNone )
+        {
+        User::Leave( err );
+        }
+    else
+        {
+        // type == Java ?
+        if ( entry->SoftwareType().Compare( Usif::KSoftwareTypeJava ) == 0 )
+            {
+            retVal = ETrue;
+            }
+        else
+            {
+            retVal = EFalse;
+            }
+        }
+    CleanupStack::PopAndDestroy(entry);
+    return retVal;
     
     }
 
-#endif
-
 // Check via widget registry API
 TNcdApplicationStatus CNcdInstallationService::IsWidgetInstalledL(const TDesC& aIdentifier, const TCatalogsVersion& aVersion)
     {
@@ -940,7 +900,7 @@
     
     iInstaller.Close();
     
-    if ( aError == SwiUI::KSWInstErrUserCancel ) 
+    if ( aError == KErrCancel ) 
         {
         DLTRACE(("User cancelled, converting error to KErrAbort" ) );
         aError = KErrAbort;        
@@ -989,9 +949,7 @@
         if ( iInstallError != KErrNone ) 
             {        
             DLTRACE(("Notify install error"));
-#ifdef USE_OLD_JAVA_API            
-            iMIDletUids.Reset();
-#endif            
+
             iObserver->InstallationCompleteL( KNullDesC, TUid(), iInstallError );       
             return; 
             }
@@ -1331,7 +1289,7 @@
 void CNcdInstallationService::InstallL( RFile& aFile,
                                         const TDesC& aMimeType,
                                         const TNcdItemPurpose& aPurpose,
-                                        const SwiUI::TInstallOptionsPckg* aSilentInstallOptionsPckg )
+                                        const Usif::COpaqueNamedParams* aSilentInstallOptions )
     {
     DLTRACEIN(( _L("iBusy=%d, MIME: %S"),iBusy, &aMimeType ));    
     DASSERT( iObserver );
@@ -1377,7 +1335,7 @@
             aFile, 
             *iRecognizedMime, 
             KNullDesC8, 
-            aSilentInstallOptionsPckg );
+            aSilentInstallOptions );
         return;
         }
     else if ( MatchWidget( aFile, aMimeType ) )
@@ -1385,7 +1343,7 @@
         DLTRACE(("Widget"));
         InstallWidgetL( 
             aFile,
-            aSilentInstallOptionsPckg );
+            aSilentInstallOptions );
         return;
         }
     
@@ -1427,13 +1385,25 @@
         // Start application installation.
         DLINFO(( "Calling doc handler Open" ));
 
-        if ( !aSilentInstallOptionsPckg )
+        if ( !aSilentInstallOptions )
             {
             DLINFO(("Normal install"));
             InitializeInstallerL();
-            iCancelCode = SwiUI::ERequestInstallHandle;
+            //iCancelCode = SwiUI::ERequestInstallHandle;
             
-            iInstaller.Install( iInstallStatusObserver->iStatus, aFile );
+            if ( !iArguments )
+                {
+                iArguments = Usif::COpaqueNamedParams::NewL();
+                }
+            if ( !iResults )
+               {
+               iResults = Usif::COpaqueNamedParams::NewL();
+               }
+            
+            iArguments->AddIntL( Usif::KSifInParam_InstallSilently, EFalse );
+            
+            iInstaller.Install( aFile, *iArguments, *iResults, iInstallStatusObserver->iStatus ); 
+            //iInstaller.Install( iInstallStatusObserver->iStatus, aFile );
             iInstallStatusObserver->StartToObserve();            
             }
         else
@@ -1443,7 +1413,7 @@
             // of the silent install and it will forward the information for the callback
             // function of this class object.
             iSilentInstallActiveObserver->StartToObserveL( aFile,
-                                                           *aSilentInstallOptionsPckg );
+                                                           aSilentInstallOptions );
             }
             
         iBusy = ETrue;
@@ -1514,7 +1484,7 @@
 void CNcdInstallationService::InstallJavaL( RFile& aFile,
                                             const TDesC& /*aMimeType*/,
                                             const TDesC8& aDescriptorData,
-                                            const SwiUI::TInstallOptionsPckg* aSilentInstallOptionsPckg )
+                                            const Usif::COpaqueNamedParams* aSilentInstallOptions )
     {
     DLTRACEIN((_L("iBusy=%d, descriptor=%d"),iBusy, aDescriptorData.Length() ));
     DASSERT( iObserver );
@@ -1528,17 +1498,6 @@
 
     iInstallError = KErrNone;
     
-#ifdef USE_OLD_JAVA_API
-    // Store installed java app uids before installation to see
-    // which one is a new java app later.
-    /*  HLa - temporary java remove
-    MJavaRegistry* javaRegistry = MJavaRegistry::CreateL();
-    CleanupReleasePushL( *javaRegistry );
-    iMIDletUids.Reset();
-    javaRegistry->InstalledMIDletUidsL( iMIDletUids );
-    CleanupStack::PopAndDestroy( javaRegistry );
-    */
-#endif
     
     // In platform security systems JAR and JAD has to be in same folder
     // to get the installation process work correctly.
@@ -1560,7 +1519,7 @@
     iInstallType = EJavaInstall;
     TDataType dataType;    
             
-    if ( aSilentInstallOptionsPckg == NULL )
+    if ( aSilentInstallOptions == NULL )
         {
         DLINFO(("Normal install"));
         InitializeInstallerL();
@@ -1568,15 +1527,40 @@
             {
             DLTRACE(("Installing JAD+JAR"));
             // JAD+JAR install
-            iCancelCode = SwiUI::ERequestInstall;
-            iInstaller.Install( iInstallStatusObserver->iStatus, *iJadFileName );
+            //iCancelCode = SwiUI::ERequestInstall;
+            if ( !iArguments )
+                {
+                iArguments = Usif::COpaqueNamedParams::NewL();
+                }
+            if ( !iResults )
+                {
+                iResults = Usif::COpaqueNamedParams::NewL();
+                }
+             
+             iArguments->AddIntL( Usif::KSifInParam_InstallSilently, EFalse );
+                        
+            iInstaller.Install( *iJadFileName, *iArguments, *iResults, iInstallStatusObserver->iStatus ); 
+            //iInstaller.Install( iInstallStatusObserver->iStatus, *iJadFileName );
             }
         else
             {
             DLTRACE(("Installing JAR"));
             // JAR install
-            iCancelCode = SwiUI::ERequestInstallHandle;
-            iInstaller.Install( iInstallStatusObserver->iStatus, aFile );
+            //iCancelCode = SwiUI::ERequestInstallHandle;
+            if ( !iArguments )
+                {
+                iArguments = Usif::COpaqueNamedParams::NewL();
+                }
+            if ( !iResults )
+               {
+               iResults = Usif::COpaqueNamedParams::NewL();
+               }
+            
+             iArguments->AddIntL( Usif::KSifInParam_InstallSilently, EFalse );
+             
+             iInstaller.Install( aFile, *iArguments, *iResults, iInstallStatusObserver->iStatus ); 
+            
+            //iInstaller.Install( iInstallStatusObserver->iStatus, aFile );
             }
         
         iInstallStatusObserver->StartToObserve();
@@ -1592,7 +1576,7 @@
             // of the silent install and it will forward the information for the callback
             // function of this class object.
             iSilentInstallActiveObserver->StartToObserveL( *iJadFileName,
-                                                           *aSilentInstallOptionsPckg );
+                                                           aSilentInstallOptions );
             }
         else
             {
@@ -1602,7 +1586,7 @@
             // of the silent install and it will forward the information for the callback
             // function of this class object.
             iSilentInstallActiveObserver->StartToObserveL( aFile,
-                                                           *aSilentInstallOptionsPckg );
+                                                           aSilentInstallOptions );
             }        
         }
 
@@ -1618,7 +1602,7 @@
 //
 void CNcdInstallationService::InstallWidgetL( 
     RFile& aFile,
-    const SwiUI::TInstallOptionsPckg* aSilentInstallOptionsPckg )
+    const Usif::COpaqueNamedParams* aSilentInstallOptions )
     {
     DLTRACEIN((""));    
     
@@ -1632,13 +1616,24 @@
     // Start application installation.
     DLINFO(( "Calling doc handler Open" ));
 
-    if ( !aSilentInstallOptionsPckg )
+    if ( !aSilentInstallOptions )
         {
         DLINFO(("Normal install"));
         InitializeInstallerL();
-        iCancelCode = SwiUI::ERequestInstallHandle;
-        
-        iInstaller.Install( iInstallStatusObserver->iStatus, aFile );
+        //iCancelCode = SwiUI::ERequestInstallHandle;
+        if ( !iArguments )
+            {
+            iArguments = Usif::COpaqueNamedParams::NewL();
+            }
+        if ( !iResults )
+           {
+           iResults = Usif::COpaqueNamedParams::NewL();
+           }
+                    
+        iArguments->AddIntL( Usif::KSifInParam_InstallSilently, EFalse );
+        iInstaller.Install(aFile, *iArguments, *iResults, iInstallStatusObserver->iStatus  );
+         
+        //iInstaller.Install( iInstallStatusObserver->iStatus, aFile );
         iInstallStatusObserver->StartToObserve();            
         }
     else
@@ -1648,7 +1643,7 @@
         // of the silent install and it will forward the information for the callback
         // function of this class object.
         iSilentInstallActiveObserver->StartToObserveL( aFile,
-                                                       *aSilentInstallOptionsPckg );
+                                                       aSilentInstallOptions );
         }
         
     iBusy = ETrue;
@@ -1665,10 +1660,13 @@
     DeletePtr( iInstallStatusObserver );
     iInstallStatusObserver = CNcdActiveOperationObserver::NewL( *this );
     
+    User::LeaveIfError( iInstaller.Connect() );
+    /*
     if ( !iInstaller.Handle() ) 
         {
         User::LeaveIfError( iInstaller.Connect() );
         }
+    */
     }
     
 
@@ -1679,11 +1677,13 @@
 void CNcdInstallationService::CancelInstall()
     {
     DLTRACEIN((""));
-    if ( iInstallStatusObserver &&
-         iInstaller.Handle() ) 
+    //if ( iInstallStatusObserver &&
+    //     iInstaller.Handle() ) 
+    if ( iInstallStatusObserver )
         {
         DLTRACE(("Cancelling installation"));
-        iInstaller.CancelAsyncRequest( iCancelCode );
+        iInstaller.CancelOperation();
+        //iInstaller.CancelAsyncRequest( iCancelCode );
         }
     
     DeletePtr( iInstallStatusObserver );
@@ -1922,34 +1922,39 @@
 // Gets a list of installed midlet UIDs
 // ---------------------------------------------------------------------------
 //
-#ifdef USE_OLD_JAVA_API
 
 void CNcdInstallationService::MidletUidsL( RArray<TUid>& aUids )
     {
-    	 /*  HLa - temporary java remove
-    DLTRACEIN((""));
-    MJavaRegistry* javaRegistry = MJavaRegistry::CreateL();
-    CleanupReleasePushL( *javaRegistry );
-    javaRegistry->InstalledMIDletUidsL( aUids );
-    CleanupStack::PopAndDestroy( javaRegistry ); 
-    */   
-    }
 
-#else
+    // Get ids of all java components in scr
+    RArray<Usif::TComponentId> javaComponentIdList;
+    CleanupClosePushL( javaComponentIdList );
+    
+    Usif::CComponentFilter *pJavaSwTypeFilter = Usif::CComponentFilter::NewLC();
+    pJavaSwTypeFilter->SetSoftwareTypeL( Usif::KSoftwareTypeJava );
+    iScrSession.GetComponentIdsL( javaComponentIdList, pJavaSwTypeFilter );
+    CleanupStack::PopAndDestroy( pJavaSwTypeFilter );
 
-void CNcdInstallationService::MidletUidsL( RArray<TUid>& aUids )
-    {
-    /*  HLa - temporary java remove
-    DLTRACEIN((""));
-    CJavaRegistry* javaRegistry = CJavaRegistry::NewLC();
-    javaRegistry->GetRegistryEntryUidsL( aUids );          
-    CleanupStack::PopAndDestroy( javaRegistry );   
-    */ 
+    
+    // Get components
+    TInt aUidIndex = 0;
+    for ( TInt i = 0; i < javaComponentIdList.Count(); ++i )
+        {
+        RArray<TUid> midletUids;
+        CleanupClosePushL( midletUids );
+        iScrSession.GetAppUidsForComponentL( javaComponentIdList[i], midletUids );
+        for ( TInt j = 0; j < midletUids.Count(); ++j )
+            {
+            aUids[aUidIndex] = aUids[j];
+            aUidIndex++;
+            }
+        CleanupStack::PopAndDestroy(); // midletUids
+        }
+    
+    CleanupStack::PopAndDestroy(); // javaComponentIdList
+    
     }
 
-#endif
-
-
 // ---------------------------------------------------------------------------
 // Checks if the application is in ROM
 // ---------------------------------------------------------------------------
@@ -1960,125 +1965,6 @@
     return iRomUids.Find( aUid ) != KErrNotFound;    
     }
 
-
-// ---------------------------------------------------------------------------
-// Returns the UID of the latest installed midlet, NULL UID if none have
-// been installed since the last device restart
-// ---------------------------------------------------------------------------
-//
-
-/*  HLa - temporary java remove
-#ifdef USE_OLD_JAVA_API
-
-TUid CNcdInstallationService::LatestMidletUidL( 
-    MJavaRegistry& aJavaRegistry ) const
-    {
-    DLTRACEIN((""));
-    TInt suiteUid = 0;            
-    
-    // Get UID for the latest installed Midlet suite
-    // KPSUidJavaLatestInstallation = 0x10282567
-    // Ignoring error in case the key or read policy change so that client
-    // doesn't behave strangely
-    RProperty::Get( KUidSystemCategory, 
-        KPSUidJavaLatestInstallation, suiteUid );
-    
-    DLTRACE(("JMI UID: %x", suiteUid ));
-
-    if ( !suiteUid )  
-        {
-        return KNullUid;
-        }
-    
-    // Get entry for the installed suite
-    MJavaRegistrySuiteEntry* suite = aJavaRegistry.SuiteEntryL( 
-        TUid::Uid( suiteUid ) );
-    CleanupReleasePushL( *suite );        
-    RArray<TUid> suiteUids;
-    CleanupClosePushL( suiteUids );
-
-    TUid midletUid = KNullUid; 
-    suite->MIDletUidsL( suiteUids );
-    
-    // Take first midlet UID from the suite
-    if ( suiteUids.Count() ) 
-        {
-        midletUid = suiteUids[0];
-        }
-    DLTRACE(("Midlets in suite: %d", suite->NumberOfMIDletsL() ));
-    CleanupStack::PopAndDestroy( &suiteUids );
-    DLTRACE(("InstalledAppsEntryUid: %x", midletUid.iUid ));
-
-    CleanupStack::PopAndDestroy( suite );    
-    return midletUid;
-    }
-
-#else
-
-TUid CNcdInstallationService::LatestMidletUidL( 
-    CJavaRegistry& aJavaRegistry ) const
-    {
-    DLTRACEIN((""));
-    TInt suiteUid = 0;            
-    
-    // Get UID for the latest installed Midlet suite
-    // KPSUidJavaLatestInstallation = 0x10282567
-    // Ignoring error in case the key or read policy change so that client
-    // doesn't behave strangely
-    RProperty::Get( KUidSystemCategory, 
-        KPSUidJavaLatestInstallation, suiteUid );
-    
-    DLTRACE(("JMI UID: %x", suiteUid ));
-
-    if ( !suiteUid )  
-        {
-        return KNullUid;
-        }
-    
-    // Get entry for the installed suite
-    CJavaRegistryEntry* suite = aJavaRegistry.RegistryEntryL( 
-        TUid::Uid( suiteUid ) );
-    
-    if ( !suite )
-        {
-        return KNullUid;
-        }
-    
-    CleanupStack::PushL( suite );        
-    
-    DASSERT( suite->Type() < EGeneralApplication && 
-             suite->Type() >= EGeneralPackage );
-    
-    CJavaRegistryPackageEntry* entry = 
-        static_cast<CJavaRegistryPackageEntry*>( suite );
-    
-    TUid midletUid = KNullUid;
-    TInt count = entry->NumberOfEmbeddedEntries(); 
-    TBool appFound = EFalse;
-    TInt index = 0;
-    
-    // Find the first application from the suite
-    while ( index < count && !appFound )
-        {
-        CJavaRegistryEntry* app = entry->EmbeddedEntryByNumberL( index );
-        if ( app->Type() >= EGeneralApplication ) 
-            {
-            midletUid = app->Uid();
-            appFound = ETrue;
-            DLTRACE(( "Found app: %x", midletUid.iUid ));
-            }
-        delete app;
-        ++index;
-        }
-    
-    CleanupStack::PopAndDestroy( suite );    
-    return midletUid;
-    }
-
-
-#endif
-*/
-
 // ---------------------------------------------------------------------------
 // Returns true if the MIME type matches a Java application or descriptor
 // ---------------------------------------------------------------------------
@@ -2091,85 +1977,35 @@
     }
 
 
-#ifdef USE_OLD_JAVA_API
 
 
 TUid CNcdInstallationService::InstalledMidletUidL()
     {
-    	
-    /* HLa - temporary java remove
-    DLTRACEIN((""));
-    RArray<TUid> MIDletUids;
-    CleanupClosePushL( MIDletUids );
+
+    //Usif::COpaqueNamedParams* iResults = 0; // to be removed
     
-    MJavaRegistry* javaRegistry = MJavaRegistry::CreateL();
-    CleanupReleasePushL( *javaRegistry );
-    javaRegistry->InstalledMIDletUidsL( MIDletUids );
-    TUid MIDletUid = KNullUid;
-    // Search for new uids in Java registry.
-    for ( TInt i = 0 ; i < MIDletUids.Count() ; i++ )
+    RArray<TUid> appUids;
+    TUid midletUid = KNullUid;
+    TInt compId = 0;
+    
+    // Get component id
+    TRAPD ( err, iResults->IntByNameL( Usif::KSifOutParam_ComponentId ));
+    if ( err == KErrNotFound )
         {
-        if ( iMIDletUids.Find( MIDletUids[i] ) == KErrNotFound )
-            {
-            // A new uid found, this is the installed midlet's uid
-            MIDletUid = MIDletUids[i];
-            break;
-            }
-        }
-
-    // We didn't get any new UID so we have to check Java installer's
-    // P&S key for the installed suite UID and the get the midlet UID
-    // from that. This happens when a midlet with predefined UID, 
-    // eg. WidSets, is reinstalled. Midlet UIDs are predefined with
-    // the attribute Nokia-MIDlet-UID-<n> in a JAD or JAR manifest
-    if ( MIDletUid == KNullUid ) 
-        {
-        MIDletUid = LatestMidletUidL( *javaRegistry );
+        return midletUid;
         }
     
-    CleanupStack::PopAndDestroy( javaRegistry );
-    CleanupStack::PopAndDestroy( &MIDletUids );
-
-    iMIDletUids.Reset();
-    return MIDletUid;
-    */
-    
-    }
-
-#else // USE_OLD_JAVA_API
-
-TUid CNcdInstallationService::InstalledMidletUidL()
-    {
-    /* HLa - temporary java remove
-    DLTRACEIN((""));
-    CJavaRegistry* registry = CJavaRegistry::NewLC();
-    TUid midletUid = LatestMidletUidL( *registry );
-    CleanupStack::PopAndDestroy( registry );
-    return midletUid;
-    */
+    // Get components
+    CleanupClosePushL( appUids );
+    iScrSession.GetAppUidsForComponentL( compId, appUids );
     
-    return KNullUid;
-    
-    }
-
-#endif // USE_OLD_JAVA_API
-
-
-// ---------------------------------------------------------------------------
-// Populates the list of installed widgets
-// ---------------------------------------------------------------------------
-//
-void CNcdInstallationService::PopulateInstalledWidgetUidsL() 
-    {
-    DLTRACEIN((""));
-
-    if ( !iWidgetRegistry.Handle() )
+    // return first midlet uid, if exists
+    if ( appUids.Count() != 0 )
         {
-        User::LeaveIfError( iWidgetRegistry.Connect() );
+        midletUid = appUids[0];
         }
-    
-    iInstalledWidgets.ResetAndDestroy();
-    User::LeaveIfError( iWidgetRegistry.InstalledWidgetsL( iInstalledWidgets ) );    
+    CleanupStack::PopAndDestroy(); // appUids 
+    return midletUid;
     }
 
 // ---------------------------------------------------------------------------
@@ -2181,38 +2017,44 @@
     {
     DLTRACEIN((""));
     
-    // Get the list of installed widget uids 
-    PopulateInstalledWidgetUidsL();
+    // Get ids of all widget components in scr
+    RArray<Usif::TComponentId> widgetComponentIdList;
+    Usif::CComponentFilter *pWidgetSwTypeFilter = Usif::CComponentFilter::NewLC();
+    pWidgetSwTypeFilter->SetSoftwareTypeL(Usif::KSoftwareTypeWidget);
+
+    iScrSession.GetComponentIdsL(widgetComponentIdList, pWidgetSwTypeFilter);
     
-    const TInt count = iInstalledWidgets.Count();
+    CleanupStack::PopAndDestroy(pWidgetSwTypeFilter);
+    CleanupClosePushL(widgetComponentIdList);
     
-    // Create array with UID & Version infos
+    const TInt count = widgetComponentIdList.Count();
+    
+    // Create array with id & version infos
     for ( TInt i = 0; i < count; ++i )
         {
         CExtendedWidgetInfo* tempInfo = new ( ELeave ) CExtendedWidgetInfo();
         CleanupStack::PushL( tempInfo );
         
-        CWidgetInfo* widgetInfo = iInstalledWidgets[i];
+        // Get widget
+        Usif::TComponentId compId = widgetComponentIdList[i];
+        Usif::CComponentEntry* entry = Usif::CComponentEntry::NewLC();
+        iScrSession.GetComponentL(compId, *entry);
         
-        CWidgetPropertyValue* version = iWidgetRegistry.GetWidgetPropertyValueL
-            (widgetInfo->iUid, EBundleVersion );
-        CleanupStack::PushL( version );
-
-        // Fill info
-        tempInfo->iUid = widgetInfo->iUid;
-        if (!version->iValue.s)
-            *(tempInfo->iVersion) = KDefVersion;
-        else
-            *(tempInfo->iVersion) = *(version->iValue.s);
+        // Fill id & version
+        tempInfo->iUid.iUid= compId;
+        *(tempInfo->iVersion) = entry->Version();
         
         // Append to arrayt
         aWidgets.AppendL( tempInfo );
-
-        CleanupStack::PopAndDestroy( version );
+        
+        CleanupStack::PopAndDestroy(entry);
         CleanupStack::Pop( tempInfo );
         }
+    
+    
+    CleanupStack::PopAndDestroy(); // widgetComponentIdList
    
-        DLTRACEOUT((""));
+    DLTRACEOUT((""));
 
     }
 
@@ -2220,26 +2062,13 @@
 // Gets the name of widget that was installed last
 // ---------------------------------------------------------------------------
 //
+
 HBufC* CNcdInstallationService::InstalledWidgetNameLC()
     {
     DLTRACEIN((""));
     
-    TUid widgetUid = InstalledWidgetUidL();
-    
-    if ( widgetUid == KNullUid )
-        {
-        DLERROR(("No widget uid"));
-        // No new UID was found, so we assume user canceled the installation.
-        // Installer does not give any error code in that case.
-        return NULL;
-        }
-
-    HBufC* bundleId = HBufC::NewLC( KWidgetBundleIdLength );
-    TPtr des( bundleId->Des() );
-    iWidgetRegistry.GetWidgetBundleId( widgetUid, des );            
-
-    DLTRACEOUT(( _L("Widget bundle id: %S"), bundleId ));
-    return bundleId;
+    // Not currently suported
+    return NULL;
     }
     
 
@@ -2349,30 +2178,48 @@
 
 
 // ---------------------------------------------------------------------------
-//   
+//Calling widget registry API to check if a widget with given uid is installed 
+//already
 // ---------------------------------------------------------------------------
 //
 TBool CNcdInstallationService::WidgetExistsL( const TUid& aUid )
     {
     DLTRACEIN((""));
-
-    if ( !iWidgetRegistry.Handle() )
-        {
-        User::LeaveIfError( iWidgetRegistry.Connect() );
-        }
+    
+    TBool retVal = EFalse;
+        
+    // Get entry 
+    Usif::TComponentId compId = aUid.iUid;
+    Usif::CComponentEntry* entry = Usif::CComponentEntry::NewLC();
+    TRAPD(err, iScrSession.GetComponentL(compId, *entry));
     
-    if ( iWidgetRegistry.IsWidget( aUid ) )
+    if ( err == KErrNotFound || !retVal )
+        {
+        retVal = EFalse;
+        }
+    else if  (err != KErrNone )
+        {
+        User::Leave( err );
+        }
+    else
         {
-        TBuf<KWidgetBundleIdLength> id;
-        iWidgetRegistry.GetWidgetBundleId( aUid, id );
-        return iWidgetRegistry.WidgetExistsL( id );
+        // widget ??
+        if ( entry->SoftwareType().Compare( Usif::KSoftwareTypeWidget ) == 0 )
+            {
+            retVal = ETrue;
+            }
+        else
+            {
+            retVal = EFalse;
+            }
         }
-    return EFalse;         
+    CleanupStack::PopAndDestroy(entry);
+    return retVal;
     }
 
 // ---------------------------------------------------------------------------
 //Calling widget registry API to check if a widget with given uid is installed 
-//already
+//already. Returns the version of the installed widget.
 // ---------------------------------------------------------------------------
 //
 TBool CNcdInstallationService::WidgetExistsL( 
@@ -2380,33 +2227,40 @@
     {
     DLTRACEIN((""));
     
-    if ( !iWidgetRegistry.Handle() )
+    TBool retVal = EFalse;
+    
+    // Get entry 
+    Usif::TComponentId compId = aUid.iUid;
+    Usif::CComponentEntry* entry = Usif::CComponentEntry::NewLC();
+    TRAPD(err, retVal= iScrSession.GetComponentL(compId, *entry));
+    
+    if ( err == KErrNotFound || !retVal )
         {
-        User::LeaveIfError( iWidgetRegistry.Connect() );
+        retVal = EFalse;
         }
-    
-    if ( iWidgetRegistry.IsWidget( aUid ) )
+    else if  (err != KErrNone )
         {
-        TBuf<KWidgetBundleIdLength> id;
-        iWidgetRegistry.GetWidgetBundleId( aUid, id );
-        if (iWidgetRegistry.WidgetExistsL( id ))
+        User::Leave( err );
+        }
+    else
+        {
+        // widget ??
+        if ( entry->SoftwareType().Compare( Usif::KSoftwareTypeWidget ) == 0 )
             {
+            retVal = ETrue;
+        
             // Get version
-            CWidgetPropertyValue* version = 
-                iWidgetRegistry.GetWidgetPropertyValueL(aUid, EBundleVersion );
-            CleanupStack::PushL( version );
-            TCatalogsVersion::ConvertL( aVersion, *(version->iValue.s) );
-            CleanupStack::PopAndDestroy( version ); 
-            return (ETrue);
+            TPtrC entryVersion = entry->Version();
+            TCatalogsVersion::ConvertL( aVersion, entryVersion );
             }
         else
             {
-            return (EFalse);
+            retVal = EFalse;
             }
         }
-    else
-       return(EFalse);
-
+    CleanupStack::PopAndDestroy(entry);
+    return retVal;
+    
     }
     
 // ---------------------------------------------------------------------------
@@ -2419,44 +2273,44 @@
     {
     DLTRACEIN((""));
     
-    if ( !iWidgetRegistry.Handle() )
-          {
-          User::LeaveIfError( iWidgetRegistry.Connect() );
-          }
-
-    RPointerArray<CWidgetInfo> widgetInfoArr;
+    TBool retVal = EFalse;
+    Usif::TComponentId compId = 0;
+    
+    // Get widget component id by identifier
+    TRAPD( err, compId = 
+           iScrSession.GetComponentIdL( aIdentifier, Usif::KSoftwareTypeWidget ));
     
-    CleanupResetAndDestroyPushL( widgetInfoArr );
-    TInt err = iWidgetRegistry.InstalledWidgetsL(widgetInfoArr);
-    
-    for( TInt i( widgetInfoArr.Count() - 1 ); i >= 0; --i ) 
+    if ( err == KErrNotFound )
+        {
+        retVal = EFalse;
+        }
+    else if  (err != KErrNone )
         {
-        CWidgetInfo* widgetInfo( widgetInfoArr[i] );                  
-        CWidgetPropertyValue* bundleId = 
-            iWidgetRegistry.GetWidgetPropertyValueL
-                (widgetInfo->iUid, EBundleIdentifier );
-        CleanupStack::PushL( bundleId );
+        User::Leave( err );
+        }
+    else
+        {
+        // Widget found
+        retVal = ETrue;
         
-        if( aIdentifier.Compare( *(bundleId->iValue.s) )== 0 )
+        // Get entry 
+        Usif::CComponentEntry* entry = Usif::CComponentEntry::NewLC();
+        retVal = iScrSession.GetComponentL(compId, *entry);
+        
+        // Get version
+        if ( retVal )
             {
-            CWidgetPropertyValue* version = 
-                iWidgetRegistry.GetWidgetPropertyValueL
-                    (widgetInfo->iUid, EBundleVersion );
-            CleanupStack::PushL( version );
-            TCatalogsVersion::ConvertL( aVersion, *(version->iValue.s) );
-            
-            CleanupStack::PopAndDestroy( version );
-            CleanupStack::PopAndDestroy( bundleId );
-            CleanupStack::PopAndDestroy( &widgetInfoArr );
-                        
-            return ETrue;
+            TPtrC entryVersion = entry->Version();
+            TCatalogsVersion::ConvertL( aVersion, entryVersion );
             }
-        CleanupStack::PopAndDestroy( bundleId );
+    
+        CleanupStack::PopAndDestroy(entry);
         }
-    CleanupStack::PopAndDestroy( &widgetInfoArr );
-    return EFalse;
+    
+    return retVal;
     }
 
+
 // ---------------------------------------------------------------------------
 //  Calling widget registry API to return the Uid of the widget
 //  with given identifier.
@@ -2468,15 +2322,13 @@
     
     TUid id = TUid::Uid(0);
     
-   if ( !iWidgetRegistry.Handle() )
-          {
-          User::LeaveIfError( iWidgetRegistry.Connect() );
-          }
+    Usif::TComponentId compId = iScrSession.GetComponentIdL(aIdentifier, Usif::KSoftwareTypeNative);
     
-    id.iUid = iWidgetRegistry.GetWidgetUidL( aIdentifier);
-
+    id.iUid = compId;
+    
     return id;
     
+    
     }
 
     
--- a/ncdengine/provider/deviceinteraction/src/ncdsilentinstallactiveobserver.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/provider/deviceinteraction/src/ncdsilentinstallactiveobserver.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -19,6 +19,8 @@
 #include "ncdsilentinstallactiveobserver.h"
 #include "ncdasyncsilentinstallobserver.h"
 
+#include <usif/scr/scr.h>
+
 
 CNcdSilentInstallActiveObserver* CNcdSilentInstallActiveObserver::NewL( MNcdAsyncSilentInstallObserver& aObserver )
     {
@@ -49,6 +51,9 @@
 
 void CNcdSilentInstallActiveObserver::ConstructL()
     {
+    
+    iResults = 0;
+    
     CActiveScheduler::Add( this );
     }
 
@@ -60,6 +65,9 @@
     // cancel install operation and closes the silent installer. 
     // If no operation is going on, the installer is already closed. 
     // So, no need to close the silent launcher here separately.
+    
+    delete (iResults);
+
     CancelAsyncOperation();
     }
 
@@ -72,12 +80,37 @@
     // Notice, that we do not call the callback functions of the observer here
     // because we suppose that the observer has started the cancel operation itself
     // or the caller will inform the observer itself.
-    SilentLauncher().CancelAsyncRequest( iCancelCode );
+    
+    SilentLauncher().CancelOperation();
     }
 
 
 void CNcdSilentInstallActiveObserver::StartToObserveL( const TDesC& aFileName,
-                                                       const SwiUI::TInstallOptionsPckg& aSilentInstallOptionsPckg )
+                                                       const Usif::COpaqueNamedParams* aSilentInstallOptions )
+    {
+    // For silent installation
+    // Notice that if the user does not have TrustedUI capabilities
+    // then this will given KErrPermissionDenied.
+    // Connect to the launcher here just before it is needed, 
+    // because the launcher will be shown in the application list.
+    // So, it would not be nice to connect in the ConstructL and to show
+    // the icon in the list all the time.
+    // User::LeaveIfError( SilentLauncher().Connect() );
+    User::LeaveIfError( SilentLauncher().Connect() );
+    
+    if (!iResults)
+        {
+        iResults = Usif::COpaqueNamedParams::NewL();
+        }
+    
+    iInstaller.Install( aFileName, *aSilentInstallOptions, *iResults, iStatus ); 
+        
+
+    }
+
+
+void CNcdSilentInstallActiveObserver::StartToObserveL( RFile& aFile,
+                                                       const Usif::COpaqueNamedParams* aSilentInstallOptions )
     {
     // For silent installation
     // Notice that if the user does not have TrustedUI capabilities
@@ -86,34 +119,73 @@
     // because the launcher will be shown in the application list.
     // So, it would not be nice to connect in the ConstructL and to show
     // the icon in the list all the time.
+
     User::LeaveIfError( SilentLauncher().Connect() );
     
-    iCancelCode = SwiUI::ERequestSilentInstall;
-    SilentLauncher().SilentInstall( iStatus,
-                                    aFileName,
-                                    aSilentInstallOptionsPckg );
+    if (!iResults)
+        {
+        iResults = Usif::COpaqueNamedParams::NewL();
+        }
+    /*
+    if (iResults)
+        {
+        delete (iResults);
+        iResults = 0;
+        }
+   iResults = Usif::COpaqueNamedParams::NewL();
 
-    SetActive();
-    }
-
+    if (iArguments)
+        {
+        delete (iArguments);
+        iArguments = 0;
+        }
+    iArguments = Usif::COpaqueNamedParams::NewL();
 
-void CNcdSilentInstallActiveObserver::StartToObserveL( RFile& aFile,
-                                                       const SwiUI::TInstallOptionsPckg& aSilentInstallOptionsPckg )
-    {
-    // For silent installation
-    // Notice that if the user does not have TrustedUI capabilities
-    // then this will given KErrPermissionDenied.
-    // Connect to the launcher here just before it is needed, 
-    // because the launcher will be shown in the application list.
-    // So, it would not be nice to connect in the ConstructL and to show
-    // the icon in the list all the time.
-    User::LeaveIfError( SilentLauncher().Connect() );
+    // Silent installation request
+    
+    TBool iSet = ETrue;
+    
+    enum TSifPolicy
+        {
+        EAllowed        = 0,
+        ENotAllowed     = 1,
+        EUserConfirm    = 2
+        };
     
-    iCancelCode = SwiUI::ERequestSilentInstallHandle;
-    SilentLauncher().SilentInstall( iStatus,
-                                    aFile,
-                                    aSilentInstallOptionsPckg );
-
+    if (iSet)
+       iArguments->AddIntL( Usif::KSifInParam_InstallSilently, ETrue );
+    else
+        iArguments->AddIntL( Usif::KSifInParam_InstallSilently, EFalse ); 
+    if (iSet)
+        iArguments->AddIntL( Usif::KSifInParam_PerformOCSP, Usif::ENotAllowed );  
+    if (iSet)
+        iArguments->AddIntL( Usif::KSifInParam_AllowUpgrade, Usif::EAllowed );
+    if (iSet)
+        iArguments->AddIntL( Usif::KSifInParam_AllowUntrusted, Usif::ENotAllowed );
+    if (iSet)
+        iArguments->AddIntL( Usif::KSifInParam_GrantCapabilities, Usif::ENotAllowed );
+    if (iSet)
+        iArguments->AddIntL( Usif::KSifInParam_InstallOptionalItems, Usif::EAllowed );
+    if (iSet)
+        iArguments->AddIntL( Usif::KSifInParam_IgnoreOCSPWarnings, Usif::EAllowed );   
+    //iArguments->AddIntL( Usif::KSifInParam_PackageInfo, ETrue );
+    if (iSet)
+        iArguments->AddIntL( Usif::KSifInParam_AllowAppShutdown, Usif::EAllowed );
+    if (iSet)
+       iArguments->AddIntL( Usif::KSifInParam_AllowDownload, Usif::EAllowed );
+    if (iSet)
+       iArguments->AddIntL( Usif::KSifInParam_AllowOverwrite, Usif::EAllowed );
+    
+    
+    //iArguments->AddIntL(Usif::KSifInParam_InstallSilently, 1);
+    //iArguments->AddIntL( Usif::KSifInParam_DisplayPackageInfo, ETrue );     
+    
+    iInstaller.Install(aFile, *iArguments, *iResults, iStatus); 
+    */
+    
+    iInstaller.Install( aFile, *aSilentInstallOptions, *iResults, iStatus ); 
+    
+    
     SetActive();
     }
 
@@ -140,6 +212,15 @@
     // Close the installer. 
     // The launcher is shown in the application list.
     // So, it would not be nice to leave it there after operation is completed.
+    
+   
+    TInt ErrCategory = 0;
+    TInt ErrCode = 0;
+    TInt ExtendedErrCode =0;
+    
+    TBool ret = iResults->GetIntByNameL(Usif::KSifOutParam_ErrCategory, ErrCategory);
+    ret = iResults->GetIntByNameL(Usif::KSifOutParam_ErrCode, ErrCode);
+    ret = iResults->GetIntByNameL(Usif::KSifOutParam_ExtendedErrCode, ExtendedErrCode);
     SilentLauncher().Close();
 
     TInt errorCode( ConvertErrorCode( iStatus.Int() ) );
@@ -154,15 +235,16 @@
     return iObserver;
     }
 
-
-SwiUI::RSWInstSilentLauncher& CNcdSilentInstallActiveObserver::SilentLauncher()
+Usif::RSoftwareInstall& CNcdSilentInstallActiveObserver::SilentLauncher()
     {
-    return iSilentLauncher;
+    // return iSilentLauncher;
+    return iInstaller;
     }
 
 
 TInt CNcdSilentInstallActiveObserver::ConvertErrorCode( TInt aErrorCode )
     {
+    /*
     switch ( aErrorCode )
         {
         case SwiUI::KSWInstErrUserCancel:
@@ -181,7 +263,8 @@
             // Nothing to do here.
             break;
         }
-
+    */
+    
     return aErrorCode;
     }
 
--- a/ncdengine/provider/protocol/inc/ncdxmlheaders.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/ncdengine/provider/protocol/inc/ncdxmlheaders.h	Thu Jul 22 16:35:01 2010 +0100
@@ -28,12 +28,12 @@
 // All necessary XML DOM parser headers are included here
 #ifdef S60_3_2_WK14_OR_NEWER
 // Filenames in 3.2 from week 14 onwards
-    #include <xmlengdom.h>
-    #include <xmlengdomimplementation.h>
-    #include <xmlengdocument.h>
-    #include <xmlengserializationoptions.h>
-    #include <xmlengxestrings.h>
-    #include <xmlengutils.h>
+    #include <xml/dom/xmlengdom.h>
+    #include <xml/dom/xmlengdomimplementation.h>
+    #include <xml/dom/xmlengdocument.h>
+    #include <xml/dom/xmlengserializationoptions.h>
+    #include <xml/utils/xmlengxestrings.h>
+    #include <xml/utils/xmlengutils.h>
 #else
 
 // Filenames in 3.1
--- a/package_definition.xml	Tue Jun 15 13:36:10 2010 +0100
+++ b/package_definition.xml	Thu Jul 22 16:35:01 2010 +0100
@@ -1,41 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <SystemDefinition schema="3.0.0">
   <package id="appinstall" name="Application Installation" levels="tool framework generic api">
-    <collection id="appinstaller" name="Application Installer" level="generic">
-      <component id="appmngr2" filter="s60" name="Application Manager 2" introduced="^2">
-        <unit bldFile="appinstaller/appmngr2/group"/>
-      </component>
-      <component id="appinstui" filter="s60" name="Application Installer UI" introduced="^2">
-        <unit bldFile="appinstaller/appinstui/group"/>
-      </component>
-    </collection>
-    <collection id="ncdengine" name="Nokia Content Discover" level="framework">
-      <component id="ncdengine_engine" filter="s60" name="NCD Engine" introduced="^1">
-        <unit bldFile="ncdengine/engine/group"/>
-      </component>
-      <component id="debuglogger" filter="s60" name="NCD Debug Logger" introduced="^1">
-        <!-- <unit bldFile="ncdengine/debuglogger/group"/> -->
-      </component>
-      <component id="ncdengine_build" filter="s60" name="NCD Build" introduced="^1">
-        <unit bldFile="ncdengine/group"/>
-      </component>
-    </collection>
-    <collection id="iaupdateapi_stub" name="IA Update API Stub" level="api">
-      <component id="iaupdateapi_stub_build" name="IA Update API Stub Build" filter="s60" introduced="^2">
-        <unit bldFile="iaupdateapi_stub/group"/>
-      </component>
-    </collection>
-    <collection id="iaupdate" name="Independent Apps Update" level="api">
-      <component id="iad" name="Software Update" filter="s60" introduced="^2">
-        <unit bldFile="iaupdate/iad/group"/>
-      </component>
-      <component id="iaupdate_help" filter="s60" name="IA Update Help" introduced="^2">
-        <unit bldFile="iaupdate/help/group"/>
-      </component>
-      <component id="iaupdate_build" filter="s60" name="IA Update Build" introduced="^2">
-        <unit bldFile="iaupdate/group"/>
-      </component>
-    </collection>
     <collection id="installationservices" name="Installation Services" level="generic">
       <component id="swi" name="Secure Software Install" purpose="optional">
         <unit bldFile="installationservices/swi/group" mrp="installationservices/swi/group/security_swi.mrp"/>
@@ -79,23 +44,5 @@
         <unit bldFile="secureswitools/swisistools/group" mrp="secureswitools/swisistools/group/security_sistools.mrp"/>
       </component>
     </collection>
-    <collection id="appinstall_info" name="Application Installation Info" level="api">
-      <component id="appinstall_pub" filter="s60" name="Application Installation Public Interfaces" class="api">
-        <unit bldFile="appinstall_pub/group"/>
-        <!-- <unit bldFile="appinstall_pub/startup_list_management_api/tsrc/bc/startuplistmanagementapi/selfsignedstartupapp/group"/> -->
-        <!-- <unit bldFile="appinstall_pub/startup_list_management_api/tsrc/bc/startuplistmanagementapi/startupapp/group"/> -->
-      </component>
-      <component id="appinstall_plat" filter="s60" name="Application Installation Platform Interfaces" class="api">
-        <unit bldFile="appinstall_plat/group"/>
-        <unit bldFile="appinstall_plat/appmngr2runtimeapi/tsrc/group"/>
-        <!-- <unit bldFile="appinstall_plat/appmngr2runtimeapi/tsrc/data_src/sistest"/> -->
-      </component>
-      <component id="appinstall_test" filter="s60" name="Application Installation Test" purpose="development">
-        <!-- <unit bldFile="tsrc/group"/> -->
-      </component>
-      <component id="appinstall_metadata" name="Application Installation Metadata" class="config" introduced="^2" purpose="development" target="desktop">
-        <unit mrp="appinstall_info/appinstall_metadata/appinstall_metadata.mrp"/>
-      </component>
-    </collection>
   </package>
 </SystemDefinition>
--- a/package_definition_v2.xml	Tue Jun 15 13:36:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,101 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<SystemDefinition schema="3.0.0">
-  <package id="appinstall" name="Application Installation" levels="tool framework generic api">
-    <collection id="appinstaller" name="Application Installer" level="generic">
-      <component id="appmngr2" filter="s60" name="Application Manager 2" introduced="^2">
-        <unit bldFile="appinstaller/appmngr2/group"/>
-      </component>
-      <component id="appinstui" filter="s60" name="Application Installer UI" introduced="^2">
-        <unit bldFile="appinstaller/appinstui/group"/>
-      </component>
-    </collection>
-    <collection id="ncdengine" name="Nokia Content Discover" level="framework">
-      <component id="ncdengine_engine" filter="s60" name="NCD Engine" introduced="^1">
-        <unit bldFile="ncdengine/engine/group"/>
-      </component>
-      <component id="debuglogger" filter="s60" name="NCD Debug Logger" introduced="^1">
-        <!-- <unit bldFile="ncdengine/debuglogger/group"/> -->
-      </component>
-      <component id="ncdengine_build" filter="s60" name="NCD Build" introduced="^1">
-        <unit bldFile="ncdengine/group"/>
-      </component>
-    </collection>
-    <collection id="iaupdateapi_stub" name="IA Update API Stub" level="api">
-      <component id="iaupdateapi_stub_build" name="IA Update API Stub Build" filter="s60" introduced="^2">
-        <unit bldFile="iaupdateapi_stub/group"/>
-      </component>
-    </collection>
-    <collection id="iaupdate" name="Independent Apps Update" level="api">
-      <component id="iad" name="Software Update" filter="s60" introduced="^2">
-        <unit bldFile="iaupdate/iad/group"/>
-      </component>
-      <component id="iaupdate_help" filter="s60" name="IA Update Help" introduced="^2">
-        <unit bldFile="iaupdate/help/group"/>
-      </component>
-      <component id="iaupdate_build" filter="s60" name="IA Update Build" introduced="^2">
-        <unit bldFile="iaupdate/group"/>
-      </component>
-    </collection>
-    <collection id="installationservices" name="Installation Services" level="generic">
-      <component id="swi" name="Secure Software Install" purpose="optional">
-        <unit bldFile="installationservices/swi/group" mrp="installationservices/swi/group/security_swi.mrp"/>
-      </component>
-      <component id="swidevicetools" name="Secure Software Install Device Tools" introduced="8.1" purpose="development">
-        <unit bldFile="installationservices/swidevicetools/group" mrp="installationservices/swidevicetools/group/security_switools_device.mrp"/>
-      </component>
-      <component id="swcomponentregistry" name="Software Component Registry" introduced="^4" purpose="mandatory">
-        <unit bldFile="installationservices/swcomponentregistry/group" mrp="installationservices/swcomponentregistry/group/security_softwarecomponentregistry.mrp"/>
-      </component>
-      <component id="swinstallationfw" name="Software Installation Framework" introduced="^4" purpose="optional">
-        <unit bldFile="installationservices/swinstallationfw/group" mrp="installationservices/swinstallationfw/group/security_softwareinstallframework.mrp"/>
-      </component>
-      <component id="swtransactionservices" name="Software Transaction Services" introduced="^4" purpose="optional">
-        <unit bldFile="installationservices/swtransactionservices/group" mrp="installationservices/swtransactionservices/group/security_softwaretransactionservices.mrp"/>
-      </component>
-      <component id="refswinstallationplugin" name="Reference Software Installation Plugin" introduced="^4" purpose="development" class="plugin">
-        <unit bldFile="installationservices/refswinstallationplugin/group" mrp="installationservices/refswinstallationplugin/group/security_sifrefplugin.mrp"/>
-      </component>
-      <component id="refsoftwareappmgr" name="Reference Software Application Manager" introduced="^4" purpose="development">
-        <unit bldFile="installationservices/refsoftwareappmgr/group" mrp="installationservices/refsoftwareappmgr/group/security_referenceapplicationmanager.mrp"/>
-      </component>
-      <component id="switestfw" name="Software Install Test Framework" deprecated="^3" introduced="7.0" purpose="development" filter="test">
-        <unit mrp="installationservices/switestfw/group/install_testframework.mrp" bldFile="installationservices/switestfw/group"/>
-      </component>
-      <component id="swiconfig" name="Software Install Config" introduced="9.1" purpose="optional" class="config">
-        <unit bldFile="installationservices/swiconfig/group" mrp="installationservices/swiconfig/group/install_config.mrp"/>
-      </component>
-    </collection>
-    <collection id="secureswitools" name="Secure Software Install Tools" level="tool">
-      <component id="makekeys" name="MakeKeys" filter="gt" introduced="6.0" purpose="optional" target="desktop">
-        <unit bldFile="secureswitools/makekeys/group" mrp="secureswitools/makekeys/group/security_makekeys.mrp"/>
-      </component>
-      <component id="swianalysistoolkit" name="SWI Analysis Toolkit" purpose="development" target="desktop">
-        <unit bldFile="secureswitools/swianalysistoolkit/group" mrp="secureswitools/swianalysistoolkit/group/security_switools.mrp"/>
-      </component>
-      <component id="openssllib" name="OpenSSL Library" purpose="optional" target="desktop">
-        <unit mrp="secureswitools/openssllib/security_openssl.mrp"/>
-      </component>
-      <component id="swisistools" name="Secure Software Install SIS Tools" purpose="optional" target="desktop">
-        <unit bldFile="secureswitools/swisistools/group" mrp="secureswitools/swisistools/group/security_sistools.mrp"/>
-      </component>
-    </collection>
-    <collection id="appinstall_info" name="Application Installation Info" level="api">
-      <component id="appinstall_pub" filter="s60" name="Application Installation Public Interfaces" class="api">
-        <unit bldFile="appinstall_pub/group"/>
-        <!-- <unit bldFile="appinstall_pub/startup_list_management_api/tsrc/bc/startuplistmanagementapi/selfsignedstartupapp/group"/> -->
-        <!-- <unit bldFile="appinstall_pub/startup_list_management_api/tsrc/bc/startuplistmanagementapi/startupapp/group"/> -->
-      </component>
-      <component id="appinstall_plat" filter="s60" name="Application Installation Platform Interfaces" class="api">
-        <unit bldFile="appinstall_plat/group"/>
-        <unit bldFile="appinstall_plat/appmngr2runtimeapi/tsrc/group"/>
-        <!-- <unit bldFile="appinstall_plat/appmngr2runtimeapi/tsrc/data_src/sistest"/> -->
-      </component>
-      <component id="appinstall_test" filter="s60" name="Application Installation Test" purpose="development">
-        <!-- <unit bldFile="tsrc/group"/> -->
-      </component>
-      <component id="appinstall_metadata" name="Application Installation Metadata" class="config" introduced="^2" purpose="development" target="desktop">
-        <unit mrp="appinstall_info/appinstall_metadata/appinstall_metadata.mrp"/>
-      </component>
-    </collection>
-  </package>
-</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/package_map.xml	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<PackageMap root="sf" layer="mw" />
\ No newline at end of file
--- a/secureswitools/makekeys/group/bld.inf	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/makekeys/group/bld.inf	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 1999-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -23,19 +23,14 @@
 */
 
 PRJ_PLATFORMS
-TOOLS
+TOOLS2
 
 PRJ_EXPORTS
 
 PRJ_MMPFILES
-#ifdef TOOLS
-#ifndef TOOLS2
-#ifdef MSVCDOTNET
-makefile ../src/makekeys.net.fil
-#else //!MSVCDOTNET
-makefile ../src/makekeys.fil
-#endif // MSVCDOTNET
-#endif // TOOLS2
-#endif // TOOLS
 
-PRJ_TESTMMPFILES
+#ifdef TOOLS2
+#ifndef TOOLS2_LINUX
+makekeys.mmp
+#endif
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/makekeys/group/makekeys.mmp	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: 
+* This mmp file is used to replace calling makefile directly.
+*
+*/
+
+
+TARGET			makekeys.exe
+TARGETTYPE		exe
+
+
+USERINCLUDE 		../../swisistools/source/makesis
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+SYSTEMINCLUDE 		../../openssllib/import/inc
+
+
+SOURCEPATH 		../src
+SOURCE			CertificateGenerator.cpp
+SOURCE			CertificateRequestGenerator.cpp
+SOURCE			DSAKeyGenerator.cpp
+SOURCE			KeyGenerator.cpp	
+SOURCE			MAKEKEYS.CPP
+SOURCE			PARSECMD.CPP
+SOURCE			RSAKeyGenerator.cpp
+SOURCE			UTILS.CPP
+
+
+#ifndef TOOLS2_LINUX
+	MACRO			_UNICODE _CONSOLE _STLP_THREADS _WIN32 UNICODE 
+#else
+	MACRO			_UNICODE _CONSOLE UNICODE 
+#endif
+
+STATICLIBRARY			eay32 
+
+OPTION				GCC -w
+OPTION				GCC -fno-stack-check
+OPTION				GCC -fpermissive
--- a/secureswitools/makekeys/group/security_makekeys.mrp	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/makekeys/group/security_makekeys.mrp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,19 +1,3 @@
-#
-# 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: 
-#
-
 component	security_makekeys
 source	\sf\mw\appinstall\secureswitools\makekeys
 #binary	\security\makekeys\group tools
--- a/secureswitools/makekeys/src/MAKEKEYS.CPP	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/makekeys/src/MAKEKEYS.CPP	Thu Jul 22 16:35:01 2010 +0100
@@ -1,8 +1,8 @@
 /*
-* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 1997-2010 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"
+* under the terms of the License "Eclipse Public License v1.0"
 * which accompanies this distribution, and is available
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
 *
@@ -56,7 +56,7 @@
 :m_fVerbose(FALSE)
 	{ ; }
 
-int CMakeKeys::Run(const int argc, const _TCHAR *argv[], const _TCHAR *envp[])
+int CMakeKeys::Run(const int argc, const _TCHAR *argv[])
 // Inputs   : argc, argv, envp - The command line passed to the process
 	{	
 	BOOL bValid = TRUE;
@@ -117,6 +117,7 @@
 
 			OUT << _T("Warning: the private key should be encrypted with the -password option") << endl;
 			OUT << _T("Do you want to use a password (y/n)? ");
+			OUT.flush();
 
 			cin >> Warn;
 
@@ -166,6 +167,7 @@
 
 				OUT << _T("Warning: the private key should be encrypted with the -password option") << endl;
 				OUT << _T("Do you want to use a password (y/n)? ");
+				OUT.flush();
 
 				cin >> Warn;
 
@@ -296,9 +298,13 @@
 	// main function - constructs a CMakeKeys object and calls it's run method
 	extern "C"
 		{
-		int _tmain(int argc, const _TCHAR *argv[], const _TCHAR *envp[])
+		int main(int argc, const char *argv[], const char *envp[])
 			{
+			// MingW doesn't support _tmain(),
+			// so using GetCommandLineW() to get wide args.
+			wchar_t** argvW = CommandLineToArgvW( GetCommandLineW(), &argc);
+			
 			CMakeKeys app;
-			return app.Run(argc, argv, envp);
+			return app.Run(argc, argvW);
 			}
 		}
--- a/secureswitools/makekeys/src/MAKEKEYS.H	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/makekeys/src/MAKEKEYS.H	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -53,7 +53,7 @@
 	public:
 		CMakeKeys();
 		
-		int  Run(const int argc, const _TCHAR *argv[], const _TCHAR *envp[]);
+		int  Run(const int argc, const _TCHAR *argv[]);
 			
 	public: 
 		CKeyGenerator* m_KeyGen;
--- a/secureswitools/makekeys/src/openssllicense.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/makekeys/src/openssllicense.h	Thu Jul 22 16:35:01 2010 +0100
@@ -2,7 +2,7 @@
 * Copyright (c) 2006-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"
+* under the terms of the License "Eclipse Public License v1.0"
 * which accompanies this distribution, and is available
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
 *
--- a/secureswitools/openssllib/import/bin/deb/distribution.policy	Tue Jun 15 13:36:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-Category E
-OSD:	Optional Replaceable	Software Install Tools PC Side
-Export Restricted
-# This code has been obtained from www.OpenSSL.org and is
-# potentially subject to license and export restrictions.
-
--- a/secureswitools/openssllib/import/bin/linux-x86/deb/distribution.policy	Tue Jun 15 13:36:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-Category E
-OSD:	Optional Replaceable	Software Install Tools PC Side
-Export Restricted
-# This code has been obtained from www.OpenSSL.org and is
-# potentially subject to license and export restrictions.
-
--- a/secureswitools/openssllib/import/bin/linux-x86/rel/distribution.policy	Tue Jun 15 13:36:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-Category E
-OSD:	Optional Replaceable	Software Install Tools PC Side
-Export Restricted
-# This code has been obtained from www.OpenSSL.org and is
-# potentially subject to license and export restrictions.
-
--- a/secureswitools/openssllib/import/bin/rel/distribution.policy	Tue Jun 15 13:36:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-Category E
-OSD:	Optional Replaceable	Software Install Tools PC Side
-Export Restricted
-# This code has been obtained from www.OpenSSL.org and is
-# potentially subject to license and export restrictions.
-
--- a/secureswitools/swianalysistoolkit/group/bld.inf	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swianalysistoolkit/group/bld.inf	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -22,27 +22,24 @@
 */
 
 PRJ_PLATFORMS
-DEFAULT TOOLS
-TOOLS2
+DEFAULT TOOLS2
+TOOLS
 
 PRJ_MMPFILES
 
-#ifdef TOOLS 
-#ifndef TOOLS2
-#ifdef SYMBIAN_OLD_EXPORT_LOCATION
-makefile ../source/chainvalidityandinstallfilestatustools/dumpchainvaliditytool/dumpchainvaliditytool.fil
-#else
-makefile ../source/chainvalidityandinstallfilestatustools/dumpchainvaliditytool/dumpchainvaliditytool2.fil
+#ifdef TOOLS2
+#ifndef TOOLS2_LINUX
+dumpchainvaliditytool.mmp
+dumpinstallfilestatustool.mmp
+dumpswicertstoretool.mmp
+#endif
 #endif
 
-makefile ../source/chainvalidityandinstallfilestatustools/dumpinstallfilestatustool/dumpinstallfilestatustool.fil
-makefile ../source/dumpswicertstoretool/dumpswicertstoretool.fil
 
 #ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK 
+#ifdef TOOLS
 makefile ../source/dumpswiregistrytool/dumpswiregistrytool.fil
 #endif
-
-#endif
 #endif
 
 
@@ -186,7 +183,7 @@
 ../test/tdumpregistry/dumpregistry-output/a0000206.out /epoc32/winscw/c/tswi/tdumpregistry/dumpregistry-output/a0000206.out
 ../test/tdumpregistry/dumpregistry-output/a0000206.tmp /epoc32/winscw/c/tswi/tdumpregistry/dumpregistry-output/a0000206.tmp
 ../test/tdumpregistry/testregistry.pl /epoc32/winscw/c/tswi/tdumpregistry/testregistry.pl
-
+#endif
 
 // tdumpcertstore
 ../test/tdumpcertstore/certstore.bat /epoc32/winscw/c/tswi/tdumpcertstore/certstore.bat
@@ -220,5 +217,4 @@
 ../test/tdumpcertstore/predumpcertstoretest.bat /epoc32/winscw/c/tswi/tdumpcertstore/predumpcertstoretest.bat
 ../test/tdumpcertstore/postdumpcertstoretest.bat /epoc32/winscw/c/tswi/tdumpcertstore/postdumpcertstoretest.bat
 ../test/tdumpcertstore/testswicertstore.pl /epoc32/winscw/c/tswi/tdumpcertstore/testswicertstore.pl
-#endif
 // End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swianalysistoolkit/group/dumpchainvaliditytool.mmp	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: 
+* This mmp file is used to replace calling makefile directly.
+*
+*/
+
+
+TARGET			dumpchainvaliditytool.exe
+TARGETTYPE		exe
+
+
+USERINCLUDE 			../source/chainvalidityandinstallfilestatustools/dumpchainvaliditytool
+USERINCLUDE 			../source/chainvalidityandinstallfilestatustools/common
+USERINCLUDE 			../source/common
+USERINCLUDE 			../../swisistools/source/makesis
+USERINCLUDE 			../../swisistools/source/common
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+SYSTEMINCLUDE 			../../openssllib/import/inc 
+
+SOURCEPATH			../source/chainvalidityandinstallfilestatustools
+
+SOURCE				./dumpchainvaliditytool/dumpchainvalidity.cpp
+SOURCE				./dumpchainvaliditytool/options.cpp
+SOURCE				./common/certificatechain.cpp
+SOURCE				./common/dumpchainvaliditytool.cpp
+SOURCE				./common/launchprocess.cpp
+SOURCE				./common/siscertificatechain.cpp
+SOURCE				./common/swicertstore.cpp
+SOURCE				../common/osinterface.cpp
+
+#ifndef TOOLS2_LINUX
+	MACRO			_UNICODE _CONSOLE _STLP_THREADS _WIN32 GENERATE_ERRORS DUMPCHAINVALIDITYTOOL //UNICODE
+#else
+	MACRO			_UNICODE _CONSOLE UNICODE GENERATE_ERRORS DUMPCHAINVALIDITYTOOL	
+#endif
+
+STATICLIBRARY			eay32 
+STATICLIBRARY			shlwapi 
+
+OPTION				GCC -w
+OPTION				GCC -fno-stack-check
+OPTION				GCC -fpermissive
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swianalysistoolkit/group/dumpinstallfilestatustool.mmp	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: 
+* This mmp file is used to replace calling makefile directly.
+*
+*/
+
+
+TARGET			dumpinstallfilestatustool.exe
+TARGETTYPE		exe
+
+
+USERINCLUDE 			../source/chainvalidityandinstallfilestatustools/dumpinstallfilestatustool
+USERINCLUDE 			../source/chainvalidityandinstallfilestatustools/common
+USERINCLUDE 			../source/common
+USERINCLUDE 			../../swisistools/source/makesis
+USERINCLUDE 			../../swisistools/source/common
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+SYSTEMINCLUDE 			../../openssllib/import/inc 
+
+SOURCEPATH			../source/chainvalidityandinstallfilestatustools
+
+SOURCE				./dumpinstallfilestatustool/dumpinstallfilestatustool.cpp
+SOURCE				./dumpinstallfilestatustool/sisfiledata.cpp
+SOURCE				./dumpinstallfilestatustool/options.cpp
+SOURCE				./common/certificatechain.cpp
+SOURCE				./common/dumpchainvaliditytool.cpp
+SOURCE				./common/launchprocess.cpp
+SOURCE				./common/siscertificatechain.cpp
+SOURCE				./common/swicertstore.cpp
+SOURCE				../common/osinterface.cpp
+
+#ifndef TOOLS2_LINUX
+	MACRO			_UNICODE _CONSOLE _STLP_THREADS _WIN32 GENERATE_ERRORS DUMPINSTALLFILESTATUSTOOL //UNICODE
+#else
+	MACRO			_UNICODE _CONSOLE UNICODE GENERATE_ERRORS DUMPINSTALLFILESTATUSTOOL	
+#endif
+
+STATICLIBRARY			eay32 
+STATICLIBRARY			shlwapi 
+
+OPTION				GCC -w
+OPTION				GCC -fno-stack-check
+OPTION				GCC -fpermissive
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swianalysistoolkit/group/dumpswicertstoretool.mmp	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: 
+* This mmp file is used to replace calling makefile directly.
+*
+*/
+
+
+TARGET			dumpswicertstoretool.exe
+TARGETTYPE		exe
+
+USERINCLUDE 		../source/dumpswicertstoretool
+USERINCLUDE 		../source/common
+USERINCLUDE 		../source/common/utf8
+USERINCLUDE 		../../swisistools/source/makesis
+
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
+SYSTEMINCLUDE 		../../openssllib/import/inc
+
+
+SOURCEPATH 		../source/common/utf8
+SOURCE			utf8.cpp
+
+SOURCEPATH 		../source/common
+SOURCE			osinterface.cpp  
+SOURCE			ucmp.cpp 
+SOURCE			streamreader.cpp
+
+SOURCEPATH		../source/dumpswicertstoretool
+
+SOURCE			certificate.cpp 
+SOURCE			datalocator.cpp 
+SOURCE			options.cpp  
+SOURCE			pfsdump.cpp 
+SOURCE			dumpswicertstoretool.cpp  
+SOURCE			swicertstoremetadata.cpp
+
+
+#ifndef TOOLS2_LINUX
+	MACRO			_UNICODE _CONSOLE _STLP_THREADS _WIN32 _MBCS DUMPSWICERTSTORETOOL	
+#else
+	MACRO			_UNICODE _CONSOLE UNICODE DUMPSWICERTSTORETOOL
+	STATICLIBRARY		crypto 
+#endif
+
+STATICLIBRARY			eay32 
+STATICLIBRARY			shlwapi 
+
+OPTION				GCC -w
+OPTION				GCC -fno-stack-check
+OPTION				GCC -fpermissive
--- a/secureswitools/swianalysistoolkit/group/security_switools.mrp	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swianalysistoolkit/group/security_switools.mrp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,19 +1,3 @@
-#
-# 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: 
-#
-
 component	security_switools
 source	\sf\mw\appinstall\secureswitools\swianalysistoolkit
 binary	\sf\mw\appinstall\secureswitools\swianalysistoolkit\group	all
--- a/secureswitools/swianalysistoolkit/source/chainvalidityandinstallfilestatustools/common/certificatechain.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swianalysistoolkit/source/chainvalidityandinstallfilestatustools/common/certificatechain.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -450,7 +450,7 @@
 						capabilities.append("Unknown"+capability);
 						}
 				
-					iDevCapabilities += pow(2,capability);
+					iDevCapabilities += pow((double)2,capability);
 					}
 				capability++;
 				}
@@ -540,7 +540,7 @@
 				buf[j] = *(buffer++);
 				}
 
-			deviceId.append(buf);
+			deviceId.assign(buf,(KDeviceIdLength-2));
 			deviceId.append("\n");
 			}
 		}
--- a/secureswitools/swianalysistoolkit/source/chainvalidityandinstallfilestatustools/dumpinstallfilestatustool/dumpinstallfilestatustool.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swianalysistoolkit/source/chainvalidityandinstallfilestatustools/dumpinstallfilestatustool/dumpinstallfilestatustool.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -15,7 +15,7 @@
 *
 */
 
-
+#include <memory>
 #include "dumpinstallfilestatustool.h"
 #include "osinterface.h"
 #ifdef _MSC_VER
--- a/secureswitools/swianalysistoolkit/source/chainvalidityandinstallfilestatustools/dumpinstallfilestatustool/options.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swianalysistoolkit/source/chainvalidityandinstallfilestatustools/dumpinstallfilestatustool/options.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -263,7 +263,7 @@
 				{
 					if(capabilities.compare(listOfCapabilities[i])==0)
 					{
-					userCaps += pow(2,i);
+					userCaps += pow((double)2,i);
 					}
 				}
 			}
--- a/secureswitools/swianalysistoolkit/source/common/streamreader.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swianalysistoolkit/source/common/streamreader.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -225,7 +225,7 @@
 	// This memory will be freed by the caller of this function
 	char *ptrUtf8 = new char[targetLength + 1];
 	
-	UTF16* sourceStart = static_cast<UTF16*>(aSource);
+	UTF16* sourceStart = reinterpret_cast<UTF16*>(aSource);
 	UTF16* sourceEnd = sourceStart + aSrcLength; 
 	UTF8* targetStart = reinterpret_cast<UTF8*>(ptrUtf8);
 	UTF8* targetEnd;
--- a/secureswitools/swianalysistoolkit/source/dumpswicertstoretool/pfsdump.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swianalysistoolkit/source/dumpswicertstoretool/pfsdump.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -206,7 +206,8 @@
 Stream StoreFile::RootStream()
 	{
 	Toc::Head const& head=iToc.Header();
-	return FindStream(head.Root());
+	Handle hndl = static_cast<Handle>(head.Root());
+	return FindStream(hndl);
 	}
 
 Stream StoreFile::FindStream(Handle& aHandle)
--- a/secureswitools/swianalysistoolkit/source/dumpswicertstoretool/swicertstoremetadata.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swianalysistoolkit/source/dumpswicertstoretool/swicertstoremetadata.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -143,7 +143,7 @@
    				capability.append("Unknown"+unknownIndex);
    				unknownIndex++;
    				}
-  			cap += pow(2,j);
+  			cap += pow((double)2,j);
    			}
    		else
    			{
--- a/secureswitools/swisistools/group/bld.inf	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/group/bld.inf	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 1999-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -111,6 +111,9 @@
 ../test/testmakesis/utf8.pkg /epoc32/winscw/c/tswi/utf8.pkg
 ../test/testmakesis/utf8.txt /epoc32/winscw/c/tswi/utf8.txt
 
+// file for testMakesis.pl to test 
+../test/testmakesis/largelanguagecodes.pkg /epoc32/winscw/c/tswi/largelanguagecodes.pkg
+
 // signsis
 ../test/tsignsis/largefile.zip									/epoc32/winscw/c/tswi/tsignsis/largefile.zip
 ../test/tsignsis/largedata.pkg								/epoc32/winscw/c/tswi/tsignsis/largedata.pkg
@@ -1729,6 +1732,7 @@
 ../test/tinterpretsisinteg/interpretsism0010_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/interpretsism0010_db.bat
 ../test/tinterpretsisinteg/interpretsism0011_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/interpretsism0011_db.bat
 ../test/tinterpretsisinteg/interpretsism0016c_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/interpretsism0016c_db.bat
+../test/tinterpretsisinteg/interpretsism001a_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/interpretsism001a_db.bat
 ../test/tinterpretsisinteg/interpretsism001_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/interpretsism001_db.bat
 ../test/tinterpretsisinteg/interpretsism002_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/interpretsism002_db.bat
 ../test/tinterpretsisinteg/interpretsism003_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/interpretsism003_db.bat
@@ -1809,6 +1813,7 @@
 ../test/tinterpretsisinteg/makesism0010_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/makesism0010_db.bat
 ../test/tinterpretsisinteg/makesism0011_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/makesism0011_db.bat
 ../test/tinterpretsisinteg/makesism0016c_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/makesism0016c_db.bat
+../test/tinterpretsisinteg/makesism001a_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/makesism001a_db.bat 
 ../test/tinterpretsisinteg/makesism001_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/makesism001_db.bat 
 ../test/tinterpretsisinteg/makesism002_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/makesism002_db.bat 
 ../test/tinterpretsisinteg/makesism003_db.bat /epoc32/winscw/c/tswi/tinterpretsisinteg/makesism003_db.bat 
@@ -1902,6 +1907,9 @@
 ../test/tinterpretsisinteg/testdatascr/base_r.pkg /epoc32/winscw/c/tswi/tinterpretsisinteg/testdatascr/base_r.pkg
 ../test/tinterpretsisinteg/testdatascr/hiddensa.pkg /epoc32/winscw/c/tswi/tinterpretsisinteg/testdatascr/hiddensa.pkg
 
+../test/tinterpretsisinteg/TestElseIfData/TestElseIf.pkg /epoc32/winscw/c/tswi/tinterpretsisinteg/TestElseIfData/TestElseIf.pkg
+../test/tinterpretsisinteg/TestElseIfData/file0 /epoc32/winscw/c/tswi/tinterpretsisinteg/TestElseIfData/file0
+
 // exports for scrtool
 ../test/tscrtool/tscrtool.ini				/epoc32/winscw/c/tswi/tscrtool/tscrtool.ini
 ../test/tscrtool/tscrtool.pl				/epoc32/winscw/c/tswi/tscrtool/tscrtool.pl
--- a/secureswitools/swisistools/group/security_sistools.mrp	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/group/security_sistools.mrp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,19 +1,3 @@
-#
-# 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: 
-#
-
 component	security_sistools
 source	\sf\mw\appinstall\secureswitools\swisistools
 binary	\sf\mw\appinstall\secureswitools\swisistools\group	all
--- a/secureswitools/swisistools/source/dumpsis/options.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/source/dumpsis/options.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -2,7 +2,7 @@
 * Copyright (c) 2004-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"
+* under the terms of the License "Eclipse Public License v1.0"
 * which accompanies this distribution, and is available
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
 *
--- a/secureswitools/swisistools/source/interpretsis/openssllicense.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/source/interpretsis/openssllicense.h	Thu Jul 22 16:35:01 2010 +0100
@@ -1,7 +1,7 @@
 // Copyright (c) 2003-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
--- a/secureswitools/swisistools/source/interpretsislib/dbhelper.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/source/interpretsislib/dbhelper.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -46,6 +46,50 @@
 	else 
 		dbName = wstring2string(aDrivePath) + "\\sys\\install\\scr\\provisioned\\scr.db";
 
+	std::wstring wdbname(string2wstring(dbName));
+	//Create the SCR DB if not present in the System Drive
+	if(!FileExists(wdbname))
+		{
+		const char* epocRoot = getenv("EPOCROOT");
+		if(NULL == epocRoot)
+			{
+				std::string emsg(" EPOCROOT environment variable not specified.");
+				int retCode = ExceptionCodes::EEnvNotSpecified;
+				throw InterpretSisError(emsg,retCode);
+			}
+		std::string epocRootStr(epocRoot); 
+
+		#ifndef __TOOLS2_LINUX__
+		std::wstring swEnvInfo = string2wstring(epocRootStr) + L"epoc32\\tools\\create_db.xml";
+		#else
+		std::wstring swEnvInfo = string2wstring(epocRootStr) + L"epoc32/tools/create_db.xml";
+		#endif
+
+		if(FileExists(swEnvInfo))
+			{
+			std::string executable = "scrtool.exe";
+			std::string command;
+			
+			command = executable + " -c " + dbName + " -f " + wstring2string(swEnvInfo);
+			
+			std::cout << "Creating DB : " << command << std::endl;
+			
+			int error = system(command.c_str());
+			if(error != 0)
+				{
+					std::string err = "Scrtool failed to create the database.";
+					throw InterpretSisError(err, DATABASE_UPDATE_FAILED);
+				}
+			}
+		else
+			{
+				LERROR(L"Failed to create the database.");
+				std::string emessage(" XML file /epoc32/tools/create_db.xml which contains software environment information is not found.");
+				int returnCode = ExceptionCodes::EFileNotPresent;
+				throw InterpretSisError(emessage,returnCode);
+			}
+		}
+
 	try
 		{
 		iScrDbHandler = new CDbProcessor(dllName, dbName);		
--- a/secureswitools/swisistools/source/interpretsislib/expressionevaluator.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/source/interpretsislib/expressionevaluator.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -95,14 +95,14 @@
     }
 
 
-ExpressionResult ExpressionEvaluator::Evaluate(const CSISExpression* aExpression)
+ExpressionResult ExpressionEvaluator::Evaluate(const CSISExpression* aExpression, bool aLogInfo )
     {
 	Require(aExpression);
-	return Evaluate(*aExpression);
+	return Evaluate(*aExpression, aLogInfo);
     }
 
 
-ExpressionResult ExpressionEvaluator::Evaluate(const CSISExpression& aExpression)
+ExpressionResult ExpressionEvaluator::Evaluate(const CSISExpression& aExpression, bool aLogInfo)
     {
 	if (++iExpressionDepth > KMaxExpressionDepth)
 	    {
@@ -122,8 +122,8 @@
 	case CSISExpression::EBinOpGreaterThanOrEqual:
 	case CSISExpression::EBinOpLessThanOrEqual:
         {
-		const ExpressionResult resultLeft = Evaluate( aExpression.LHS() );
-		const ExpressionResult resultRight = Evaluate( aExpression.RHS() );
+		const ExpressionResult resultLeft = Evaluate( aExpression.LHS(), aLogInfo );
+		const ExpressionResult resultRight = Evaluate( aExpression.RHS(), aLogInfo  );
         //
 	    switch (aExpression.Operator())
 	        {
@@ -152,41 +152,41 @@
     
     case CSISExpression::ELogOpAnd:
 		{
-		ExpressionResult tmp1 = Evaluate(aExpression.LHS());
-		ExpressionResult tmp2 = Evaluate(aExpression.RHS());
+		ExpressionResult tmp1 = Evaluate(aExpression.LHS(), aLogInfo );
+		ExpressionResult tmp2 = Evaluate(aExpression.RHS(), aLogInfo );
 		iTempResult = ExpressionResult(tmp1.BoolValue() && tmp2.BoolValue());
 		break;
 		}
 
 	case CSISExpression::ELogOpOr:
 		{
-		ExpressionResult tmp1 = Evaluate(aExpression.LHS());
+		ExpressionResult tmp1 = Evaluate(aExpression.LHS(), aLogInfo );
 		if (tmp1.BoolValue())
     		{
 			iTempResult = ExpressionResult(true);
 	    	}
 		else
 		    {
-			iTempResult = ExpressionResult(Evaluate(aExpression.RHS())).BoolValue();
+			iTempResult = ExpressionResult(Evaluate(aExpression.RHS(), aLogInfo)).BoolValue();
 		    }
 		break;
 		}
 
 	case CSISExpression::EUnaryOpNot:
-		iTempResult=!Evaluate(aExpression.RHS());
+		iTempResult=!Evaluate(aExpression.RHS(), aLogInfo );
 		break;
 
 	case CSISExpression::EFuncAppProperties:
         {
-        const TUint32 resultLeft = Evaluate( aExpression.LHS() ).IntegerValue();
-        const TUint32 resultRight = Evaluate( aExpression.RHS() ).IntegerValue();
+        const TUint32 resultLeft = Evaluate( aExpression.LHS(), aLogInfo  ).IntegerValue();
+        const TUint32 resultRight = Evaluate( aExpression.RHS(), aLogInfo  ).IntegerValue();
         //
 		iTempResult = iExpEnv.ApplicationProperty( resultLeft, resultRight );
 		break;
         }
 
 	case CSISExpression::EFuncDevProperties:
-		iTempResult = ExpressionResult(iExpEnv.Package(Evaluate(aExpression.RHS()).IntegerValue()));
+		iTempResult = ExpressionResult(iExpEnv.Package(Evaluate(aExpression.RHS(), aLogInfo ).IntegerValue()));
 		break;
 
 	case CSISExpression::EFuncExists:
@@ -218,7 +218,7 @@
 			}
 		else
 			{
-			iTempResult = ExpressionResult(iExpEnv.FindFile(pS.GetString()));
+			iTempResult = ExpressionResult(iExpEnv.FindFile(pS.GetString(), aLogInfo));
 			}
 		}
 		break;
@@ -238,7 +238,7 @@
 	case CSISExpression::EPrimTypeVariable:
 		{
         const int variableId = aExpression.IntValue();
-        const int variableValue = iExpEnv.Variable( variableId );
+        const int variableValue = iExpEnv.Variable( variableId, aLogInfo);
         //
 		iTempResult = ExpressionResult( variableValue );
 		break;
@@ -292,7 +292,7 @@
     }
 
 
-bool ExpressionEnvironment::FindFile( const std::wstring& aFileName )
+bool ExpressionEnvironment::FindFile( const std::wstring& aFileName, bool aLogInfo )
     {
     bool fileExists = false;
 
@@ -308,7 +308,10 @@
     if ( fileName.length() >= 1 && fileName[ 0 ] == L'\\' )
         {
         // Bad file name?
-  		LWARN(L"\tAssuming file path \'" << aFileName << L"\' refers to Z:" );
+		if( aLogInfo )
+			{
+			LWARN(L"\tAssuming file path \'" << aFileName << L"\' refers to Z:" );
+			}  		
         fileName = L"Z:" + fileName;
         }
 
@@ -355,11 +358,14 @@
 		throw InvalidSis( "", error, INVALID_SIS );
         }
     //
-    std::ostringstream stream;
-    stream << "\tIF EXISTS(\'" << narrowFileName << "\') => " << fileExists;
-    std::string msg = stream.str();
-    std::wstring finalMessage = Utf8ToUcs2( msg );
-    LINFO( finalMessage );
+	if(aLogInfo)
+		{
+		std::ostringstream stream;
+		stream << "\tIF EXISTS(\'" << narrowFileName << "\') => " << fileExists;
+		std::string msg = stream.str();
+		std::wstring finalMessage = Utf8ToUcs2( msg );
+		LINFO( finalMessage );
+		}
     //
     return fileExists;
     }
@@ -396,7 +402,7 @@
     }
 
 
-int ExpressionEnvironment::Variable( int aVariableId )
+int ExpressionEnvironment::Variable( int aVariableId, bool aLogInfo )
     {
     int result = 0;
 
@@ -417,23 +423,32 @@
 			if (!iSisFile.IsSupportedLanguage((TUint32)result))
 				{
 				int firstLanguage = iSisFile.GetLanguage(); // get the first language
-				std::ostringstream stream;
-				stream << "Input language " << result << " is not supported by SIS file. Using first language " <<firstLanguage;
-				std::string msg = stream.str();
-				std::wstring finalMessage = Utf8ToUcs2( msg );
-				LWARN( finalMessage );	
+				if(aLogInfo)
+					{
+					std::ostringstream stream;
+					stream << "Input language " << result << " is not supported by SIS file. Using first language " <<firstLanguage;
+					std::string msg = stream.str();
+					std::wstring finalMessage = Utf8ToUcs2( msg );
+					LWARN( finalMessage );	
+					}
 				result = firstLanguage;
 				}
 			}
-        std::ostringstream stream;
-        stream << "\tIF " << attributeName << " ... where [" << attributeName << " = " << result << "]";
-        std::string msg = stream.str();
-        std::wstring finalMessage = Utf8ToUcs2( msg );
-        LINFO( finalMessage );
+        if(aLogInfo)
+			{
+			std::ostringstream stream;
+			stream << "\tIF " << attributeName << " ... where [" << attributeName << " = " << result << "]";
+			std::string msg = stream.str();
+			std::wstring finalMessage = Utf8ToUcs2( msg );
+			LINFO( finalMessage );
+			}
         }
 	else if ( aVariableId == KVariableLanguage )
     	{
-		LWARN(L"Disregarding language selection. Using ELangEnglish");
+		if(aLogInfo)
+			{
+			LWARN(L"Disregarding language selection. Using ELangEnglish");
+			}
 		result = 1;
     	}
     else
--- a/secureswitools/swisistools/source/interpretsislib/expressionevaluator.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/source/interpretsislib/expressionevaluator.h	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -50,7 +50,7 @@
 	 * Check whether a file exists, corresponds to EXISTS() function in package
 	 * format.
 	 */
-	bool FindFile(const std::wstring& aFileName);
+	bool FindFile(const std::wstring& aFileName, bool aLogInfo = true);
 
 	/**
 	 * Queries an application property, which is a key,value pair associated 
@@ -64,7 +64,7 @@
 	 */
 	bool Package(TUint32 aKey);
 
-	int Variable( int aVariableId );
+	int Variable( int aVariableId, bool aLogInfo = true );
 
 	const std::wstring GetPackageName();
 
@@ -258,8 +258,8 @@
 	void SetFile(const SisFile& aSisFile);
 	void SetRegistry(const SisRegistry& aSisRegistry);
 	
-	ExpressionResult Evaluate(const CSISExpression& aExpression);
-	ExpressionResult Evaluate(const CSISExpression* aExpression);
+	ExpressionResult Evaluate(const CSISExpression& aExpression, bool aLogInfo = true);
+	ExpressionResult Evaluate(const CSISExpression* aExpression, bool aLogInfo = true);
 
 private:
 	void Require(const void *aPointer) const;
--- a/secureswitools/swisistools/source/interpretsislib/installer.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/source/interpretsislib/installer.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -255,6 +255,56 @@
 	}
 }
 
+void Installer::ProcessConditionalBlockWarnings(const CSISInstallBlock& aInstallBlock, 
+											  ExpressionEvaluator& aEvaluator,
+											  const SisFile& aFile
+											  ) 
+	{
+	const CSISArray<CSISIf, CSISFieldRoot::ESISIf>& ifs = aInstallBlock.Ifs();
+	for (int i = 0; i < ifs.size(); ++i)
+		{
+		const CSISIf& ifBlock = ifs[i];
+
+		if (ifBlock.WasteOfSpace())
+			{
+			return;
+			}
+
+		// Main expression
+		if ( aEvaluator.Evaluate(ifBlock.Expression(),false).BoolValue() )
+			{
+			ProcessInstallBlockWarnings(ifBlock.InstallBlock(), aFile);
+			ProcessConditionalBlockWarnings(ifBlock.InstallBlock(), aEvaluator, aFile);
+			continue;
+			}
+		
+		int elseCount = ifBlock.ElseIfCount();
+		for (int i = 0; i < elseCount; ++i)
+			{
+			const CSISElseIf& elseIfBlock = ifBlock.ElseIf(i) ;
+			if ( aEvaluator.Evaluate(elseIfBlock.Expression(),false).BoolValue())
+				{
+				ProcessInstallBlockWarnings(elseIfBlock.InstallBlock(), aFile);
+				ProcessConditionalBlockWarnings(elseIfBlock.InstallBlock(), aEvaluator, aFile);
+				break;	// Stop processing else if blocks
+				}
+			}
+		} 
+	}
+
+void Installer::ProcessInstallBlockWarnings(const CSISInstallBlock& aInstallBlock, const SisFile& aFile)
+	{
+	aFile.ProcessEmbeddedFileWarning(aInstallBlock);
+	
+	std::string error;
+	bool result = aFile.ProcessInstallOptionsWarning(aInstallBlock,error);	
+	if(result == false)
+		{
+		std::string x;
+		throw InvalidSis(Ucs2ToUtf8(aFile.GetPackageName(),x),
+			error, SIS_NOT_SUPPORTED);
+		}
+	}
 
 TInt Installer::Install(const InstallSISFile& aInstallSISFile)
 {
@@ -273,6 +323,9 @@
 	// check file is acceptable
 	file.CheckValid();
 
+	const CSISController& ctrl = file.GetController();	
+	ProcessConditionalBlockWarnings(ctrl.InstallBlock(), *iExpressionEvaluator, file);
+	
 	if (!DependenciesOk(file))
 	{
 		return MISSING_DEPENDENCY;
--- a/secureswitools/swisistools/source/interpretsislib/installer.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/source/interpretsislib/installer.h	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -120,6 +120,12 @@
 	void FilterNonBlockingFilesOfFilename(const SisFile& aFile, const std::wstring& target);
 	void WarnEclipseOverWrite(const SisFile& aFile);
 
+	void ProcessConditionalBlockWarnings(const CSISInstallBlock& aInstallBlock, 
+												  ExpressionEvaluator& aEvaluator,
+												  const SisFile& aFile
+												  ); 
+	void ProcessInstallBlockWarnings(const CSISInstallBlock& aInstallBlock, const SisFile& aFile);
+
 	// Adorned methods
 	void AdornedProcessingOfFile(const std::wstring& aTarget, std::wstring& aUnadornedName, 
 										std::list<std::wstring>& aAdornedFileNamesFound);
--- a/secureswitools/swisistools/source/interpretsislib/sisfile.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/source/interpretsislib/sisfile.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -169,7 +169,7 @@
 }
 
 void SisFile::CheckValid() const
-	{
+{
 	std::string error;
 
 	CSISInfo::TSISInstallationType installType = iContents.Controller().SISInfo().InstallationType();
@@ -198,11 +198,26 @@
 	failed = failed || !success;
 
 	const CSISInstallBlock& blk = iContents.Controller().InstallBlock();
+	success = ProcessInstallOptionsWarning( blk, error);
 
-	int fileCount = blk.FileCount();
+	failed = failed || !success;
+
+	if (failed)
+		{
+		std::string x;
+		throw InvalidSis(Ucs2ToUtf8(this->GetPackageName(),x),
+			error, SIS_NOT_SUPPORTED);
+		}
+	}
+
+bool SisFile::ProcessInstallOptionsWarning(const CSISInstallBlock& aInstallBlock, std::string& aError)
+	{
+	bool success = true;
+
+	int fileCount = aInstallBlock.FileCount();
 	for(int i = 0; i < fileCount; ++i)
 		{
-		const CSISFileDescription& fD = blk.FileDescription(i);
+		const CSISFileDescription& fD = aInstallBlock.FileDescription(i);
         const CSISFileDescription::TSISFileOperation operation = fD.Operation();
 		std::wstring target(fD.Target().GetString());
         //
@@ -257,19 +272,12 @@
 		//
         if (!success)
     		{
-			error += "SIS File contains install options : "+operation;
+			aError += "SIS File contains install options : "+operation;
 			break;
 	    	}
 		}
-	failed = failed || !success;
+	}
 
-	if (failed)
-		{
-		std::string x;
-		throw InvalidSis(Ucs2ToUtf8(this->GetPackageName(),x),
-			error, SIS_NOT_SUPPORTED);
-		}
-	}
 
 std::wstring SisFile::GetVendorName() const
 	{
@@ -436,8 +444,7 @@
 				ProcessInstallBlock(ifElseBlock.InstallBlock(), aFiles, aEvaluator, aDrivePath, aInstallingDrive);
 				break;	// Stop processing else if blocks
 				}
-			// Process the rest of the files
-			GetInstallableFiles(aFiles, ifElseBlock.InstallBlock(), aDrivePath, aInstallingDrive);
+			
 			}
 		} 
 	}
@@ -458,6 +465,18 @@
 	return pkgs;
 }
 
+void SisFile::ProcessEmbeddedFileWarning(const CSISInstallBlock& aInstallBlock) const
+	{
+	TControllerMap embeddedCtls;
+	aInstallBlock.GetEmbeddedControllers(embeddedCtls, false);
+	for (TControllerMapConstIter iter = embeddedCtls.begin(); iter != embeddedCtls.end(); ++iter)
+		{
+		const CSISController* ctrl = iter->second;
+		const CSISInfo& info = ctrl->SISInfo();			
+		LWARN(L" Embedded Package not installed: UID " << std::hex << info.UID1() );
+		}
+	}
+
 bool SisFile::IsSupportedLanguage(TUint32 aLanguage) const
 {
 	bool result = false;
--- a/secureswitools/swisistools/source/interpretsislib/sisfile.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/source/interpretsislib/sisfile.h	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -96,6 +96,10 @@
 	void MakeSISStub(std::wstring& aFileName);
 	
 	const CSISController& GetController(); 
+	
+	void ProcessEmbeddedFileWarning(const CSISInstallBlock& aInstallBlock) const;
+
+	bool ProcessInstallOptionsWarning(const CSISInstallBlock& aInstallBlock, std::string& aError);
 
 private:
 	void GetInstallableFiles(	InstallableFiles& aFiles, 
--- a/secureswitools/swisistools/source/makesis/makesis.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/source/makesis/makesis.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,7 +1,7 @@
 // Copyright (c) 2004-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
--- a/secureswitools/swisistools/source/makesis/openssllicense.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/source/makesis/openssllicense.h	Thu Jul 22 16:35:01 2010 +0100
@@ -1,7 +1,7 @@
 // Copyright (c) 2003-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
--- a/secureswitools/swisistools/source/makesislib/packageparser.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/source/makesislib/packageparser.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -411,7 +411,7 @@
 			dialect = CSISLanguage::IdentifyLanguage (iTokenValue.pszString);
 			if (dialect == CSISLanguage::ELangNone) throw ErrUnknownLanguagesId;
 			}
-		else if (iToken==NUMERIC_TOKEN && iTokenValue.dwNumber>=0 && iTokenValue.dwNumber<=1000)
+		else if (iToken==NUMERIC_TOKEN && iTokenValue.dwNumber>=0 )
 			{
 			dialect = static_cast <CSISLanguage::TDialect> (iTokenValue.dwNumber);
 			}
--- a/secureswitools/swisistools/source/rscparser/apsecutils.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/source/rscparser/apsecutils.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -103,7 +103,7 @@
  * @param aIsSidProtected returns ETrue if application SID is in the protected range
  * @return KErrNone if succesful, error code otherwise
  */
-TInt CApaSecurityUtils::CheckAppSecurity( const Ptr16 aAppFilename, 
+TInt CApaSecurityUtils::CheckAppSecurity( const Ptr16& aAppFilename, 
                                            TBool& aHasWriteDeviceDataCap, 
                                            TBool& aIsSidProtected,
                                            const std::string& aDerivedPath)
--- a/secureswitools/swisistools/source/rscparser/apsecutils.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/source/rscparser/apsecutils.h	Thu Jul 22 16:35:01 2010 +0100
@@ -33,7 +33,7 @@
 class CApaSecurityUtils
     {
 public:
-    static TInt CheckAppSecurity( const Ptr16 aAppFilename, 
+    static TInt CheckAppSecurity( const Ptr16& aAppFilename, 
                                            TBool& aHasWriteDeviceDataCap, 
                                            TBool& aIsSidProtected,
                                            const std::string& aDerivedPath);
--- a/secureswitools/swisistools/source/scrtool/data/create_db.xml	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/source/scrtool/data/create_db.xml	Thu Jul 22 16:35:01 2010 +0100
@@ -9,7 +9,7 @@
 	<SQLQuery>CREATE TABLE SoftwareTypeNames(NameId INTEGER PRIMARY KEY NOT NULL,SoftwareTypeId INTEGER NOT NULL,Locale INTEGER DEFAULT 0,Name TEXT NOT NULL);</SQLQuery>
 	<SQLQuery>CREATE INDEX idx_SoftwareTypeNames_SoftwareTypeId ON SoftwareTypeNames(SoftwareTypeId);</SQLQuery>
 	<SQLQuery>CREATE INDEX idx_SoftwareTypeNames_Name ON SoftwareTypeNames(Name);</SQLQuery>
-	<SQLQuery>CREATE TABLE SoftwareTypes(SoftwareTypeId INTEGER PRIMARY KEY NOT NULL,SifPluginUid INTEGER,LauncherExecutable TEXT);</SQLQuery>
+	<SQLQuery>CREATE TABLE SoftwareTypes(SoftwareTypeId INTEGER PRIMARY KEY NOT NULL,SifPluginUid INTEGER,LauncherExecutable TEXT DEFAULT '');</SQLQuery>
 	<SQLQuery>CREATE TABLE CustomAccessList(AccessId INTEGER PRIMARY KEY AUTOINCREMENT,SoftwareTypeId INTEGER NOT NULL,SecureId INTEGER NOT NULL,AccessMode INTEGER DEFAULT 0);</SQLQuery>
 	<SQLQuery>CREATE TABLE MimeTypes(MimeTypeId INTEGER PRIMARY KEY NOT NULL,SoftwareTypeId INTEGER NOT NULL,MimeType TEXT NOT NULL UNIQUE COLLATE NOCASE);</SQLQuery>
 	<SQLQuery>CREATE INDEX idx_MimeTypes_SoftwareTypeId ON MimeTypes(SoftwareTypeId);</SQLQuery>
--- a/secureswitools/swisistools/source/signsis/openssllicense.h	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/source/signsis/openssllicense.h	Thu Jul 22 16:35:01 2010 +0100
@@ -1,7 +1,7 @@
 // Copyright (c) 2003-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
--- a/secureswitools/swisistools/source/signsis/parameter.cpp	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/source/signsis/parameter.cpp	Thu Jul 22 16:35:01 2010 +0100
@@ -2,7 +2,7 @@
 * Copyright (c) 2004-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"
+* under the terms of the License "Eclipse Public License v1.0"
 * which accompanies this distribution, and is available
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
 *
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/testmakesis/largelanguagecodes.pkg	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,218 @@
+;
+; Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "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:
+;
+
+;Languages
+;#define LANGUAGE_IDS LANG sc 37 14346 14387 14412 14419 102 42 44 45 25 07 18 01 10 129 158 160 159 157 161 49 50 09 02 51 103 03 54 57 58 30 17 15 59 327 05 32 65 67 68 70 326 08 27 13 76 31 78 16 79 26 28 04 83 06 39 29 33 14 93 94 96
+&01,02,03,04,05,06,07,08,09,10,13,14,15,16,17,18,25,26,27,28,29,30,31,32,33,37,39,42,44,45,49,50,51,54,57,58,59,65,67,68,70,76,78,79,83,93,94,96,102,103,129,157,158,159,160,161,326,327,14346,14387,14412,14419,456789
+
+;Header
+#{"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice "},(0x200002B3),1,1,1,TYPE=SA
+
+;Localised Vendor name
+%{"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice ",
+"Quickoffice "}
+
+;Unique Vendor name
+:"Quickoffice Inc"
+
+;Supports Series 60 v 5.0
+[0x1028315F], 0, 0, 0, 
+{"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID",
+"Series60ProductID"}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/TestElseIfData/TestElseIf.pkg	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,22 @@
+&EN
+
+#{"TestElseIf"}, (0x2002cccf), 1, 0, 0, TYPE=SA
+%{"SJ"}
+:"SJ"
+
+IF (0)
+	"\epoc32\winscw\c\tswi\tinterpretsisinteg\TestElseIfData\file0"-"c:\data\First_first.txt"
+
+ELSEIF (0) 
+	"\epoc32\winscw\c\tswi\tinterpretsisinteg\TestElseIfData\file0"-"c:\data\First_second.txt"
+
+ELSEIF (0) 
+	"\epoc32\winscw\c\tswi\tinterpretsisinteg\TestElseIfData\file0"-"c:\data\First_third.txt"
+
+ELSEIF (1)
+	"\epoc32\winscw\c\tswi\tinterpretsisinteg\TestElseIfData\file0"-"c:\data\First_fourth.txt"
+
+ELSE
+	"\epoc32\winscw\c\tswi\tinterpretsisinteg\TestElseIfData\file0"-"c:\data\First_fifth.txt"
+
+ENDIF
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/TestElseIfData/file0	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,1 @@
+Some data
\ No newline at end of file
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-01.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-01.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_01
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-01_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-01_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_01
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-02.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-02.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_02
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-02_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-02_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_02
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-03.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-03.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_03
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-03_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-03_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_03
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-04.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-04.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_04
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-04_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-04_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_04
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-05.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-05.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_05
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-05_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-05_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_05
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-06.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-06.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_06
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-06_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-06_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_06
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-07.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-07.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_07
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-07_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-07_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_07
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-08.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-08.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_08
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-08_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-08_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_08
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-09.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-09.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_09
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-09_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-09_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_09
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-10.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-10.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_10
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-10_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-10_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_10
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-11.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-11.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_11
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-11_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-11_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_11
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-12.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-12.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_12
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-12_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-12_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_12
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-13.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-13.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_13
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-13_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-13_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_13
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-14.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-14.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_14
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-14_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-14_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_14
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-15.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-15.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_15
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-15_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-15_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_15
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-16.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-16.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_16
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-16_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-16_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_16
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-17.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-17.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_17
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-17_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-17_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_17
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-18.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-18.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_18
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-18_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-18_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_18
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-19.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-19.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_19
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-19_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-19_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_19
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-20.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-20.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_20
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-20_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-20_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_20
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-21.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-21.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_21
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-21_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-21_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_21
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-22.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-22.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_22
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-22_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-22_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_22
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-23.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-23.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_23
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-23_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-23_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_23
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-24.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-24.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_24
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-24_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-24_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_24
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-25.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-25.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_25
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-25_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-25_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_25
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-26.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-26.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_26
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-26_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-26_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_26
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-27.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-27.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_27
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-27_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-27_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_27
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-28.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-28.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_28
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-28_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-28_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_28
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-29.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-29.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_29
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-29_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-29_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_29
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-30.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-30.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_30
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-30_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-30_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_30
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-31.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-31.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_31
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-31_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-31_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_31
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-32.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-32.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_32
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-32_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-32_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_32
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-33.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-33.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_33
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-33_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-33_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_33
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-34.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-34.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_34
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-34_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-34_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_34
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-35.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-35.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_35
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-35_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-35_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_35
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-36.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-36.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_36
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-36_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-36_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_36
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-37.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-37.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_36
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-37_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-37_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_36
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-38.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-38.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_38
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-38_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-38_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_38
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-39.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-39.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_39
--- a/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-39_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/int_nr_option-39_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2,16 +2,16 @@
 @rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 @rem All rights reserved.
 @rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
+@rem under the terms of the License "Eclipse Public License v1.0"
 @rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 @rem
 @rem Initial Contributors:
 @rem Nokia Corporation - initial contribution.
 @rem
 @rem Contributors:
 @rem
-@rem Description: 
+@rem Description:
 @rem
 @ECHO OFF
 REM int_nr_option_39
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/interpretsism001a_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,26 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description:
+@rem
+
+:: This batch file test if SCR DB is created when SCR DB is not present in System Drive. Error is thrown in case DB creation fails.
+@ECHO OFF
+REM testcaseM001a
+call interpretsis -s \epoc32\winscw\c\tswi\tinterpretsisinteg\sisfiles\interpretsism001.sis -t .\romdrive\system\install\ -c .\cdrive -r \epoc32\winscw\c\tswi\tinterpretsisinteg\testdatam001\rombld.log -w info -l /epoc32/winscw/c/interpretsis_test_harness_db.txt
+IF NOT %errorlevel%==0 GOTO LAST
+ECHO ***ERRORCODE*** %errorlevel% PASS>>/epoc32/winscw/c/interpretsis_test_harness_db.txt
+GOTO END
+:LAST
+ECHO ***ERRORCODE*** %errorlevel% FAIL>>/epoc32/winscw/c/interpretsis_test_harness_db.txt
+:END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/makesism001a_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -0,0 +1,26 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description:
+@rem
+
+:: This batch file creates sis file/files
+@ECHO OFF
+REM testcaseM001a
+if not exist .\cdrive mkdir .\cdrive > NUL
+if not exist .\romdrive mkdir .\romdrive > NUL
+IF NOT EXIST .\romdrive\system\install\ mkdir .\romdrive\system\install\ > NUL
+IF NOT EXIST .\cdrive\sys\install\scr\ mkdir .\cdrive\sys\install\scr\ > NUL
+call makesis \epoc32\winscw\c\tswi\tinterpretsisinteg\testdatam001\interpretsism001.pkg \epoc32\winscw\c\tswi\tinterpretsisinteg\sisfiles\interpretsism001.sis > NUL
+call /epoc32/winscw/c/tswi/tinterpretsisinteg/interpretsism001a_db.bat > NUL
+:END
\ No newline at end of file
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-01.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-01.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-02.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-02.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-03.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-03.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-05.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-05.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-06.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-06.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-07.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-07.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-08.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-08.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-09.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-09.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-10.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-10.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-11.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-11.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-12.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-12.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-13.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-13.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-14.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-14.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-15.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-15.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-16.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-16.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-17.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-17.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-18.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-18.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-19.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-19.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-20.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-20.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-21.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-21.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-22.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-22.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-23.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-23.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-24.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-24.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-25.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-25.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-26.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-26.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-27.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-27.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-28.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-28.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-29.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-29.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-30.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-30.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-31.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-31.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-32.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-32.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-33.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-33.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-34.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-34.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-35.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-35.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-36.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-36.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-37.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-37.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-38.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-38.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-39.script	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/scripts/int_nr_option-39.script	Thu Jul 22 16:35:01 2010 +0100
@@ -1,17 +1,17 @@
-//
 // Copyright (c) 2005-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"
+// under the terms of the License "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// at the URL "http://www.eclipse.org/legal/sfl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
 //
 // Contributors:
 //
-// Description: 
+// Description:
+//
 //
 
 // Load Suite
--- a/secureswitools/swisistools/test/tinterpretsisinteg/testinterpretsis_db.bat	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/testinterpretsis_db.bat	Thu Jul 22 16:35:01 2010 +0100
@@ -2745,6 +2745,28 @@
 if not %errorlevel%==0 GOTO LAST
 GOTO PASS_CLEAN
 
+:TestElseIF
+call makesis \epoc32\winscw\c\tswi\tinterpretsisinteg\TestElseIfData\TestElseIf.pkg \epoc32\winscw\c\tswi\tinterpretsisinteg\sisfiles\TestElseIf.sis > NUL
+call interpretsis -z .\romdrive -c .\cdrive  -s /epoc32/winscw/c/tswi/tinterpretsisinteg/sisfiles/TestElseIf.sis -w info -l /epoc32/winscw/c/interpretsis_test_harness_db.txt 
+if not %errorlevel%==0 GOTO LAST
+
+set exist_file=.\cdrive\data\First_first.txt
+if exist %exist_file% GOTO FAIL_FOUND
+
+set exist_file=.\cdrive\data\First_second.txt
+if exist %exist_file% GOTO FAIL_FOUND
+
+set exist_file=.\cdrive\data\First_third.txt
+if exist %exist_file% GOTO FAIL_FOUND
+
+set exist_file=.\cdrive\data\First_fifth.txt
+if exist %exist_file% GOTO FAIL_FOUND
+
+set exist_file=.\cdrive\data\First_fourth.txt
+if not exist %exist_file% GOTO FAIL_NOT_FOUND
+GOTO PASS_CLEAN
+
+
 REM Tests for native registry > NUL
 
 :PASS_CLEAN
--- a/secureswitools/swisistools/test/tinterpretsisinteg/testlistdb.xml	Tue Jun 15 13:36:10 2010 +0100
+++ b/secureswitools/swisistools/test/tinterpretsisinteg/testlistdb.xml	Thu Jul 22 16:35:01 2010 +0100
@@ -489,6 +489,11 @@
 	<command log="no">\epoc32\winscw\c\tswi\tinterpretsisinteg\makesisf006_db.bat B testdataF006Def</command>
 	<check type="program" name="perl \epoc32\winscw\c\tswi\tinterpretsisinteg\check.pl">testdataf006Def testcasef006Deffile.txt 1 "positive" "both" 0</check>
 	</test>	
+<test id="testdataM001a">
+	<title>testdataM001a</title>
+	<command log="no">\epoc32\winscw\c\tswi\tinterpretsisinteg\makesism001a_db.bat testdataM001a </command>
+	<check type="program" name="perl \epoc32\winscw\c\tswi\tinterpretsisinteg\check.pl">testdataM001a testcasem001file.txt 1 "positive" "both"</check>
+	</test>
 <test id="testdataM001">
 	<title>testdataM001</title>
 	<command log="no">\epoc32\winscw\c\tswi\tinterpretsisinteg\makesism001_db.bat testdataM001 </command>
@@ -1936,5 +1941,11 @@
 	<command log="no">\epoc32\winscw\c\tswi\tinterpretsisinteg\int_nr_option-39_db.bat  INT_NR_Option-39</command>
 	<check type="program" name="perl \epoc32\winscw\c\tswi\tinterpretsisinteg\swicheck.pl">INT_NR_Option-39  INT_NR_Option-39 3  "positive"  "both" "nouid" "nobatchfile" "int_nr_option-39.script" "int_nr_option-39.htm" "FAIL = 0" "FAIL = 0" </check>
 	</test>
-	
+
+<test id="Test_ELSEIF_Block">
+	<title>Test_ELSEIF_Block</title>
+	<command log="no">\epoc32\winscw\c\tswi\tinterpretsisinteg\testinterpretsis_db.bat TestElseIF</command>
+	<check type="result"/>
+	</test>
+
 </testlist>