Revision: v2.2.2
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 23 Jun 2010 18:07:10 +0300
changeset 47 f40128debb5d
parent 35 85266cc22c7f
child 48 e0d6e9bd3ca7
Revision: v2.2.2 Kit: 2010125
build/Makefile.comp
build/Makefile.defs
build/Makefile.nonqt
build/Makefile.project
build/Makefile.subsystem
build/bld.inf
build/codescanner_high.xml
build/exports.inf
build/loc/resources.jar
build/loc/resources_qt.jar
build/makefile.javaversion
build/sis/incompatible_openc.txt
build/sis/incompatible_platform.txt
build/sis/java_2_0.pkg
build/sis/java_3_1.pkg
inc/build_defines.hrh
inc/build_defines.pri
inc/java.txt
inc/project_defines.hrh
javacommons/connectionmanager/inc.s60/connectionmanager.h
javacommons/connectionmanager/src.s60/connectionmanager.cpp
javacommons/fileutils/tsrc/fileutilstestinit/build/javafileutilstestinit.pro
javacommons/gcfbase/javasrc/com/nokia/mj/impl/gcf/PushRegistryPermissionImpl.java
javacommons/gcfprotocols/file/javasrc/com/nokia/mj/impl/file/FileInternalPermission.java
javacommons/gcfprotocols/file/tsrc/mt/filetestinit/build/javafiletestinit.pro
javacommons/gcfprotocols/http/javasrc.s60/com/nokia/mj/impl/gcf/protocol/http/HttpPermissionImpl.java
javacommons/gcfprotocols/https/javasrc.s60/com/nokia/mj/impl/gcf/protocol/https/HttpsPermissionImpl.java
javacommons/gcfprotocols/secureconnection/javasrc/com/nokia/mj/impl/gcf/protocol/ssl/SSLPermissionImpl.java
javacommons/gcfprotocols/socket/socket/javasrc/com/nokia/mj/impl/gcf/protocol/socket/SocketPermissionImpl.java
javacommons/javaenv/tsrc/build/alltests.mmp
javacommons/javastorage/tsrc/storageclient/build/alltests.mmp
javacommons/jvms/j9/exports.inf
javacommons/jvms/j9/j9.pro
javacommons/security/data/att_manufacturer.txt
javacommons/security/data/att_operatorextra.txt
javacommons/security/data/msa_manufacturer.txt
javacommons/security/data/msa_operator.txt
javacommons/security/data/msa_trustedthirdparty.txt
javacommons/security/data/msa_untrusted.txt
javacommons/security/data/s60_manufacturer.txt
javacommons/security/data/s60_operator.txt
javacommons/security/data/s60_trustedthirdparty.txt
javacommons/security/data/s60_untrusted.txt
javacommons/security/javasrc.cdc/com/nokia/mj/impl/security/midp/authorization/PermissionGranter.java
javacommons/security/javasrc.cdc/com/nokia/mj/impl/security/midp/authorization/SecurityPolicy.java
javacommons/security/javasrc.cdc/com/nokia/mj/impl/security/midp/authorization/SecurityPolicyPermission.java
javacommons/security/javasrc.cdc/com/nokia/mj/impl/security/midp/authorization/SecurityPolicyPermissionSettings.java
javacommons/security/javasrc/com/nokia/mj/impl/security/midp/authorization/AccessControllerImpl.java
javacommons/security/javasrc/com/nokia/mj/impl/security/midp/authorization/PermissionResolver.java
javacommons/security/javasrc/com/nokia/mj/impl/security/midp/authorization/SecurityPromptHandler.java
javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/PermissionMappingTable.java
javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/PolicyBasedPermission.java
javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/PolicyBasedPermissionImpl.java
javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/UserSecuritySettings.java
javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/UserSecuritySettingsImpl.java
javacommons/security/javasrc/com/nokia/mj/impl/security/midp/storage/SecurityStorage.java
javacommons/security/javaunicertstoreplugin/src.s60/200213A3.rss
javacommons/security/legacysupport/midp2userpreferences/build/midp2userpreferences.pro
javacommons/security/legacysupport/midp2userpreferences/src/MIDP2UserPreferences.cpp
javacommons/security/legacysupport/tsrc/build/securitylegacysupportunittests.mmp
javacommons/security/legacysupport/tsrc/src/testpermissiondb.cpp
javacommons/security/legacysupport/tsrc/src/testsecuritypolicy.cpp
javacommons/security/legacysupport/tsrc/src/testuserpreferences.cpp
javacommons/security/src.s60/telutils.cpp
javacommons/security/src.s60/telutils.h
javacommons/security/src/midpauthenticationmoduleimpl.cpp
javacommons/security/tsrc/data/javasrc/invalidjars/ImplementProtectedInterface/myClass.java
javacommons/security/tsrc/data/javasrc/invalidjars/InnerClassImplementsProtectedInterface/myClass.java
javacommons/security/tsrc/data/policies/all.txt
javacommons/security/tsrc/data/policies/test_manufacturer.txt
javacommons/security/tsrc/data/policies/test_operator.txt
javacommons/security/tsrc/data/policies/test_trustedthirdparty.txt
javacommons/security/tsrc/data/policies/test_untrusted.txt
javacommons/security/tsrc/data/validpolicies/assigned_settings_only.txt
javacommons/security/tsrc/data/validpolicies/assigned_settings_orphaned.txt
javacommons/security/tsrc/data/validpolicies/validators/assigned_and_user_settings.txt
javacommons/security/tsrc/data/validpolicies/validators/assigned_settings_only.txt
javacommons/security/tsrc/data/validpolicies/validators/assigned_settings_orphaned.txt
javacommons/security/tsrc/data/validpolicies/validators/domain_without_end_separator.txt
javacommons/security/tsrc/data/validpolicies/validators/identified_thirdparty_like_policy.txt
javacommons/security/tsrc/data/validpolicies/validators/ignore_interaction_modes_for_allowed_group.txt
javacommons/security/tsrc/data/validpolicies/validators/manufacturer_like_policy.txt
javacommons/security/tsrc/data/validpolicies/validators/missing_end_bracket_for_permissions.txt
javacommons/security/tsrc/data/validpolicies/validators/missing_start_bracket_for_permissions.txt
javacommons/security/tsrc/data/validpolicies/validators/operator_like_policy.txt
javacommons/security/tsrc/data/validpolicies/validators/permission_without_end_terminator.txt
javacommons/security/tsrc/data/validpolicies/validators/unidentified_third_party_like_policy.txt
javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/OMJSecurityTests.java
javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/authorization/PermissionGranterTests.java
javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/authorization/SecurityPolicyModuleTests.java
javacommons/security/tsrc/javasrc/com/nokia/mj/tools/security/midp/PolicyEditorTests.java
javacommons/utils/build/build.xml
javacommons/utils/javasrc/com/nokia/mj/impl/utils/Formatter.java
javacommons/utils/src.s60/formatternative.cpp
javacommons/utils/src/javainifileutils.cpp
javaextensions/bluetooth/bluetoothcommons/src.s60/servicerecord.cpp
javaextensions/comm/javasrc/com/nokia/mj/impl/gcf/protocol/comm/CommPermissionImpl.java
javaextensions/datagram/datagram/javasrc/com/nokia/mj/impl/gcf/protocol/datagram/DatagramPermissionImpl.java
javaextensions/midprms_db/javasrc/com/nokia/mj/impl/rms/RmsFileInfo.java
javaextensions/mobinfo/javasrc.s60/com/nokia/mj/impl/properties/mobinfo/MobileInfoPermission.java
javaextensions/mobinfo/javasrc.s60/com/nokia/mj/impl/properties/mobinfo/MobileInfoProperties.java
javaextensions/wma/mms/src.s60/cjavammsmessagehandler.cpp
javaextensions/wma/sms_cbs/javasrc/com/nokia/mj/impl/sms/SMSPermissionImpl.java
javaextensions/wma/sms_cbs/pushplugin/sms/src.s60/smsserverconnection.cpp
javamanager/javaappschemeplugin/build/javaappschemeplugin.mmp
javamanager/javabackup/javabackupcore/build/javabackup.mmp
javamanager/javabackup/javabackupcore/src.s60/jsbcdataowner.h
javamanager/javabackup/midp2backup/build/midp2backupplugin.mmp
javamanager/javabackup/midp2backup/src.s60/javastoragebackuputil.cpp
javamanager/javabackup/midp2backup/src.s60/midp2backupplugin.cpp
javamanager/javacaptain/extensionplugins/javacertstore/tsrc.s60/build/testsmartcardtokenplugin.mmp
javamanager/javacaptain/extensionplugins/javacertstore/tsrc.s60/src/101F5B72.rss
javamanager/javacaptain/extensionplugins/scrupdater/inc/scrupdater.h
javamanager/javacaptain/extensionplugins/scrupdater/src.s60/lookup.cpp
javamanager/javacaptain/extensionplugins/scrupdater/src.s60/scrupdater.cpp
javamanager/javacaptain/extensionplugins/scrupdater/src/lookup.cpp
javamanager/javacaptain/extensionplugins/scrupdater/src/scrupdater.cpp
javamanager/javacaptain/extensionplugins/scrupdater/src/scrupdater.h
javamanager/javainstaller/appinstuiplugin/build/javainstalllauncher.mmp
javamanager/javainstaller/installer/build/javainstaller.pro
javamanager/javainstaller/installer/javasrc.s60/com/nokia/mj/impl/installer/applicationregistrator/SifNotifier.java
javamanager/javainstaller/installer/javasrc.s60/com/nokia/mj/impl/installer/applicationregistrator/SifRegistrator.java
javamanager/javainstaller/installer/javasrc.s60/com/nokia/mj/impl/installer/utils/SysUtil.java
javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/GetComponentInfo.java
javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/InstallationNotifier.java
javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/Installer.java
javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/InstallerResultMessage.java
javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/CheckJarPackages.java
javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/FinalizeInstallation.java
javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/HandleCustomAttributes.java
javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/StartProgressNotifications.java
javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/uninstall/steps/GetFromStorage.java
javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/storagehandler/StorageHandler.java
javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/storagehandler/SuiteInfo.java
javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/utils/Args.java
javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/utils/AutoStartPermission.java
javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/rt/installer/ApplicationUtilsImpl.java
javamanager/javainstaller/installer/src.s60/applicationregistrator/applicationregistrator.cpp
javamanager/javainstaller/installer/src.s60/applicationregistrator/sifnotifier.cpp
javamanager/javainstaller/installer/src.s60/applicationregistrator/sifregistrator.cpp
javamanager/javainstaller/installer/tsrc/build/jiut.bat
javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/GetComponentInfoTest.java
javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/InstallerEngineTest.java
javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/applicationregistrator/SifRegistratorTest.java
javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/customisationproperties/CustomisationPropertiesTest.java
javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/downloader/DownloaderTest.java
javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/downloader/NotificationPosterTest.java
javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/utils/SysUtilTest.java
javamanager/javainstaller/installer/tsrc/testdata/utils/00000019.jar
javamanager/javainstaller/installer/tsrc/testdata/utils/00000046.jar
javamanager/javainstaller/installer/tsrc/testdata/utils/00000058.jar
javamanager/javainstaller/installer/tsrc/testdata/utils/00000070.jar
javamanager/javainstaller/installer/tsrc/testdata/utils/00000090.jar
javamanager/javainstaller/installer/tsrc/testdata/utils/00000150.jar
javamanager/javainstaller/installer/tsrc/testdata/utils/00000172.jar
javamanager/javainstaller/installer/tsrc/testdata/utils/00000175.jar
javamanager/javainstaller/installer/tsrc/testdata/utils/00000182.jar
javamanager/javainstaller/installer/tsrc/testdata/utils/00000189.jar
javamanager/javainstaller/installer/tsrc/testdata/utils/00000250.jar
javamanager/javainstaller/installer/tsrc/testdata/utils/00000305.jar
javamanager/javainstaller/installer/tsrc/testdata/utils/00000390.jar
javamanager/javainstaller/installer/tsrc/testdata/utils/00000500.jar
javamanager/javainstaller/installer/tsrc/testdata/utils/00000582.jar
javamanager/javainstaller/installer/tsrc/testdata/utils/00000618.jar
javamanager/javainstaller/installer/tsrc/testdata/utils/00000703.jar
javamanager/javainstaller/installer/tsrc/testdata/utils/3DSpaceShooter.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/800_x_N97_64GB_fr_speed_v5_32_01.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/BCExchanger.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/BCExchanger.jar
javamanager/javainstaller/installer/tsrc/testdata/utils/BCExchanger.zip
javamanager/javainstaller/installer/tsrc/testdata/utils/DevCertTestMIDlet.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/Empty.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/EmptyLines.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/FL_Rocks.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/NDRM.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/PlatformReqHTTP.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/SimpleRMS8.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/SimpleRMS8.jar
javamanager/javainstaller/installer/tsrc/testdata/utils/SunShines3D_DEMO_nokia_N900_EN_IGP_ATandT_901.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/SunShines3D_DEMO_nokia_N900_EN_IGP_ATandT_901.zip
javamanager/javainstaller/installer/tsrc/testdata/utils/TestMidlet.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/TestMidlet2.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/TestMidlet3.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/calc2_en_de_es_ES_fr_it_tr_TR_nl_NL_pt_PT.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/calc2_en_de_es_ES_fr_it_tr_TR_nl_NL_pt_PT.zip
javamanager/javainstaller/installer/tsrc/testdata/utils/ceac00.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/cecn02.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/cecn06.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/ceis00.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/ceis09.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/ceis14.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/cejp04.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/ceko01.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/cems01.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/cems11.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/ceut03.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/ceut04.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/ceut08.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/ceut09.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/einstein_EN_FR_IT_DE_ES_N97_v2942.jar
javamanager/javainstaller/installer/tsrc/testdata/utils/javahelper.mif
javamanager/javainstaller/installer/tsrc/testdata/utils/mine_en_fr_de_it_es_ES_pt_PT.jad
javamanager/javainstaller/installer/tsrc/testdata/utils/utf8bom.jad
javamanager/javainstaller/installer/tsrc/testserver/build/build.xml
javamanager/javainstaller/installer/tsrc/testserver/build/readme.txt
javamanager/javainstaller/installer/tsrc/testserver/content/HelloWorld.jad
javamanager/javainstaller/installer/tsrc/testserver/content/HelloWorld.jar
javamanager/javainstaller/installer/tsrc/testserver/content/HelloWorld_8mb.jad
javamanager/javainstaller/installer/tsrc/testserver/content/HelloWorld_8mb.jar
javamanager/javainstaller/installer/tsrc/testserver/content/HelloWorld_ota.jad
javamanager/javainstaller/installer/tsrc/testserver/content/HelloWorld_redirect.jad
javamanager/javainstaller/installer/tsrc/testserver/content/HelloWorld_redirect.jar
javamanager/javainstaller/installer/tsrc/testserver/content/META-INF/MANIFEST.MF
javamanager/javainstaller/installer/tsrc/testserver/content/META-INF/context.xml
javamanager/javainstaller/installer/tsrc/testserver/content/WEB-INF/web.xml
javamanager/javainstaller/installer/tsrc/testserver/content/httpauth/HelloWorld_http_auth.jad
javamanager/javainstaller/installer/tsrc/testserver/content/httpauth/HelloWorld_http_auth.jar
javamanager/javainstaller/installer/tsrc/testserver/javasrc/com/nokia/mj/impl/installer/testserver/JadServlet.java
javamanager/javainstaller/installer/tsrc/testserver/javasrc/com/nokia/mj/impl/installer/testserver/NotifyServlet.java
javamanager/javainstaller/installer/tsrc/testserver/javasrc/com/nokia/mj/impl/installer/testserver/RedirectServlet.java
javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/InstallerUi.java
javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/InstallerUiFactory.java
javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt/InstallerUiEswt.java
javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/InstallerUiEswt.java
javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/LaunchAppQueryView.java
javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/ProgressView.java
javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/ViewBase.java
javamanager/javainstaller/javasifplugin/build/javasifplugin.mmp
javamanager/javainstaller/javasifplugin/inc/javasifplugin.h
javamanager/javainstaller/javasifplugin/inc/resultsserver.h
javamanager/javainstaller/javasifplugin/src/javasifplugin.cpp
javamanager/javainstaller/javasifplugin/src/resultsserver.cpp
javamanager/javalauncher/src.s60/javalauncher.cpp
javamanager/javamanager.pro
javamanager/javarecognizer/build/recjar.mmp
javamanager/javaregistry/build/eabi/javaregistryclientu.def
javamanager/javaregistry/client/src/javaattribute.cpp
javamanager/javaregistry/client/src/javaregistryentry.cpp
javamanager/javaregistry/client/src/writeablejavaregistry.cpp
javamanager/javasettings/appsettingsview_qt/build/javaapplicationsettingsview.pro
javamanager/javasettings/appsettingsview_qt/src/javaapplicationsettingsview_p.cpp
javamanager/javasettings/appsettingsview_qt/src/javaapplicationsettingsview_p.h
javamanager/javasidchecker/build/bld.inf
javamanager/javasidchecker/build/javasidchecker.mmp
javamanager/javasidchecker/data/10281FBE.rss
javamanager/javasidchecker/inc/javasidchecker.h
javamanager/javasidchecker/src/javasidchecker.cpp
javamanager/javaupgradeapp/build/javaupgradeapp.pro
javamanager/javaupgradeapp/sis/java_upgradeapp.pkg
javamanager/javaupgradeapp/src.s60/javaupgradeapp.cpp
javamanager/subsystem.mk
javaruntimes/javaruntimes.pro
javaruntimes/midp/runtime/build/javamidpruntime.pro
javaruntimes/midp/runtime/javasrc/com/nokia/mj/impl/rt/midp/Main.java
javaruntimes/midp/runtime/javasrc/com/nokia/mj/impl/rt/midp/MidletLifeCycle.java
javaruntimes/starter/build/java.pro
javaruntimes/starter/build/javamidp.pro
javatools/javasecuritycustomization/policyeditor/bin/securitypolicyeditor.jar
javatools/javasecuritycustomization/policyeditor/javasrc/com/nokia/mj/tools/security/midp/PolicyEditor.java
javatools/tckrunner/runner/src/tckrunnernative.cpp
javauis/eswt_qt/build/eswtqtwebkit/build.xml
javauis/eswt_qt/eswtuitestutils/javasrc/com/nokia/mj/impl/uitestutils/S60Utils.java
javauis/eswt_qt/org.eclipse.swt.qt.linux.x86.me/build.xml
javauis/eswt_qt/org.eclipse.swt.qt.linux.x86.se/build.xml
javauis/eswt_qt/org.eclipse.swt/Eclipse SWT Browser/qt/org/eclipse/swt/browser/QtWebKit.java
javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/ercp/swt/mobile/MobileDevice.java
javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Composite.java
javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Control.java
javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Decorations.java
javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Display.java
javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Shell.java
javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Widget.java
javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/common_j2me/org/eclipse/swt/internal/ApplicationUidWrapper.java
javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/common_j2me/org/eclipse/swt/internal/CommandPresentationStrategyWrapper.java
javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/common_j2se/org/eclipse/swt/internal/ApplicationUidWrapper.java
javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/common_j2se/org/eclipse/swt/internal/CommandPresentationStrategyWrapper.java
javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/linux/org/eclipse/swt/internal/ApplicationUidWrapper.java
javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/linux/org/eclipse/swt/internal/qt/s60/S60CommandPresentationStrategy.java
javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/library/graphics/qt/windowsurfaceimpl_symbian.h
javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/library/os.cpp
javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/library/swtapplication.cpp
javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/library/swtmobiledevice.cpp
javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/library/webkit/os.cpp
javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/CommandArranger.java
javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/CommandPresentationStrategy.java
javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/DesktopCommandPresentationStrategy.java
javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/graphics/GraphicsContext.java
javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/graphics/Image.java
javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/graphics/JavaCommandBuffer.java
javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/widgets/Internal_PackageSupport.java
javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/s60/org/eclipse/swt/internal/ApplicationUidWrapper.java
javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/s60/org/eclipse/swt/internal/qt/s60/S60CommandPresentationStrategy.java
javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/webkit/org/eclipse/swt/internal/qt/webkit/OS_webkit.java
javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/webkit/org/eclipse/swt/internal/qt/webkit/WebkitOS.java
javauis/javalegacyutils/build/build.xml
javauis/lcdui_qt/src/javax/microedition/lcdui/Buffer.java
javauis/lcdui_qt/src/javax/microedition/lcdui/Canvas.java
javauis/lcdui_qt/src/javax/microedition/lcdui/CanvasBufferLinux.java
javauis/lcdui_qt/src/javax/microedition/lcdui/CanvasKeypad.java
javauis/lcdui_qt/src/javax/microedition/lcdui/CustomItem.java
javauis/lcdui_qt/src/javax/microedition/lcdui/Displayable.java
javauis/lcdui_qt/src/javax/microedition/lcdui/Graphics.java
javauis/lcdui_qt/src/javax/microedition/lcdui/ImageBuffer.java
javauis/m3g_qt/src/jni/graphics3d.inl
javauis/m3g_qt/src/jni/interface.inl
javauis/mmapi_qt/audiostreaming/src.mmf/cmmaaudiostreamplayer.cpp
javauis/mmapi_qt/audiostreaming/src.mmf/cmmaaudiostreamplayerfactory.cpp
javauis/mmapi_qt/audiostreaming/src.mmf/cmmastreamhandler.cpp
javauis/mmapi_qt/baseline/inc/cmmadisplay.h
javauis/mmapi_qt/baseline/inc/cmmaplayer.h
javauis/mmapi_qt/baseline/inc/cmmavideocontrol.h
javauis/mmapi_qt/baseline/inc/mmmadisplay.h
javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/control/BaseDisplay.java
javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/control/ItemDisplay.java
javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/control/MMACanvasDisplay.java
javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/control/MMAeSWTDisplay.java
javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/control/VideoControl.java
javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/control/VideoItem.java
javauis/mmapi_qt/baseline/javasrc/org/eclipse/swt/widgets/ESWTProxyControl.java
javauis/mmapi_qt/baseline/javasrc/org/eclipse/swt/widgets/ProxyControl.java
javauis/mmapi_qt/baseline/src.nga/cmmasurfacewindow.cpp
javauis/mmapi_qt/baseline/src/cmmacanvasdisplay.cpp
javauis/mmapi_qt/baseline/src/cmmadisplay.cpp
javauis/mmapi_qt/baseline/src/cmmaevent.cpp
javauis/mmapi_qt/baseline/src/cmmaitemdisplay.cpp
javauis/mmapi_qt/baseline/src/cmmaplayer.cpp
javauis/mmapi_qt/baseline/src/cmmasnapshot.cpp
javauis/mmapi_qt/baseline/src/cmmavideocontrol.cpp
javauis/mmapi_qt/baseline/src/eswtdisplay.cpp
javauis/mmapi_qt/baseline/src/eswtproxycontrol.cpp
javauis/mmapi_qt/baseline/src/managerimpl.cpp
javauis/mmapi_qt/baseline/src/videocontrol.cpp
javauis/mmapi_qt/build/build.xml
javauis/mmapi_qt/build/bwins/javamobilemediau.def
javauis/mmapi_qt/build/eabi/javamobilemediau.def
javauis/mmapi_qt/directcontent/inc/cmmadcdisplay.h
javauis/mmapi_qt/directcontent/src/cmmadcdisplay.cpp
javauis/mmapi_qt/volumekeys/src/cmmaforeground.cpp
javauis/mmapi_qt/volumekeys/src/cmmavolumekeyslistener.cpp
javauis/nokiasound/src/cmidsound.cpp
javauis/runtimeui_qt/tsrc.s60/javasrc/com/nokia/mj/impl/rt/ui/qt/RuntimeUiQtTests.java
javauis/tsrc/fute/lcdui/Midp_Alert_01/build.xml
javauis/tsrc/fute/lcdui/Midp_Alert_01/src/AlertTests.java
rom/java_2_1.iby
rom/java_2_2.iby
rom/java_3_1.iby
--- a/build/Makefile.comp	Fri Jun 11 13:33:44 2010 +0300
+++ b/build/Makefile.comp	Wed Jun 23 18:07:10 2010 +0300
@@ -119,7 +119,7 @@
 # Symbian ----------------------------------
 ifeq ($(BUILDENV),symbian)
 
-all: qmake java native
+all: qmake java native codescanner
 
 # Extract basename of current component
 BASENAME = $(basename $(PRO_FILE))
@@ -170,6 +170,12 @@
 clean_qmake:
 	-$(call RMFILES,abld.bat bld.inf* Makefile* $(BASENAME).mmp $(BASENAME)_*.mmp $(BASENAME)_*.pkg $(BASENAME)_reg.rss eabi_stl4/*)
 
+# Use Carbide CodeScanner to list high-level issues
+codescanner:
+ifneq ($(call PATHSEARCH,codescanner.exe),)
+	$(call CODESCANNER,..)
+endif
+
 # Symbian SBS ------------------------------
 ifdef USESBS
 
--- a/build/Makefile.defs	Fri Jun 11 13:33:44 2010 +0300
+++ b/build/Makefile.defs	Wed Jun 23 18:07:10 2010 +0300
@@ -57,6 +57,7 @@
     MKDIR = if [ ! -d $(1)]; then mkdir $(1); fi
     RMDIR = if [ -d $(1)]; then rmdir $(1); fi
     DELTREE = if [ -d $(1)]; then rm -fr $(1); fi
+    PATHSEARCH = $(firstword $(wildcard $(addsuffix /$(1),$(subst :, ,$(PATH)))))
 
   else
     # CMD.exe definitions
@@ -74,6 +75,7 @@
     MKDIR = if not exist $(1) mkdir  $(1)
     RMDIR = if exist $(1) rmdir  $(1)
     DELTREE = if exist $(1) rmdir /S/Q $(1)
+    PATHSEARCH = $(firstword $(wildcard $(addsuffix /$(1),$(subst ;, ,$(PATH)))))
 
   endif
 
@@ -103,6 +105,7 @@
   export ANT_OPTS=
   BLDMAKE = perl -S bldmake.pl
   ABLDMAKE = set MAKELEVEL=&&set MAKEFLAGS=&&set MFLAGS=&&make -r
+  CODESCANNER = codescanner -c $(JAVA_SRC_ROOT)/build/codescanner_high.xml  -o std $(1) | perl -ne "print if /error:/;"
 
   ifdef NODEP
   # Makmake does not make dependency checks with this flag
--- a/build/Makefile.nonqt	Fri Jun 11 13:33:44 2010 +0300
+++ b/build/Makefile.nonqt	Wed Jun 23 18:07:10 2010 +0300
@@ -43,19 +43,24 @@
 # Symbian ----------------------------------
 ifeq ($(BUILDENV),symbian)
 
-all: native
+all: native codescanner
 
 javareleasables:
 
 makestubs:
 
+codescanner:
+ifneq ($(call PATHSEARCH,codescanner.exe),)
+	$(call CODESCANNER,..)
+endif
+
 # Symbian SBS ------------------------------
 ifdef USESBS
 
 # BUILD combines commands EXPORT MAKEFILE BITMAP RESOURCE LIBRARY TARGET FINAL
 native:
 	$(PHASEINFO)
-	$(SBS) -c $(PLATFORM)_$(CFG) BUILD
+	$(SBS) -c $(PLATFORM)_$(CFG)
 
 clean_java:
 
--- a/build/Makefile.project	Fri Jun 11 13:33:44 2010 +0300
+++ b/build/Makefile.project	Wed Jun 23 18:07:10 2010 +0300
@@ -174,13 +174,6 @@
 ifdef RD_JAVA_USIF_ENABLED
   SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK = 1
   PROJECT_DEFINES += SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-  # Following flag enables application registrations to USIF
-  # and disables application registrations to AppArc.
-  PROJECT_DEFINES += RD_JAVA_USIF_APP_REG
-  # Following flag enables application notifications to AppArc.
-  PROJECT_DEFINES += RD_JAVA_USIF_NOTIFY_APP_ARC
-  # Following flag enables installation progress notifications through USIF.
-  PROJECT_DEFINES += RD_JAVA_USIF_NOTIFY_PROGRESS
 endif
 
 # Java proximity Listener support exsist in 9.2 only(can not be used if 5.0 untill IAD dependecy mentioned)
--- a/build/Makefile.subsystem	Fri Jun 11 13:33:44 2010 +0300
+++ b/build/Makefile.subsystem	Wed Jun 23 18:07:10 2010 +0300
@@ -188,6 +188,11 @@
 bld.inf:
 	$(MAKE) -f subsystem.mk makestubs qmake
 
+# Use Carbide CodeScanner to list high-level issues
+codescanner:
+ifneq ($(call PATHSEARCH,codescanner.exe),)
+	$(call CODESCANNER,.)
+endif
 
 # Symbian SBS ------------------------------
 ifdef USESBS
--- a/build/bld.inf	Fri Jun 11 13:33:44 2010 +0300
+++ b/build/bld.inf	Wed Jun 23 18:07:10 2010 +0300
@@ -50,7 +50,7 @@
 
 #else // RD_JAVA_UI_QT
 
-../rom/java_2_1.iby                CORE_APP_LAYER_IBY_EXPORT_PATH(java.iby)
+../rom/java_2_2.iby                CORE_APP_LAYER_IBY_EXPORT_PATH(java.iby)
 
 // Export ODC list files
 ../rom/midpodclist	     /epoc32/release/winscw/udeb/z/resource/java/midpodclist
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/build/codescanner_high.xml	Wed Jun 23 18:07:10 2010 +0300
@@ -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: Configuration file for the Carbine CodeScanner, to
+#              scan only high-priority issues.
+#
+-->
+<codescannerConfig>
+	<sources>
+		<!-- source files matching any of the exclude patterns below will not be scanned -->
+
+		<!-- binary files -->
+		<exclude>.*\.au</exclude>
+		<exclude>.*\.avi</exclude>
+		<exclude>.*\.bmp</exclude>
+		<exclude>.*\.dll</exclude>
+		<exclude>.*\.doc</exclude>
+		<exclude>.*\.exe</exclude>
+		<exclude>.*\.gif</exclude>
+		<exclude>.*\.jpg</exclude>
+		<exclude>.*\.mbm</exclude>
+		<exclude>.*\.mp3</exclude>
+		<exclude>.*\.mpg</exclude>
+		<exclude>.*\.png</exclude>
+		<exclude>.*\.raw</exclude>
+		<exclude>.*\.rtf</exclude>
+		<exclude>.*\.tif</exclude>
+		<exclude>.*\.wav</exclude>
+		<exclude>.*\.wbmp</exclude>
+		<exclude>.*\.wmf</exclude>
+		<exclude>.*\.xls</exclude>
+		<!-- typical test directory names -->
+		<exclude>.*\\ts_.*</exclude>
+		<exclude>.*\\tsrc\\.*</exclude>
+		<exclude>.*\\tsrc.s60\\.*</exclude>
+		<exclude>.*\\test\\.*</exclude>
+		<exclude>.*\\internal\\.*</exclude>
+		<exclude>.*\\Internal\\.*</exclude>
+		<exclude>.*\\.svn\\.*</exclude>
+		<exclude>\\tools\\.*</exclude>
+	</sources>
+	<severities>
+		<!-- Group scripts based on severity level: -->
+		<!--    enable="true" or "false" -->
+
+		<high enable="true"/>
+		<medium enable="false"/>
+		<low enable="false"/>
+	</severities>
+</codescannerConfig>
--- a/build/exports.inf	Fri Jun 11 13:33:44 2010 +0300
+++ b/build/exports.inf	Wed Jun 23 18:07:10 2010 +0300
@@ -48,7 +48,7 @@
 
 #else // RD_JAVA_UI_QT
 
-../rom/java_2_1.iby                CORE_APP_LAYER_IBY_EXPORT_PATH(java.iby)
+../rom/java_2_2.iby                CORE_APP_LAYER_IBY_EXPORT_PATH(java.iby)
 
 // Export ODC list files
 ../rom/midpodclist	     /epoc32/release/winscw/udeb/z/resource/java/midpodclist
Binary file build/loc/resources.jar has changed
Binary file build/loc/resources_qt.jar has changed
--- a/build/makefile.javaversion	Fri Jun 11 13:33:44 2010 +0300
+++ b/build/makefile.javaversion	Wed Jun 23 18:07:10 2010 +0300
@@ -1,2 +1,2 @@
 # Set Java version (must be dot separated, without spaces)
-JAVA_VERSION = 2.2.1
+JAVA_VERSION = 2.2.2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/build/sis/incompatible_openc.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,3 @@
+OpenC version 1.5 or later is not found. Some Java applications may not work properly. Make sure that latest device firmware is used.
+
+Continue installation?
\ No newline at end of file
--- a/build/sis/incompatible_platform.txt	Fri Jun 11 13:33:44 2010 +0300
+++ b/build/sis/incompatible_platform.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -1,1 +1,1 @@
-Unfortunately Java Runtime 2.0 Alpha is not compatible with your device. Java Runtime 2.0 Alpha works only on S60 5.0 devices.
+Java Runtime is not compatible with your device. Java Runtime requires S60 5th Edition device.
\ No newline at end of file
--- a/build/sis/java_2_0.pkg	Fri Jun 11 13:33:44 2010 +0300
+++ b/build/sis/java_2_0.pkg	Wed Jun 23 18:07:10 2010 +0300
@@ -43,6 +43,17 @@
   ; Popup error on Non-S60 v 5.0 platforms. Do not allow continuing.
   "incompatible_platform.txt"-"", FILETEXT, FORCEABORT
 ENDIF
+
+; Check OpenC versions
+; 0x10282872 = Standard C++ library
+; 0x10281F34 = Open C LIBSSL
+; 0x20009a80 = Symbian OS PIPS
+IF( version(0x10282872, <, 1, 5, 0) ) OR
+  ( version(0x10281F34, <, 1, 5, 0) ) OR
+  ( version(0x20009a80, <, 1, 5, 0) )
+    "incompatible_openc.txt"-"", FT, TA
+ENDIF
+
 #endif // RD_JAVA_S60_RELEASE_5_0_IAD
 
 
--- a/build/sis/java_3_1.pkg	Fri Jun 11 13:33:44 2010 +0300
+++ b/build/sis/java_3_1.pkg	Wed Jun 23 18:07:10 2010 +0300
@@ -180,7 +180,6 @@
 "\epoc32\release\armv5\urel\javapushcontroller.dll"-"c:\sys\bin\javapushcontroller.dll"
 "\epoc32\release\armv5\urel\javaregistryclient.dll"-"c:\sys\bin\javaregistryclient.dll"
 "\epoc32\release\armv5\urel\javaruntimestarterutils.dll"-"c:\sys\bin\javaruntimestarterutils.dll"
-"\epoc32\release\armv5\urel\javasidchecker.dll"-"c:\sys\bin\javasidchecker.dll"
 "\epoc32\release\armv5\urel\javasizehelperclient.dll"-"c:\sys\bin\javasizehelperclient.dll"
 "\epoc32\release\armv5\urel\javasizehelperserver.dll"-"c:\sys\bin\javasizehelperserver.dll"
 "\epoc32\release\armv5\urel\javasocketscplugin.dll"-"c:\sys\bin\javasocketscplugin.dll"
@@ -223,7 +222,6 @@
 "\epoc32\data\z\resource\apps\javainstaller_icon.mif"-"c:\resource\apps\javainstaller_icon.mif"
 "\epoc32\data\z\resource\java\java_trusted.png"-"c:\resource\java\java_trusted.png"
 "\epoc32\data\z\resource\java\java_untrusted.png"-"c:\resource\java\java_untrusted.png"
-"\epoc32\data\z\resource\plugins\javasidchecker.rsc"   -"c:\resource\plugins\javasidchecker.rsc"
 "\epoc32\data\z\resource\plugins\javaunicertstoreplugin.rsc" -"c:\resource\plugins\javaunicertstoreplugin.rsc"
 "\epoc32\data\z\resource\plugins\midp2backupplugin.rsc"-"c:\resource\plugins\midp2backupplugin.rsc"
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
@@ -317,14 +315,16 @@
 ;"\epoc32\release\armv5\urel\javacoreui.dll"-"c:\sys\bin\javacoreui.dll"
 ;"\epoc32\data\z\resource\apps\javastartscreen.mif"-"c:\resource\apps\javastartscreen.mif"
 
-;"\epoc32\release\armv5\urel\javaamms.dll"-"c:\sys\bin\javaamms.dll"
-;"\epoc32\release\armv5\urel\z\resource\java\jvm\lib\jrt\javaamms.odc"-"c:\resource\java\jvm\lib\jrt\javaamms.odc"
+"\epoc32\release\armv5\urel\javaamms.dll"-"c:\sys\bin\javaamms.dll"
+"\epoc32\release\armv5\urel\z\resource\java\jvm\lib\jrt\javaamms.odc"-"c:\resource\java\jvm\lib\jrt\javaamms.odc"
 
 ;"\epoc32\release\armv5\urel\javalegacyutils.dll"-"c:\sys\bin\javalegacyutils.dll"
 ;"\epoc32\release\armv5\urel\z\resource\java\jvm\lib\jrt\javalegacyutils.odc"-"c:\resource\java\jvm\lib\jrt\javalegacyutils.odc"
 
-;"\epoc32\release\armv5\urel\javamobilemedia.dll"-"c:\sys\bin\javamobilemedia.dll"
-;"\epoc32\release\armv5\urel\z\resource\java\jvm\lib\jrt\javamobilemedia.odc"-"c:\resource\java\jvm\lib\jrt\javamobilemedia.odc"
+"\epoc32\release\armv5\urel\javamobilemedia.dll"-"c:\sys\bin\javamobilemedia.dll"
+"\epoc32\release\armv5\urel\z\resource\java\jvm\lib\jrt\javamobilemedia.odc"-"c:\resource\java\jvm\lib\jrt\javamobilemedia.odc"
+"\epoc32\release\armv5\urel\z\system\sounds\digital\CamcorderJavaCapture.wav"-"c:\System\Sounds\Digital\CamcorderJavaCapture.wav"
+"\epoc32\release\armv5\urel\z\system\sounds\digital\CamcorderJavaStart.wav"-"c:\System\Sounds\Digital\CamcorderJavaStart.wav"
 
 ;"\epoc32\release\armv5\urel\javam2g.dll"-"c:\sys\bin\javam2g.dll"
 ;"\epoc32\release\armv5\urel\z\resource\java\jvm\lib\jrt\javam2g.odc"-"c:\resource\java\jvm\lib\jrt\javam2g.odc"
@@ -339,9 +339,11 @@
 ;"\epoc32\release\armv5\urel\z\resource\java\jvm\lib\jrt\javasoftnotification.odc"-"c:\resource\java\jvm\lib\jrt\javasoftnotification.odc"
 
 "\epoc32\release\armv5\urel\eswtqt.dll"-"c:\sys\bin\eswtqt.dll"
+"\epoc32\release\armv5\urel\eswtqtwebkit.dll"-"c:\sys\bin\eswtqtwebkit.dll"
 "\epoc32\release\armv5\urel\openlcdui.dll"-"c:\sys\bin\openlcdui.dll"
 "\epoc32\release\armv5\urel\javanokiaui.dll"-"c:\sys\bin\javanokiaui.dll"
 "\epoc32\release\armv5\urel\z\resource\java\jvm\lib\jrt\eswtqt.odc"-"c:\resource\java\jvm\lib\jrt\eswtqt.odc"
+"\epoc32\release\armv5\urel\z\resource\java\jvm\lib\jrt\eswtqtwebkit.odc"-"c:\resource\java\jvm\lib\jrt\eswtqtwebkit.odc"
 "\epoc32\release\armv5\urel\z\resource\java\jvm\lib\jrt\openlcdui.odc"-"c:\resource\java\jvm\lib\jrt\openlcdui.odc"
 "\epoc32\release\armv5\urel\z\resource\java\jvm\lib\jrt\javanokiaui.odc"-"c:\resource\java\jvm\lib\jrt\javanokiaui.odc"
 
--- a/inc/build_defines.hrh	Fri Jun 11 13:33:44 2010 +0300
+++ b/inc/build_defines.hrh	Wed Jun 23 18:07:10 2010 +0300
@@ -15,7 +15,7 @@
 *
 */
 
-#define RD_JAVA_VERSION 2,2,1 
+#define RD_JAVA_VERSION 2,2,2 
 #define RD_JAVA_SYMBIAN_TARGET 
 #define RD_JAVA_S60_RELEASE_10_1 
 #define RD_JAVA_S60_RELEASE_10_1_ONWARDS 
@@ -27,9 +27,6 @@
 #define RD_JAVA_HTTP_EMC_ENABLED 
 #define RD_JAVA_NGA_ENABLED 
 #define SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK 
-#define RD_JAVA_USIF_APP_REG 
-#define RD_JAVA_USIF_NOTIFY_APP_ARC 
-#define RD_JAVA_USIF_NOTIFY_PROGRESS 
 #define RD_JAVA_PROXIMITY_LISTENER_ENABLED 
 #define RD_JAVA_OPENC_BETA_PATCH 
 #define OPENLCDUI_ENABLED 
--- a/inc/build_defines.pri	Fri Jun 11 13:33:44 2010 +0300
+++ b/inc/build_defines.pri	Wed Jun 23 18:07:10 2010 +0300
@@ -13,4 +13,4 @@
 #
 # Description: Generated file - do not edit manually
 #
-PROJECT_DEFINES *= RD_JAVA_SYMBIAN_TARGET RD_JAVA_S60_RELEASE_10_1 RD_JAVA_S60_RELEASE_10_1_ONWARDS RD_JAVA_S60_RELEASE_9_2_ONWARDS RD_JAVA_S60_RELEASE_5_0_ONWARDS RD_JAVA_UI_QT RD_JAVA_STDCPPV5 RD_JAVA_EPOCALLOWDLLDATA_FIX RD_JAVA_HTTP_EMC_ENABLED RD_JAVA_NGA_ENABLED SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK RD_JAVA_USIF_APP_REG RD_JAVA_USIF_NOTIFY_APP_ARC RD_JAVA_USIF_NOTIFY_PROGRESS RD_JAVA_PROXIMITY_LISTENER_ENABLED RD_JAVA_OPENC_BETA_PATCH OPENLCDUI_ENABLED RD_JAVA_OPENLCDUI_ENABLED RD_JAVA_INSTALLERUI_ENABLED RD_JAVA_PREWARM RD_JAVA_ADVANCED_TACTILE_FEEDBACK RD_JAVA_APPLICATION_SETTINGS_QT RD_JAVA_MIDPRMS_DB 
+PROJECT_DEFINES *= RD_JAVA_SYMBIAN_TARGET RD_JAVA_S60_RELEASE_10_1 RD_JAVA_S60_RELEASE_10_1_ONWARDS RD_JAVA_S60_RELEASE_9_2_ONWARDS RD_JAVA_S60_RELEASE_5_0_ONWARDS RD_JAVA_UI_QT RD_JAVA_STDCPPV5 RD_JAVA_EPOCALLOWDLLDATA_FIX RD_JAVA_HTTP_EMC_ENABLED RD_JAVA_NGA_ENABLED SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK RD_JAVA_PROXIMITY_LISTENER_ENABLED RD_JAVA_OPENC_BETA_PATCH OPENLCDUI_ENABLED RD_JAVA_OPENLCDUI_ENABLED RD_JAVA_INSTALLERUI_ENABLED RD_JAVA_PREWARM RD_JAVA_ADVANCED_TACTILE_FEEDBACK RD_JAVA_APPLICATION_SETTINGS_QT RD_JAVA_MIDPRMS_DB 
--- a/inc/java.txt	Fri Jun 11 13:33:44 2010 +0300
+++ b/inc/java.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -1,1 +1,1 @@
-2.2.1
+2.2.2
--- a/inc/project_defines.hrh	Fri Jun 11 13:33:44 2010 +0300
+++ b/inc/project_defines.hrh	Wed Jun 23 18:07:10 2010 +0300
@@ -26,9 +26,6 @@
 MACRO RD_JAVA_HTTP_EMC_ENABLED 
 MACRO RD_JAVA_NGA_ENABLED 
 MACRO SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK 
-MACRO RD_JAVA_USIF_APP_REG 
-MACRO RD_JAVA_USIF_NOTIFY_APP_ARC 
-MACRO RD_JAVA_USIF_NOTIFY_PROGRESS 
 MACRO RD_JAVA_PROXIMITY_LISTENER_ENABLED 
 MACRO RD_JAVA_OPENC_BETA_PATCH 
 MACRO OPENLCDUI_ENABLED 
--- a/javacommons/connectionmanager/inc.s60/connectionmanager.h	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/connectionmanager/inc.s60/connectionmanager.h	Wed Jun 23 18:07:10 2010 +0300
@@ -163,6 +163,7 @@
 
     static HBufC8 * PromptUserSelectNetworkAccessPointL();
     static HBufC8 * CreateDescriptorL(const int aType, const int id);
+    static bool checkIapDefaultL(TUint32 aMatchIapId, TUint32 aDestId, bool aDefault);
 
 
 
--- a/javacommons/connectionmanager/src.s60/connectionmanager.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/connectionmanager/src.s60/connectionmanager.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -65,7 +65,21 @@
 
 EXPORT_C bool ConnectionManager::isIapDefault(TUint32 aMatchIapId, TUint32 aDestId, bool aDefault)
 {
-    LOG(ESOCKET,EInfo,"+ConnectionManager::getDefualtId");
+	  LOG(ESOCKET,EInfo,"+ConnectionManager::isIapDefault");
+	  bool retVal = false;
+    TRAPD(err,retVal = checkIapDefaultL(aMatchIapId,aDestId,aDefault));
+    if(err!=KErrNone)
+    {
+        // error occured
+        return false;
+    }
+    return retVal;
+}
+
+bool ConnectionManager::checkIapDefaultL(TUint32 aMatchIapId, TUint32 aDestId, bool aDefault)
+{
+	
+    LOG(ESOCKET,EInfo,"+ConnectionManager::checkIapDefaultL");
     TUint32 id = aDestId;
     TUint32 tmpapId;
     TCmDefConnType type;
@@ -104,8 +118,9 @@
             return true;
         }
     }
-    return false;
-
+    return false;	
+	
+	
 }
 
 // ---------------------------------------------------------------------------
--- a/javacommons/fileutils/tsrc/fileutilstestinit/build/javafileutilstestinit.pro	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/fileutils/tsrc/fileutilstestinit/build/javafileutilstestinit.pro	Wed Jun 23 18:07:10 2010 +0300
@@ -21,7 +21,6 @@
 
 symbian {
     TARGET.CAPABILITY = all -tcb
-    INCLUDEPATH += /epoc32/include/caf
     LIBS += -lcaf -lcafutils -lefsrv -lDrmParsers -lDRMServerInterfaces
 }
 
--- a/javacommons/gcfbase/javasrc/com/nokia/mj/impl/gcf/PushRegistryPermissionImpl.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/gcfbase/javasrc/com/nokia/mj/impl/gcf/PushRegistryPermissionImpl.java	Wed Jun 23 18:07:10 2010 +0300
@@ -115,7 +115,7 @@
      */
     public String toString()
     {
-        return "javax.microedition.io.PushRegistryPermission";
+        return "javax.microedition.io.PushRegistry";
     }
 
     /**
--- a/javacommons/gcfprotocols/file/javasrc/com/nokia/mj/impl/file/FileInternalPermission.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/gcfprotocols/file/javasrc/com/nokia/mj/impl/file/FileInternalPermission.java	Wed Jun 23 18:07:10 2010 +0300
@@ -95,7 +95,17 @@
 
     public String toString()
     {
-        return "javax.microedition.io.FileProtocolPermission";
+        if (intent.equals("read"))
+        {
+            return "javax.microedition.io.Connector.file.read";
+        }
+
+        if (intent.equals("write"))
+        {
+            return "javax.microedition.io.Connector.file.write";   
+        }
+
+        return null;
     }
 
     /**
--- a/javacommons/gcfprotocols/file/tsrc/mt/filetestinit/build/javafiletestinit.pro	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/gcfprotocols/file/tsrc/mt/filetestinit/build/javafiletestinit.pro	Wed Jun 23 18:07:10 2010 +0300
@@ -21,7 +21,6 @@
 
 symbian {
     TARGET.CAPABILITY = all -tcb
-    INCLUDEPATH += /epoc32/include/caf
     LIBS += -lcaf -lcafutils -lefsrv -lDrmParsers -lDRMServerInterfaces
 }
 
--- a/javacommons/gcfprotocols/http/javasrc.s60/com/nokia/mj/impl/gcf/protocol/http/HttpPermissionImpl.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/gcfprotocols/http/javasrc.s60/com/nokia/mj/impl/gcf/protocol/http/HttpPermissionImpl.java	Wed Jun 23 18:07:10 2010 +0300
@@ -45,7 +45,7 @@
 
     public String toString()
     {
-        return "javax.microedition.io.HttpProtocolPermission";
+        return "javax.microedition.io.Connector.http";
     }
 
     public boolean implies(Permission p)
--- a/javacommons/gcfprotocols/https/javasrc.s60/com/nokia/mj/impl/gcf/protocol/https/HttpsPermissionImpl.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/gcfprotocols/https/javasrc.s60/com/nokia/mj/impl/gcf/protocol/https/HttpsPermissionImpl.java	Wed Jun 23 18:07:10 2010 +0300
@@ -51,7 +51,7 @@
 
     public String toString()
     {
-        return "javax.microedition.io.HttpsProtocolPermission";
+        return "javax.microedition.io.Connector.https";
     }
 
     public boolean implies(Permission p)
--- a/javacommons/gcfprotocols/secureconnection/javasrc/com/nokia/mj/impl/gcf/protocol/ssl/SSLPermissionImpl.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/gcfprotocols/secureconnection/javasrc/com/nokia/mj/impl/gcf/protocol/ssl/SSLPermissionImpl.java	Wed Jun 23 18:07:10 2010 +0300
@@ -55,7 +55,7 @@
 
     public String toString()
     {
-        return "javax.microedition.io.SSLProtocolPermission";
+        return "javax.microedition.io.Connector.ssl";
     }
 
     public boolean implies(Permission p)
--- a/javacommons/gcfprotocols/socket/socket/javasrc/com/nokia/mj/impl/gcf/protocol/socket/SocketPermissionImpl.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/gcfprotocols/socket/socket/javasrc/com/nokia/mj/impl/gcf/protocol/socket/SocketPermissionImpl.java	Wed Jun 23 18:07:10 2010 +0300
@@ -55,7 +55,7 @@
 
     public String toString()
     {
-        return "javax.microedition.io.SocketProtocolPermission";
+        return "javax.microedition.io.Connector.socket";
     }
 
     public boolean implies(Permission p)
--- a/javacommons/javaenv/tsrc/build/alltests.mmp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/javaenv/tsrc/build/alltests.mmp	Wed Jun 23 18:07:10 2010 +0300
@@ -22,8 +22,6 @@
 #include <../../../../inc/java_stdcpp_support_for_exe.hrh>
 #include <domain/osextensions/platform_paths.hrh>
 
-//SYSTEMINCLUDE /epoc32/include 
-
 USERINCLUDE ../../../inc
 USERINCLUDE ../../../../tools/cpputest/include/cpputest
 USERINCLUDE ../../../../tools/cpputest/include/platforms/symbian
--- a/javacommons/javastorage/tsrc/storageclient/build/alltests.mmp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/javastorage/tsrc/storageclient/build/alltests.mmp	Wed Jun 23 18:07:10 2010 +0300
@@ -22,7 +22,7 @@
 #include <../../../../../inc/java_stdcpp_support_for_exe.hrh>
 #include <platform_paths.hrh>
 
-SYSTEMINCLUDE /epoc32/include 
+APP_LAYER_SYSTEMINCLUDE
 
 USERINCLUDE ../../../inc
 USERINCLUDE ../../../../../tools/cpputest/include/cpputest
--- a/javacommons/jvms/j9/exports.inf	Fri Jun 11 13:33:44 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +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: 
-*
-*/
-
-PRJ_PLATFORMS
-default
-
-#ifndef RD_JAVA_SF_BUILD
-#include "s60/exports.inf"
-#endif
--- a/javacommons/jvms/j9/j9.pro	Fri Jun 11 13:33:44 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +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: 
-#
-
-TEMPLATE = subdirs
-
-# Export J9 only when available here (not available here in SF builds)
-# (use indirection through ./exports.inf for pregenerated bld.inf variation)
-exists($${_PRO_FILE_PWD_}/s60/exports.inf): {
-  BLD_INF_RULES.prj_extensions += "$${LITERAL_HASH}include \"exports.inf\"" \
-}
--- a/javacommons/security/data/att_manufacturer.txt	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/data/att_manufacturer.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -36,5 +36,7 @@
 grant assigned {
     permission javax.microedition.PropertyPermission "mobinfo.msisdn" "read";
     permission javax.microedition.PropertyPermission "mobinfo.cellid" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.countrycode" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.networkid" "read";
     permission javax.microedition.midlet.AutoStartPermission;
 }
--- a/javacommons/security/data/att_operatorextra.txt	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/data/att_operatorextra.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -36,5 +36,7 @@
 grant assigned {
     permission javax.microedition.PropertyPermission "mobinfo.msisdn" "read";
     permission javax.microedition.PropertyPermission "mobinfo.cellid" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.countrycode" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.networkid" "read";
     permission javax.microedition.midlet.AutoStartPermission;
 }
\ No newline at end of file
--- a/javacommons/security/data/msa_manufacturer.txt	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/data/msa_manufacturer.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -36,5 +36,7 @@
 grant assigned {
     permission javax.microedition.PropertyPermission "mobinfo.msisdn" "read";
     permission javax.microedition.PropertyPermission "mobinfo.cellid" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.countrycode" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.networkid" "read";
     permission javax.microedition.midlet.AutoStartPermission;
 }
--- a/javacommons/security/data/msa_operator.txt	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/data/msa_operator.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -36,5 +36,7 @@
 grant assigned {
     permission javax.microedition.PropertyPermission "mobinfo.msisdn" "read";
     permission javax.microedition.PropertyPermission "mobinfo.cellid" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.countrycode" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.networkid" "read";
     permission javax.microedition.midlet.AutoStartPermission;
 }
--- a/javacommons/security/data/msa_trustedthirdparty.txt	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/data/msa_trustedthirdparty.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -71,6 +71,8 @@
     permission javax.microedition.io.Connector.mms "mms://*" "open,receive";
     permission javax.microedition.io.Connector.cbs "cbs://*" "open,receive";
 }
-grant assigned {
+grant assigned "Location" {
     permission javax.microedition.PropertyPermission "mobinfo.cellid" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.countrycode" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.networkid" "read";
 }
--- a/javacommons/security/data/msa_untrusted.txt	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/data/msa_untrusted.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -60,6 +60,8 @@
     permission javax.microedition.io.Connector.mms "mms://*" "open,receive";
     permission javax.microedition.io.Connector.cbs "cbs://*" "open,receive";
 }
-grant assigned {
+grant assigned "Location" {
     permission javax.microedition.PropertyPermission "mobinfo.cellid" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.countrycode" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.networkid" "read";
 }
--- a/javacommons/security/data/s60_manufacturer.txt	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/data/s60_manufacturer.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -36,5 +36,7 @@
 grant assigned {
     permission javax.microedition.PropertyPermission "mobinfo.msisdn" "read";
     permission javax.microedition.PropertyPermission "mobinfo.cellid" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.countrycode" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.networkid" "read";
     permission javax.microedition.midlet.AutoStartPermission;
 }
--- a/javacommons/security/data/s60_operator.txt	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/data/s60_operator.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -36,5 +36,7 @@
 grant assigned {
     permission javax.microedition.PropertyPermission "mobinfo.msisdn" "read";
     permission javax.microedition.PropertyPermission "mobinfo.cellid" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.countrycode" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.networkid" "read";
     permission javax.microedition.midlet.AutoStartPermission;
 }
--- a/javacommons/security/data/s60_trustedthirdparty.txt	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/data/s60_trustedthirdparty.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -72,6 +72,9 @@
     permission javax.microedition.io.Connector.mms "mms://*" "open,receive";
     permission javax.microedition.io.Connector.cbs "cbs://*" "open,receive";
 }
-grant assigned {
+
+grant assigned "Location" {
     permission javax.microedition.PropertyPermission "mobinfo.cellid" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.countrycode" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.networkid" "read";
 }
--- a/javacommons/security/data/s60_untrusted.txt	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/data/s60_untrusted.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -60,6 +60,9 @@
     permission javax.microedition.io.Connector.mms "mms://*" "open,receive";
     permission javax.microedition.io.Connector.cbs "cbs://*" "open,receive";
 }
-grant assigned {
+
+grant assigned "Location" {
     permission javax.microedition.PropertyPermission "mobinfo.cellid" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.countrycode" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.networkid" "read";
 }
--- a/javacommons/security/javasrc.cdc/com/nokia/mj/impl/security/midp/authorization/PermissionGranter.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/javasrc.cdc/com/nokia/mj/impl/security/midp/authorization/PermissionGranter.java	Wed Jun 23 18:07:10 2010 +0300
@@ -359,7 +359,8 @@
                     ((PolicyBasedPermission)grantedPermissions.elementAt(i));
                 UserSecuritySettings settings =
                     permission.getUserSecuritySettings();
-                if (settings == null)
+                if (permission.getType() != PolicyBasedPermission.USER_TYPE 
+                    || settings == null)
                 {
                     // not a user permission -> move on to the next permission
                     Logger.log("Permission " + permission.getName() + " is not a user permission, therefore is is not returned as part of the group of blanket permissions");
@@ -586,7 +587,9 @@
                 for (int i=0; i<policyPermissions.length; i++)
                 {
                     if (policyPermissions[i].getType()
-                            == PolicyBasedPermission.ASSIGNED_TYPE)
+                            == PolicyBasedPermission.ASSIGNED_TYPE 
+                            || policyPermissions[i].getType() 
+                            == PolicyBasedPermission.USER_ASSIGNED_TYPE)
                     {
                         PolicyBasedPermissionImpl p1 = new PolicyBasedPermissionImpl(
                             policyPermissions[i]);
@@ -609,6 +612,7 @@
                                     policyPermissions[i].getName(),
                                     policyPermissions[i].getTarget(),
                                     policyPermissions[i].getActionList(),
+                                    policyPermissions[i].getType(),
                                     policyPermissions[i].getUserSecuritySettings()));
                         }
                     }
--- a/javacommons/security/javasrc.cdc/com/nokia/mj/impl/security/midp/authorization/SecurityPolicy.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/javasrc.cdc/com/nokia/mj/impl/security/midp/authorization/SecurityPolicy.java	Wed Jun 23 18:07:10 2010 +0300
@@ -132,13 +132,14 @@
         int domainLength = buf[index];
         index++;
         protectionDomain = new String(buf, index, domainLength);
+        boolean activeSettings = true;
         index+= domainLength;
         int permissions = buf[index];
         index++;
         policyPermissions = new SecurityPolicyPermission[permissions];
         for (int i=0; i<permissions; i++)
         {
-            policyPermissions[i] = SecurityPolicyPermission.getFromBytes(buf);
+            policyPermissions[i] = SecurityPolicyPermission.getFromBytes(buf, activeSettings);
         }
     }
 }
--- a/javacommons/security/javasrc.cdc/com/nokia/mj/impl/security/midp/authorization/SecurityPolicyPermission.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/javasrc.cdc/com/nokia/mj/impl/security/midp/authorization/SecurityPolicyPermission.java	Wed Jun 23 18:07:10 2010 +0300
@@ -52,12 +52,13 @@
         String name,
         String target,
         String actionList,
+        int type,
         SecurityPolicyPermissionSettings settings)
     {
         this.name = name;
         this.target = target;
         this.actionList = actionList;
-        this.type = USER_TYPE;
+        this.type = type;
         this.settings = settings;
     }
 
@@ -65,13 +66,18 @@
         String name,
         String target,
         String actionList,
+        SecurityPolicyPermissionSettings settings)
+    {
+        this(name, target, actionList, USER_TYPE, settings);
+    }
+
+    public SecurityPolicyPermission(
+        String name,
+        String target,
+        String actionList,
         int type)
     {
-        this.name = name;
-        this.target = target;
-        this.actionList = actionList;
-        // Check type
-        this.type = type;
+        this(name, target, actionList, type, null);
     }
 
     public int getType()
@@ -145,7 +151,7 @@
         return oStream.toByteArray();
     }
 
-    public static SecurityPolicyPermission getFromBytes(byte[] buf)
+    public static SecurityPolicyPermission getFromBytes(byte[] buf, boolean activeSettings)
     {
         int type = buf[SecurityPolicy.index];
         SecurityPolicy.index++;
@@ -155,10 +161,12 @@
         SecurityPolicy.index += nameLen;
         String target = readString(buf);
         String actionList = readString(buf);
-        if (type == USER_TYPE)
+        if (type == USER_TYPE || type == USER_ASSIGNED_TYPE)
         {
-            return new SecurityPolicyPermission(name, target, actionList,
-                                                SecurityPolicyPermissionSettings.getFromBytes(buf));
+            return new SecurityPolicyPermission(
+                name, target, actionList, type,
+                SecurityPolicyPermissionSettings.getFromBytes(
+                buf, activeSettings));
         }
         return new SecurityPolicyPermission(name, target, actionList, type);
     }
--- a/javacommons/security/javasrc.cdc/com/nokia/mj/impl/security/midp/authorization/SecurityPolicyPermissionSettings.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/javasrc.cdc/com/nokia/mj/impl/security/midp/authorization/SecurityPolicyPermissionSettings.java	Wed Jun 23 18:07:10 2010 +0300
@@ -30,15 +30,37 @@
     private String name;
     private int currentInteractionMode;
     private int[] allowedInteractionModes;
+    private boolean active;
+
+    public SecurityPolicyPermissionSettings(
+        String name)
+    {
+        this(name, UNDEFINED_INTERACTION_MODE, null, true);
+    }
 
     public SecurityPolicyPermissionSettings(
         String name,
         int currentInteractionMode,
         int[] allowedInteractionModes)
     {
+        this(name, currentInteractionMode, allowedInteractionModes, true);
+    }
+
+    public SecurityPolicyPermissionSettings(
+        String name,
+        int currentInteractionMode,
+        int[] allowedInteractionModes,
+        boolean activeSettings)
+    {
         this.name = name;
         this.currentInteractionMode = currentInteractionMode;
         this.allowedInteractionModes = allowedInteractionModes;
+        this.active = activeSettings;
+    }
+
+    public boolean isActive()
+    {
+        return active;
     }
 
     public String getName()
@@ -166,7 +188,7 @@
         return oStream.toByteArray();
     }
 
-    public static SecurityPolicyPermissionSettings getFromBytes(byte[] buf)
+    public static SecurityPolicyPermissionSettings getFromBytes(byte[] buf, boolean activeSettings)
     {
         int nameLen = buf[SecurityPolicy.index];
         SecurityPolicy.index++;
@@ -181,7 +203,7 @@
             allowedInteractionModes[i] = buf[SecurityPolicy.index];
             SecurityPolicy.index++;
         }
-        return new SecurityPolicyPermissionSettings(name, currentInteractionMode, allowedInteractionModes);
+        return new SecurityPolicyPermissionSettings(name, currentInteractionMode, allowedInteractionModes, activeSettings);
     }
 
 }
--- a/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/authorization/AccessControllerImpl.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/authorization/AccessControllerImpl.java	Wed Jun 23 18:07:10 2010 +0300
@@ -21,6 +21,7 @@
 import java.util.Vector;
 import java.security.AccessControlException;
 import com.nokia.mj.impl.utils.Uid;
+import com.nokia.mj.impl.security.midp.common.PolicyBasedPermission;
 import com.nokia.mj.impl.security.midp.common.PolicyBasedPermissionImpl;
 import com.nokia.mj.impl.security.midp.common.UserPermission;
 import com.nokia.mj.impl.security.midp.common.UserSecuritySettings;
@@ -256,7 +257,7 @@
      */
     private void handleUserPermission(
         Permission checkedPermission,
-        UserPermission resolvedPermission,
+        PolicyBasedPermissionImpl resolvedPermission,
         SecurityStorage storage)
     {
         UserSecuritySettings settings = resolvedPermission
@@ -300,6 +301,14 @@
                 new java.security.AccessControlException(
                     "Permission " + checkedPermission + " not allowed"));
         }
+        
+        // if the permission was assigned or the settings were not active, 
+        // then activate the user settings
+        if (resolvedPermission.getType() != PolicyBasedPermission.USER_TYPE 
+            || !settings.isActive())
+        {
+            storage.activateUserSecuritySettings(iAppUID, resolvedPermission);
+        }
 
         // if settings have not changed, still do one check on the current
         // interaction mode: if it's blanket, mark down that the prompt in
--- a/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/authorization/PermissionResolver.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/authorization/PermissionResolver.java	Wed Jun 23 18:07:10 2010 +0300
@@ -203,7 +203,9 @@
                     // add new settings
                     newPermissionInstancesAndSettings.addElement(
                         new PermisionInstanceAndSettings(
-                            p.getPermissionInstance(), newSettings));
+                            p.getPermissionInstance(), 
+                            p.getType(),
+                            newSettings));
                 }
                 else
                 {
@@ -240,6 +242,7 @@
                     getResolvedPermission(
                         requestedPermission,
                         policyPermission,
+                        p.getType(),
                         p.getSettings(),
                         requestedPermission.getClass().getName(),
                         requestedPermission.getName(),
@@ -274,6 +277,7 @@
                             PolicyBasedPermissionImpl permission1 =
                                 getResolvedPermission(requestedPermission,
                                                       policyPermission,
+                                                      p.getType(),
                                                       p.getSettings(),
                                                       requestedPermission.getClass().getName(),
                                                       requestedPermission.getName(),
@@ -307,6 +311,7 @@
                                         // the combined actions
                                         resolvedPermissions.setElementAt(getResolvedPermission(
                                                                              permission1.getPromptDetails(),
+                                                                             p.getType(),
                                                                              p.getSettings(),
                                                                              requestedPermission.getClass().getName(),
                                                                              requestedPermission.getName(),
@@ -358,6 +363,7 @@
                 (PermisionInstanceAndSettings)tmp.elementAt(0);
             tmp.removeElementAt(0);
             Permission permission1 = (Permission)instance1.getPermissionInstance();
+            int type = instance1.getType();
             UserSecuritySettings settings1 = instance1.getSettings();
             String compositeAction = "";
             // put the individual actions into a vector so that the composite
@@ -423,6 +429,7 @@
                             getResolvedPermission(
                                 requestedPermission,
                                 permission1,
+                                type,
                                 settings1,
                                 requestedPermission.getClass().getName(),
                                 requestedPermission.getName(),
@@ -452,6 +459,7 @@
 
     private static PolicyBasedPermissionImpl getResolvedPermission(
         PermissionBase securityPromptDetails,
+        int type,
         UserSecuritySettings userSettings,
         String permissionName,
         String targetName,
@@ -479,6 +487,7 @@
                    permissionName,
                    targetName,
                    actionList,
+                   type,
                    userSettings,
                    securityPromptDetails2);
     }
@@ -486,6 +495,7 @@
     private static PolicyBasedPermissionImpl getResolvedPermission(
         Permission requestedPermission,
         Object policyPermission,
+        int type,
         UserSecuritySettings userSettings,
         String permissionName,
         String targetName,
@@ -514,6 +524,7 @@
                    permissionName,
                    targetName,
                    actionList,
+                   type,
                    userSettings,
                    securityPromptDetails);
     }
@@ -545,7 +556,8 @@
                                policyPermissions[i].getActionList());
                 policyPermissionInstancesAndSettings.addElement(
                     new PermisionInstanceAndSettings(p,
-                                                     policyPermissions[i].getUserSecuritySettings()));
+                        policyPermissions[i].getType(),
+                        policyPermissions[i].getUserSecuritySettings()));
             }
             catch (InstantiationException e)
             {
@@ -590,7 +602,8 @@
                                grantedPermission.getActionList());
                 grantedPermissionInstancesAndSettings.addElement(
                     new PermisionInstanceAndSettings(p,
-                                                     grantedPermission.getUserSecuritySettings()));
+                    grantedPermission.getType(),
+                    grantedPermission.getUserSecuritySettings()));
             }
             catch (InstantiationException e)
             {
@@ -703,11 +716,13 @@
     private static class PermisionInstanceAndSettings
     {
         private Object permissionObject;
+        private int type;
         private UserSecuritySettings settings;
 
-        public PermisionInstanceAndSettings(Object permissionObject, UserSecuritySettings settings)
+        public PermisionInstanceAndSettings(Object permissionObject, int type, UserSecuritySettings settings)
         {
             this.permissionObject = permissionObject;
+            this.type = type;
             this.settings = settings;
         }
 
@@ -720,5 +735,10 @@
         {
             return settings;
         }
+        
+        public int getType()
+        {
+            return type;
+        }
     }
 }
--- a/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/authorization/SecurityPromptHandler.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/authorization/SecurityPromptHandler.java	Wed Jun 23 18:07:10 2010 +0300
@@ -23,6 +23,7 @@
 import com.nokia.mj.impl.security.midp.common.UserPermission;
 import com.nokia.mj.impl.security.common.PermissionBase;
 import com.nokia.mj.impl.security.utils.SecurityPromptMessage;
+import com.nokia.mj.impl.security.utils.Logger;
 import com.nokia.mj.impl.rt.ui.RuntimeUiFactory;
 import com.nokia.mj.impl.rt.ui.RuntimeUi;
 import com.nokia.mj.impl.rt.ui.ConfirmData;
@@ -171,6 +172,12 @@
                              .getSecurityPromptQuestion(currentInteractionMode);
                 break;
             }
+            if (promptText == null)
+            {
+                // no text to show -> hande it as deny
+                Logger.logWarning("User permission was denied by platform since it did not provide any security prompt question " + userPermission);
+                return handleDenyAnswer(settings);
+            }
             // check if the two texts are equal
             if ((mostPowerfulInteractionModeText != null
                     && mostPowerfulInteractionModeText.equalsIgnoreCase(
--- a/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/PermissionMappingTable.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/PermissionMappingTable.java	Wed Jun 23 18:07:10 2010 +0300
@@ -194,7 +194,6 @@
         PERMISSION_MAPPING_TABLE.put(
             "javax.microedition.io.Connector.vtag", new MIDPPermission(
                 "com.nokia.mj.impl.ccapi.utils.ContactlessCommunicationPermission", "vtag://*", "open"));
-        // add name of MIDP3 class permissions
         PERMISSION_MAPPING_TABLE.put(
             "javax.microedition.io.SocketProtocolPermission", new MIDPPermission(
                 "com.nokia.mj.impl.gcf.protocol.socket.SocketPermissionImpl", "socket://*"));
@@ -229,6 +228,9 @@
             "javax.microedition.midlet.AutoStartPermission", new MIDPPermission(
                 "com.nokia.mj.impl.installer.utils.AutoStartPermission", null));
        PERMISSION_MAPPING_TABLE.put(
+            "AutoStartPermission", new MIDPPermission(
+                "com.nokia.mj.impl.installer.utils.AutoStartPermission", null));
+       PERMISSION_MAPPING_TABLE.put(
             "javax.microedition.midlet.CmdLineArgsPermission", new MIDPPermission(
                 "com.nokia.mj.impl.rt.utils.CmdLineArgsPermission", null));
        PERMISSION_MAPPING_TABLE.put(
--- a/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/PolicyBasedPermission.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/PolicyBasedPermission.java	Wed Jun 23 18:07:10 2010 +0300
@@ -26,6 +26,7 @@
     public static final int USER_TYPE = 1;
     public static final int ALLOWED_TYPE = 2;
     public static final int ASSIGNED_TYPE = 3;
+    public static final int USER_ASSIGNED_TYPE = 4;
 
     public String getName();
     public String getTarget();
--- a/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/PolicyBasedPermissionImpl.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/PolicyBasedPermissionImpl.java	Wed Jun 23 18:07:10 2010 +0300
@@ -33,17 +33,27 @@
         String name,
         String target,
         String actionList,
+        int type,
         UserSecuritySettings userSettings,
         PermissionBase securityPromptDetails)
     {
         super(name, target, actionList, userSettings, securityPromptDetails);
+        this.type = type;
+    }
 
-        this.type = USER_TYPE;
+    public PolicyBasedPermissionImpl(
+        String name,
+        String target,
+        String actionList,
+        int type,
+        UserSecuritySettings userSettings)
+    {
+        this(name, target, actionList, type, userSettings, null);
     }
 
     public PolicyBasedPermissionImpl(PolicyBasedPermission p)
     {
-        this(p.getName(), p.getTarget(), p.getActionList(),
+        this(p.getName(), p.getTarget(), p.getActionList(), p.getType(),
              (p.getUserSecuritySettings() != null ?
               new UserSecuritySettingsImpl(p.getUserSecuritySettings().getName(),
                                            p.getUserSecuritySettings().getCurrentInteractionMode(),
@@ -57,7 +67,7 @@
         String actionList,
         UserSecuritySettings userSettings)
     {
-        this(name, target, actionList, userSettings, null);
+        this(name, target, actionList, USER_TYPE, userSettings, null);
     }
 
 
@@ -67,10 +77,7 @@
         String actionList,
         int type)
     {
-        super(name, target, actionList, null);
-
-        // Check type
-        this.type = type;
+        this(name, target, actionList, type, null, null);
     }
 
     public int getType()
--- a/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/UserSecuritySettings.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/UserSecuritySettings.java	Wed Jun 23 18:07:10 2010 +0300
@@ -25,6 +25,7 @@
 public interface UserSecuritySettings
 {
     // interaction modes
+    public static final int UNDEFINED_INTERACTION_MODE = -1;
     public static final int ONESHOT_INTERACTION_MODE = 1;
     public static final int SESSION_INTERACTION_MODE = 2;
     public static final int BLANKET_INTERACTION_MODE = 3;
@@ -55,6 +56,7 @@
     public static final String SECURITY_WARNINGS_DEFAULT_MODE = "2";
 
     public String getName();
+    public boolean isActive();
     public int getCurrentInteractionMode();
     public int[] getAllowedInteractionModes();
     public boolean isInteractionModeAllowed(int interactionMode);
--- a/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/UserSecuritySettingsImpl.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/UserSecuritySettingsImpl.java	Wed Jun 23 18:07:10 2010 +0300
@@ -33,6 +33,7 @@
     private int[] allowedInteractionModes;
     private boolean blanketPrompt;
     private static ResourceLoader resLoader = null;
+    private boolean active;
 
     private static final String NET_ACCESS_ID = "setting_net_access";
     private static final String LOW_LEVEL_NET_ACCESS_ID = "setting_low_level_net_access";
@@ -65,12 +66,28 @@
         String name,
         int currentInteractionMode,
         int[] allowedInteractionModes,
-        boolean blanketPrompt)
+        boolean blanketPrompt,
+        boolean active)
     {
         this.name = name;
         setCurrentInteractionMode(currentInteractionMode);
         setAllowedInteractionModes(allowedInteractionModes);
         this.blanketPrompt = blanketPrompt;
+        this.active = active;
+    }
+
+    public UserSecuritySettingsImpl(
+        String name,
+        int currentInteractionMode,
+        int[] allowedInteractionModes,
+        boolean blanketPrompt)
+    {
+        this(name, currentInteractionMode, allowedInteractionModes, blanketPrompt, true);
+    }
+    
+    public boolean isActive()
+    {
+        return active;
     }
 
     public String getName()
--- a/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/storage/SecurityStorage.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/storage/SecurityStorage.java	Wed Jun 23 18:07:10 2010 +0300
@@ -314,12 +314,13 @@
                                 StorageNames.NAME);
                 String actionList = getStorageAttributeValue(permEntries[i],
                                     StorageNames.ACTION);
-                String fgName = getStorageAttributeValue(permEntries[i],
-                                StorageNames.FUNCTION_GROUP);
-                if (fgName != null)
+                FunctionGroup fg = decodeFunctionGroup(
+                                getStorageAttributeValue(permEntries[i],
+                                StorageNames.FUNCTION_GROUP));
+                if (fg != null)
                 {
                     UserSecuritySettings cachedSettings =
-                        (UserSecuritySettings)fGroups.get(fgName);
+                        (UserSecuritySettings)fGroups.get(fg.name);
                     if (cachedSettings != null)
                     {
                         permissions.addElement(
@@ -327,6 +328,7 @@
                                 className,
                                 target,
                                 actionList,
+                                fg.type,
                                 cachedSettings));
                     }
                     else
@@ -338,7 +340,7 @@
                                                  appUID.getStringValue()));
                         fgQuery.addAttribute(new StorageAttribute(
                                                  StorageNames.FUNCTION_GROUP,
-                                                 fgName));
+                                                 fg.name));
                         fgQuery.addAttribute(new StorageAttribute(
                                                  StorageNames.ALLOWED_SETTINGS,
                                                  ""));
@@ -364,17 +366,19 @@
                                 String blanketPrompt = getStorageAttributeValue(fgEntries[0],
                                                        StorageNames.BLANKET_PROMPT);
                                 UserSecuritySettings settings = new UserSecuritySettingsImpl(
-                                    fgName,
+                                    fg.name,
                                     currentSetting,
                                     decodeAllowedSettings(allowedSettings),
-                                    ("1".equals(blanketPrompt) ? true : false));
+                                    ("1".equals(blanketPrompt) ? true : false),
+                                    fg.isActive);
                                 permissions.addElement(
                                     new PolicyBasedPermissionImpl(
                                         className,
                                         target,
                                         actionList,
+                                        fg.type,
                                         settings));
-                                fGroups.put(fgName, settings);
+                                fGroups.put(fg.name, settings);
                             }
                             catch (NumberFormatException e)
                             {
@@ -394,7 +398,10 @@
                             null));
                 }
                 // cleanup the query, so it can be used at the next interation
-                query.removeAttribute(fgName);
+                if (fg != null)
+                {
+                    query.removeAttribute(fg.name);
+                }
             }
         }
         // add the non user permissions into the set of returned permissions
@@ -483,7 +490,33 @@
                     StorageAttribute fgAttribute = new StorageAttribute(
                         StorageNames.FUNCTION_GROUP,
                         fgName);
-                    permEntry.addAttribute(fgAttribute);
+                    if (p.getType() == PolicyBasedPermission.USER_ASSIGNED_TYPE 
+                        || !settings.isActive())
+                    {
+                        // the inactive settings or the settings of assigned 
+                        // permissions with user settings should be activated 
+                        // only after the first usage of the permission. 
+                        // Otherwise it creates confusion for the user, 
+                        // like in the following use cases:
+                        // 1) the installation time dialog would include the assigned
+                        //    permissions even though the MIDlet did not request it
+                        // 2) after installing a MIDlet suite and before accessing 
+                        //    some protected functionality (which is guarder by 
+                        //    assigned permission with user setting) the user sees 
+                        //    the settings of the permissions in the MIDlet settings 
+                        //   (even though the MIDlet might never access such 
+                        //   functionality)
+                        //
+                        // disabling the settings = alter the name of the function 
+                        // group stored in PERMISSIONS table
+                        permEntry.addAttribute(new StorageAttribute(
+                            StorageNames.FUNCTION_GROUP,
+                            encodeFunctionGroup(p.getType(),fgName)));
+                    }
+                    else
+                    {
+                        permEntry.addAttribute(fgAttribute);
+                    }
                     // Do we need to check if the settings which already exist
                     // are equal to the ones which are to be inserted?
                     // This won't even happen, since all the settings are read
@@ -722,6 +755,10 @@
                                    validCerts));
         }
         int securityWarningsMode = data.getSecurityWarningsMode();
+        if (update)
+        {
+            securityWarningsMode = readSecurityWarningsMode(appUID);
+        }
         if (securityWarningsMode == GeneralSecuritySettings.DEFAULT_SECURITY_MODE
                 || securityWarningsMode == GeneralSecuritySettings.USER_SECURITY_MODE)
         {
@@ -1014,6 +1051,42 @@
             }
         }
     }
+    
+    /**
+     * Activates user security settings
+     *
+     * @param appUID       the UID of the application whose user 
+                           settings are activatesversion is read
+     * @param settingsName the name of permission whose settings 
+     *                     which are activated
+     */
+    public void activateUserSecuritySettings(
+        Uid msUID,
+        PolicyBasedPermission permission)
+    {
+        if (permission.getUserSecuritySettings() == null)
+        {
+            return;
+        }
+        StorageEntry oldEntry = new StorageEntry();
+        oldEntry.addAttribute(new StorageAttribute(
+                               StorageAttribute.ID,
+                               msUID.getStringValue()));
+        oldEntry.addAttribute(new StorageAttribute(
+                               StorageNames.FUNCTION_GROUP,
+                               encodeFunctionGroup(permission.getType(), 
+                               permission.getUserSecuritySettings().getName())));
+        StorageEntry newEntry = new StorageEntry();
+        newEntry.addAttribute(new StorageAttribute(
+                               StorageAttribute.ID,
+                               msUID.getStringValue()));
+        newEntry.addAttribute(new StorageAttribute(
+                               StorageNames.FUNCTION_GROUP,
+                               permission.getUserSecuritySettings().getName()));
+        doStorageUpdate(StorageNames.MIDP_PERMISSIONS_TABLE,
+                        newEntry,
+                        oldEntry);
+    }
 
     /**
      * Reads the value of the suite version attribute
@@ -1213,16 +1286,24 @@
                     if (oldSettings != null
                             && newSettings != null)
                     {
+                        boolean activeSettings = false;
+                        if (oldSettings.isActive() 
+                            || newSettings.isActive())
+                        {
+                            activeSettings = true;
+                        }
                         newGrantedPermissions.addElement(
                             new PolicyBasedPermissionImpl(
                                 p.getName(),
                                 p.getTarget(),
                                 p.getActionList(),
+                                p.getType(),
                                 new UserSecuritySettingsImpl(
                                     newSettings.getName(),
                                     oldSettings.getCurrentInteractionMode(),
                                     newSettings.getAllowedInteractionModes(),
-                                    oldSettings.getBlanketPrompt())));
+                                    oldSettings.getBlanketPrompt(),
+                                    activeSettings)));
                     }
                     else
                     {
@@ -1792,4 +1873,46 @@
         }
         return NOT_FOUND;
     }
+    
+    private String encodeFunctionGroup(int type, String name)
+    {
+        return (type + ";" + name);
+    }
+    
+    private FunctionGroup decodeFunctionGroup(String fg)
+    {
+        boolean isActive = true;
+        if (fg != null)
+        {
+            int sepIndex = fg.indexOf(";");
+            int type = PolicyBasedPermission.USER_TYPE;
+            if (sepIndex != -1)
+            {
+                isActive = false;
+                try
+                {
+                    type = Integer.valueOf(
+                        fg.substring(0, sepIndex)).intValue();
+                }
+                catch (NumberFormatException e)
+                {
+                }
+            }
+            return new FunctionGroup(type, fg.substring(sepIndex + 1), isActive);
+        }
+        return null;
+    }
+    
+    private class FunctionGroup
+    {
+        FunctionGroup(int type, String name, boolean isActive)
+        {
+            this.type = type;
+            this.name = name;
+            this.isActive = isActive;
+        }
+        private boolean isActive;
+        private int type;
+        private String name;
+    }
 }
--- a/javacommons/security/javaunicertstoreplugin/src.s60/200213A3.rss	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/javaunicertstoreplugin/src.s60/200213A3.rss	Wed Jun 23 18:07:10 2010 +0300
@@ -18,7 +18,7 @@
 
 // INCLUDES
 
-#include <registryinfov2.rh>
+#include <ecom/registryinfov2.rh>
 #include <ct/interfaceuid.hrh>
 
 // Some defines of useful values for attributes to simplify
--- a/javacommons/security/legacysupport/midp2userpreferences/build/midp2userpreferences.pro	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/legacysupport/midp2userpreferences/build/midp2userpreferences.pro	Wed Jun 23 18:07:10 2010 +0300
@@ -19,11 +19,7 @@
 CONFIG += omj stl
 CONFIG -= qt
 
-INCLUDEPATH += /epoc32/include/j2me/midp2/data \
-               ../../../../../inc/j2me/midp2/security \
-               ../../../../../inc/j2me/midp2/runtime \
-               ../../../../../inc/j2me/midp2/dbv2 \
-               ../../storageutils/inc
+INCLUDEPATH += ../../storageutils/inc
 
 SOURCES += ../../storageutils/src/*.cpp \
            ../src/*.cpp
--- a/javacommons/security/legacysupport/midp2userpreferences/src/MIDP2UserPreferences.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/legacysupport/midp2userpreferences/src/MIDP2UserPreferences.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -22,8 +22,8 @@
 #include "UserPreferencesIterator.h"
 #include "MIDletSuiteUserPreferences.h"
 #include "MIDletSuiteCustomAttributes.h"
-#include <MUserSecurityPreferencesTable.h>
-#include <MSecurityPolicyV2.h>
+#include "MUserSecurityPreferencesTable.h"
+#include "j2me/midp2/security/MSecurityPolicyV2.h"
 #include "SecurityPreferences.h"
 #include "javauid.h"
 
--- a/javacommons/security/legacysupport/tsrc/build/securitylegacysupportunittests.mmp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/legacysupport/tsrc/build/securitylegacysupportunittests.mmp	Wed Jun 23 18:07:10 2010 +0300
@@ -22,11 +22,6 @@
 #include <../../../../../inc/java_stdcpp_support_for_exe.hrh>
 #include <platform_paths.hrh>
 
-SYSTEMINCLUDE /epoc32/include 
-SYSTEMINCLUDE ../../../../../inc/j2me/midp2/security
-SYSTEMINCLUDE ../../../../../inc/j2me/midp2/data
-SYSTEMINCLUDE ../../../../../inc/j2me/midp2/runtime
-
 USERINCLUDE ../../../../../tools/cpputest/include/cpputest
 USERINCLUDE ../../../../../tools/cpputest/include/platforms/symbian
 USERINCLUDE ../../../../../inc
--- a/javacommons/security/legacysupport/tsrc/src/testpermissiondb.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/legacysupport/tsrc/src/testpermissiondb.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -23,7 +23,7 @@
 #include "javastoragenames.h"
 #include "javauid.h"
 
-#include <midp2permissiondb.h>
+#include "j2me/midp2/security/midp2permissiondb.h"
 
 using namespace MIDP;
 using namespace java::storage;
--- a/javacommons/security/legacysupport/tsrc/src/testsecuritypolicy.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/legacysupport/tsrc/src/testsecuritypolicy.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -20,7 +20,7 @@
 
 #include "TestHarness.h"
 
-#include <msecuritypolicyv2.h>
+#include "j2me/midp2/security/msecuritypolicyv2.h"
 
 using namespace MIDP;
 
--- a/javacommons/security/legacysupport/tsrc/src/testuserpreferences.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/legacysupport/tsrc/src/testuserpreferences.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -25,11 +25,11 @@
 #include "javauid.h"
 #include "javasymbianoslayer.h"
 
-#include <muserpreferences.h>
-#include <mmidletsuiteuserpreferencesiterator.h>
-#include <mmidletsuiteuserpreferences.h>
-#include <mmidletsuitecustomattributes.h>
-#include <msecuritypolicyv2.h>
+#include "j2me/midp2/data/muserpreferences.h"
+#include "j2me/midp2/data/mmidletsuiteuserpreferencesiterator.h"
+#include "j2me/midp2/data/mmidletsuiteuserpreferences.h"
+#include "j2me/midp2/data/mmidletsuitecustomattributes.h"
+#include "j2me/midp2/security/msecuritypolicyv2.h"
 
 using namespace MIDP;
 using namespace java::storage;
--- a/javacommons/security/src.s60/telutils.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/src.s60/telutils.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -63,6 +63,18 @@
     }
 }
 
+signed int TelUtils::getSecureTime()
+{
+    TTime t;
+    if (t.UniversalTimeSecure())
+    {
+        t.UniversalTime();
+    }
+    TTimeIntervalSeconds sec;
+    TTime baseTime(MAKE_TINT64(0x00dcddb3 ,0x0f2f8000)); // 1st Jan 1970
+    t.SecondsFrom(baseTime, sec);
+    return sec.Int();
+}
 
 void TelUtils::ConstructL()
 {
--- a/javacommons/security/src.s60/telutils.h	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/src.s60/telutils.h	Wed Jun 23 18:07:10 2010 +0300
@@ -35,6 +35,7 @@
     static TelUtils* createInstance();
     void getNetworkCodes(std::string& mnc, std::string& mcc);
     void getImei(std::string& imei);
+    static signed int getSecureTime();
     virtual ~TelUtils();
 
 private: //Methods
--- a/javacommons/security/src/midpauthenticationmoduleimpl.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/src/midpauthenticationmoduleimpl.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -22,6 +22,7 @@
 #include "midpauthenticationmoduleimpl.h"
 #include "storagehandler.h"
 #include "securityutils.h"
+#include "telutils.h"
 #include "javacertstorehandler.h"
 #include "securitycommsmessagedefs.h"
 #include "javastorage.h"
@@ -38,7 +39,6 @@
 #include <openssl/err.h>
 #include <openssl/rsa.h>
 #include <openssl/sha.h>
-#include <sys/time.h>
 #include <string.h>
 
 using namespace java::security;
@@ -455,9 +455,7 @@
             break;
         }
 
-        struct timeval tv;
-        int i = gettimeofday(&tv, NULL);
-        X509_STORE_CTX_set_time(x509_ctx, X509_V_FLAG_USE_CHECK_TIME, tv.tv_sec);
+        X509_STORE_CTX_set_time(x509_ctx, X509_V_FLAG_USE_CHECK_TIME, TelUtils::getSecureTime());
         // set the callback for validation - needed for the critical extension
         // used by developer certificates
         X509_STORE_CTX_set_verify_cb(x509_ctx, verify_callback);
@@ -475,7 +473,7 @@
         {
             bool extKeyUsageKnown = false;
             char EXT_KEY_USAGE_OID[80];
-            for (i = 0; i < sk_ASN1_OBJECT_num(extKeyUsage); i++)
+            for (int i = 0; i < sk_ASN1_OBJECT_num(extKeyUsage); i++)
             {
                 ASN1_OBJECT *usage = sk_ASN1_OBJECT_value(extKeyUsage,i);
                 OBJ_obj2txt(EXT_KEY_USAGE_OID,
--- a/javacommons/security/tsrc/data/javasrc/invalidjars/ImplementProtectedInterface/myClass.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/tsrc/data/javasrc/invalidjars/ImplementProtectedInterface/myClass.java	Wed Jun 23 18:07:10 2010 +0300
@@ -32,6 +32,11 @@
         return null;
     }
 
+    public boolean isActive()
+    {
+        return true;
+    }
+
     public int getCurrentInteractionMode()
     {
         return 0;
--- a/javacommons/security/tsrc/data/javasrc/invalidjars/InnerClassImplementsProtectedInterface/myClass.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/tsrc/data/javasrc/invalidjars/InnerClassImplementsProtectedInterface/myClass.java	Wed Jun 23 18:07:10 2010 +0300
@@ -22,6 +22,11 @@
     private class myInnerClass
             implements com.nokia.mj.impl.security.midp.common.UserSecuritySettings
     {
+        
+        public boolean isActive()
+        {
+            return true;
+        }
 
         public String getName()
         {
--- a/javacommons/security/tsrc/data/policies/all.txt	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/tsrc/data/policies/all.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -3,5 +3,4 @@
 grant assigned {
     permission java.util.PropertyPermission "microedition.*" "read";
     permission javax.microedition.PropertyPermission "mobinfo.publicinfo" "read";
-    permission javax.microedition.PropertyPermission "mobinfo.cellid" "read";   
 }
--- a/javacommons/security/tsrc/data/policies/test_manufacturer.txt	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/tsrc/data/policies/test_manufacturer.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -34,5 +34,8 @@
 }
 grant assigned {
     permission javax.microedition.PropertyPermission "mobinfo.msisdn" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.cellid" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.countrycode" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.networkid" "read";
     permission javax.microedition.midlet.AutoStartPermission;
 }
--- a/javacommons/security/tsrc/data/policies/test_operator.txt	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/tsrc/data/policies/test_operator.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -34,5 +34,8 @@
 }
 grant assigned {
     permission javax.microedition.PropertyPermission "mobinfo.msisdn" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.cellid" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.countrycode" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.networkid" "read";
     permission javax.microedition.midlet.AutoStartPermission;
 }
--- a/javacommons/security/tsrc/data/policies/test_trustedthirdparty.txt	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/tsrc/data/policies/test_trustedthirdparty.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -72,3 +72,9 @@
     permission javax.microedition.io.Connector.mms "mms://*" "open,receive";
     permission javax.microedition.io.Connector.cbs "cbs://*" "open,receive";
 }
+
+grant assigned "Location" {
+    permission javax.microedition.PropertyPermission "mobinfo.cellid" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.countrycode" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.networkid" "read";
+}
--- a/javacommons/security/tsrc/data/policies/test_untrusted.txt	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/tsrc/data/policies/test_untrusted.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -60,3 +60,9 @@
     permission javax.microedition.io.Connector.mms "mms://*" "open,receive";
     permission javax.microedition.io.Connector.cbs "cbs://*" "open,receive";
 }
+
+grant assigned "Location" {
+    permission javax.microedition.PropertyPermission "mobinfo.cellid" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.countrycode" "read";
+    permission javax.microedition.PropertyPermission "mobinfo.networkid" "read";
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/security/tsrc/data/validpolicies/assigned_settings_only.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,4 @@
+domain operator;
+grant assigned "Settings" oneshot {
+    permission assigned.permission.invalid.settings;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/security/tsrc/data/validpolicies/assigned_settings_orphaned.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,4 @@
+domain operator;
+grant assigned "Settings" {
+    permission assigned.permission.orphaned;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/security/tsrc/data/validpolicies/validators/assigned_and_user_settings.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,3 @@
+domain=mydomain
+user_assigned?Settings:blanket:no?assigned.user.permission
+user?Settings:blanket:no?user.permission
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/security/tsrc/data/validpolicies/validators/assigned_settings_only.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,2 @@
+domain=operator
+user_assigned?Settings:oneshot:no?assigned.permission.invalid.settings
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/security/tsrc/data/validpolicies/validators/assigned_settings_orphaned.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,2 @@
+domain=operator
+assigned?assigned.permission.orphaned
--- a/javacommons/security/tsrc/data/validpolicies/validators/domain_without_end_separator.txt	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/tsrc/data/validpolicies/validators/domain_without_end_separator.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -1,2 +1,2 @@
 domain=operator
-allowed,javax.microedition.midlet.AutoStartPermission
+allowed?javax.microedition.midlet.AutoStartPermission
--- a/javacommons/security/tsrc/data/validpolicies/validators/identified_thirdparty_like_policy.txt	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/tsrc/data/validpolicies/validators/identified_thirdparty_like_policy.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -1,17 +1,17 @@
 domain=IdentifiedThirdParty
-user,NetAccess:session:blanket:oneshot:no,javax.microedition.io.HttpProtocolPermission,http://*
-user,NetAccess:session:blanket:oneshot:no,javax.microedition.io.HttpsProtocolPermission,https://*
-user,LowLevelNetAccess:session:blanket:oneshot:no,javax.microedition.io.DatagramProtocolPermission,datagram://*
-user,LowLevelNetAccess:session:blanket:oneshot:no,javax.microedition.io.DatagramProtocolPermission,datagram://
-user,LowLevelNetAccess:session:blanket:oneshot:no,javax.microedition.io.SocketProtocolPermission,socket://*
-user,LowLevelNetAccess:session:blanket:oneshot:no,javax.microedition.io.SocketProtocolPermission,socket://
-user,LowLevelNetAccess:session:blanket:oneshot:no,javax.microedition.io.SSLProtocolPermission,ssl://*
-user,ApplicationAutoInvocation:oneshot:blanket:session:no,javax.microedition.io.PushRegistryPermission,*
-user,LocalConnectivity:session:blanket:oneshot:no,javax.microedition.io.CommProtocolPermission,comm:*
-user,MultimediaRecording:session:blanket:oneshot:no,javax.microedition.media.PlayerPermission,*,record
-user,MultimediaRecording:session:blanket:oneshot:no,javax.microedition.media.PlayerPermission,*,snapshot
-assigned,java.util.PropertyPermission,microedition.*,read
-assigned,javax.microedition.event.EventPermission,*.*,read
-assigned,javax.microedition.event.EventPermission,*.*,register
-assigned,javax.microedition.event.EventPermission,*.*,post
+user?NetAccess:session:blanket:oneshot:no?javax.microedition.io.HttpProtocolPermission,http://*
+user?NetAccess:session:blanket:oneshot:no?javax.microedition.io.HttpsProtocolPermission,https://*
+user?LowLevelNetAccess:session:blanket:oneshot:no?javax.microedition.io.DatagramProtocolPermission,datagram://*
+user?LowLevelNetAccess:session:blanket:oneshot:no?javax.microedition.io.DatagramProtocolPermission,datagram://
+user?LowLevelNetAccess:session:blanket:oneshot:no?javax.microedition.io.SocketProtocolPermission,socket://*
+user?LowLevelNetAccess:session:blanket:oneshot:no?javax.microedition.io.SocketProtocolPermission,socket://
+user?LowLevelNetAccess:session:blanket:oneshot:no?javax.microedition.io.SSLProtocolPermission,ssl://*
+user?ApplicationAutoInvocation:oneshot:blanket:session:no?javax.microedition.io.PushRegistryPermission,*
+user?LocalConnectivity:session:blanket:oneshot:no?javax.microedition.io.CommProtocolPermission,comm:*
+user?MultimediaRecording:session:blanket:oneshot:no?javax.microedition.media.PlayerPermission,*,record
+user?MultimediaRecording:session:blanket:oneshot:no?javax.microedition.media.PlayerPermission,*,snapshot
+assigned?java.util.PropertyPermission,microedition.*,read
+assigned?javax.microedition.event.EventPermission,*.*,read
+assigned?javax.microedition.event.EventPermission,*.*,register
+assigned?javax.microedition.event.EventPermission,*.*,post
 
--- a/javacommons/security/tsrc/data/validpolicies/validators/ignore_interaction_modes_for_allowed_group.txt	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/tsrc/data/validpolicies/validators/ignore_interaction_modes_for_allowed_group.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -1,3 +1,3 @@
 domain=Manufacturer
-allowed,javax.microedition.io.HttpProtocolPermission,http://*
+allowed?javax.microedition.io.HttpProtocolPermission,http://*
 
--- a/javacommons/security/tsrc/data/validpolicies/validators/manufacturer_like_policy.txt	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/tsrc/data/validpolicies/validators/manufacturer_like_policy.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -1,23 +1,23 @@
 domain=Manufacturer
-allowed,javax.microedition.io.HttpProtocolPermission,http://*
-allowed,javax.microedition.io.HttpsProtocolPermission,https://*
-allowed,javax.microedition.io.DatagramProtocolPermission,datagram://*
-allowed,javax.microedition.io.DatagramProtocolPermission,datagram://
-allowed,javax.microedition.io.SocketProtocolPermission,socket://*
-allowed,javax.microedition.io.SocketProtocolPermission,socket://
-allowed,javax.microedition.io.SSLProtocolPermission,ssl://*
-allowed,javax.microedition.io.PushRegistryPermission,*
-allowed,javax.microedition.io.CommProtocolPermission,comm:*
-allowed,javax.microedition.media.PlayerPermission,*,record
-allowed,javax.microedition.media.PlayerPermission,*,snapshot
-allowed,java.util.PropertyPermission,*,read
-allowed,javax.microedition.event.EventPermission,*,read
-allowed,javax.microedition.event.EventPermission,*,register
-allowed,javax.microedition.event.EventPermission,*,post
-allowed,javax.microedition.midlet.ActionsDeniedPermission
-allowed,javax.microedition.midlet.AutoStartPermission
-assigned,java.util.PropertyPermission,microedition.*,read
-assigned,javax.microedition.event.EventPermission,*.*,read
-assigned,javax.microedition.event.EventPermission,*.*,register
-assigned,javax.microedition.event.EventPermission,*.*,post
+allowed?javax.microedition.io.HttpProtocolPermission,http://*
+allowed?javax.microedition.io.HttpsProtocolPermission,https://*
+allowed?javax.microedition.io.DatagramProtocolPermission,datagram://*
+allowed?javax.microedition.io.DatagramProtocolPermission,datagram://
+allowed?javax.microedition.io.SocketProtocolPermission,socket://*
+allowed?javax.microedition.io.SocketProtocolPermission,socket://
+allowed?javax.microedition.io.SSLProtocolPermission,ssl://*
+allowed?javax.microedition.io.PushRegistryPermission,*
+allowed?javax.microedition.io.CommProtocolPermission,comm:*
+allowed?javax.microedition.media.PlayerPermission,*,record
+allowed?javax.microedition.media.PlayerPermission,*,snapshot
+allowed?java.util.PropertyPermission,*,read
+allowed?javax.microedition.event.EventPermission,*,read
+allowed?javax.microedition.event.EventPermission,*,register
+allowed?javax.microedition.event.EventPermission,*,post
+allowed?javax.microedition.midlet.ActionsDeniedPermission
+allowed?javax.microedition.midlet.AutoStartPermission
+assigned?java.util.PropertyPermission,microedition.*,read
+assigned?javax.microedition.event.EventPermission,*.*,read
+assigned?javax.microedition.event.EventPermission,*.*,register
+assigned?javax.microedition.event.EventPermission,*.*,post
 
--- a/javacommons/security/tsrc/data/validpolicies/validators/missing_end_bracket_for_permissions.txt	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/tsrc/data/validpolicies/validators/missing_end_bracket_for_permissions.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -1,3 +1,3 @@
 domain=operator
-allowed,javax.microedition.midlet.AutoStartPermission
+allowed?javax.microedition.midlet.AutoStartPermission
 
--- a/javacommons/security/tsrc/data/validpolicies/validators/missing_start_bracket_for_permissions.txt	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/tsrc/data/validpolicies/validators/missing_start_bracket_for_permissions.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -1,3 +1,3 @@
 domain=operator
-allowed,javax.microedition.midlet.AutoStartPermission
+allowed?javax.microedition.midlet.AutoStartPermission
 
--- a/javacommons/security/tsrc/data/validpolicies/validators/operator_like_policy.txt	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/tsrc/data/validpolicies/validators/operator_like_policy.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -1,22 +1,22 @@
 domain=Operator
-allowed,javax.microedition.io.HttpProtocolPermission,http://*
-allowed,javax.microedition.io.HttpsProtocolPermission,https://*
-allowed,javax.microedition.io.DatagramProtocolPermission,datagram://*
-allowed,javax.microedition.io.DatagramProtocolPermission,datagram://
-allowed,javax.microedition.io.SocketProtocolPermission,socket://*
-allowed,javax.microedition.io.SocketProtocolPermission,socket://
-allowed,javax.microedition.io.SSLProtocolPermission,ssl://*
-allowed,javax.microedition.io.PushRegistryPermission,*
-allowed,javax.microedition.io.CommProtocolPermission,comm:*
-allowed,javax.microedition.media.PlayerPermission,*,record
-allowed,javax.microedition.media.PlayerPermission,*,snapshot
-allowed,java.util.PropertyPermission,*,read
-allowed,javax.microedition.event.EventPermission,*,read
-allowed,javax.microedition.event.EventPermission,*,register
-allowed,javax.microedition.event.EventPermission,*,post
-allowed,javax.microedition.midlet.ActionsDeniedPermission
-allowed,javax.microedition.midlet.AutoStartPermission
-assigned,java.util.PropertyPermission,microedition.*,read
-assigned,javax.microedition.event.EventPermission,*.*,read
-assigned,javax.microedition.event.EventPermission,*.*,register
-assigned,javax.microedition.event.EventPermission,*.*,post
+allowed?javax.microedition.io.HttpProtocolPermission,http://*
+allowed?javax.microedition.io.HttpsProtocolPermission,https://*
+allowed?javax.microedition.io.DatagramProtocolPermission,datagram://*
+allowed?javax.microedition.io.DatagramProtocolPermission,datagram://
+allowed?javax.microedition.io.SocketProtocolPermission,socket://*
+allowed?javax.microedition.io.SocketProtocolPermission,socket://
+allowed?javax.microedition.io.SSLProtocolPermission,ssl://*
+allowed?javax.microedition.io.PushRegistryPermission,*
+allowed?javax.microedition.io.CommProtocolPermission,comm:*
+allowed?javax.microedition.media.PlayerPermission,*,record
+allowed?javax.microedition.media.PlayerPermission,*,snapshot
+allowed?java.util.PropertyPermission,*,read
+allowed?javax.microedition.event.EventPermission,*,read
+allowed?javax.microedition.event.EventPermission,*,register
+allowed?javax.microedition.event.EventPermission,*,post
+allowed?javax.microedition.midlet.ActionsDeniedPermission
+allowed?javax.microedition.midlet.AutoStartPermission
+assigned?java.util.PropertyPermission,microedition.*,read
+assigned?javax.microedition.event.EventPermission,*.*,read
+assigned?javax.microedition.event.EventPermission,*.*,register
+assigned?javax.microedition.event.EventPermission,*.*,post
--- a/javacommons/security/tsrc/data/validpolicies/validators/permission_without_end_terminator.txt	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/tsrc/data/validpolicies/validators/permission_without_end_terminator.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -1,5 +1,5 @@
 domain=operator
-allowed,javax.microedition.midlet.AutoStartPermission
-allowed,javax.microedition.midlet.OtherAutoStartPermission
+allowed?javax.microedition.midlet.AutoStartPermission
+allowed?javax.microedition.midlet.OtherAutoStartPermission
 
 
--- a/javacommons/security/tsrc/data/validpolicies/validators/unidentified_third_party_like_policy.txt	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/tsrc/data/validpolicies/validators/unidentified_third_party_like_policy.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -1,16 +1,16 @@
 domain=UnidentifiedThirdParty
-user,NetAccess:oneshot:session:no,javax.microedition.io.HttpProtocolPermission,http://*
-user,NetAccess:oneshot:session:no,javax.microedition.io.HttpsProtocolPermission,https://*
-user,LowLevelNetAccess:oneshot:session:no,javax.microedition.io.DatagramProtocolPermission,datagram://*
-user,LowLevelNetAccess:oneshot:session:no,javax.microedition.io.DatagramProtocolPermission,datagram://
-user,LowLevelNetAccess:oneshot:session:no,javax.microedition.io.SocketProtocolPermission,socket://*
-user,LowLevelNetAccess:oneshot:session:no,javax.microedition.io.SocketProtocolPermission,socket://
-user,LowLevelNetAccess:oneshot:session:no,javax.microedition.io.SSLProtocolPermission,ssl://*
-user,ApplicationAutoInvocation:oneshot:session:no,javax.microedition.io.PushRegistryPermission,*
-user,LocalConnectivity:session:blanket:oneshot:no,javax.microedition.io.CommProtocolPermission,comm:*
-user,MultimediaRecording:session:oneshot:no,javax.microedition.media.PlayerPermission,*,record
-user,MultimediaRecording:session:oneshot:no,javax.microedition.media.PlayerPermission,*,snapshot
-assigned,java.util.PropertyPermission,microedition.*,read
-assigned,javax.microedition.event.EventPermission,*.*,read
-assigned,javax.microedition.event.EventPermission,*.*,register
-assigned,javax.microedition.event.EventPermission,*.*,post
+user?NetAccess:oneshot:session:no?javax.microedition.io.HttpProtocolPermission,http://*
+user?NetAccess:oneshot:session:no?javax.microedition.io.HttpsProtocolPermission,https://*
+user?LowLevelNetAccess:oneshot:session:no?javax.microedition.io.DatagramProtocolPermission,datagram://*
+user?LowLevelNetAccess:oneshot:session:no?javax.microedition.io.DatagramProtocolPermission,datagram://
+user?LowLevelNetAccess:oneshot:session:no?javax.microedition.io.SocketProtocolPermission,socket://*
+user?LowLevelNetAccess:oneshot:session:no?javax.microedition.io.SocketProtocolPermission,socket://
+user?LowLevelNetAccess:oneshot:session:no?javax.microedition.io.SSLProtocolPermission,ssl://*
+user?ApplicationAutoInvocation:oneshot:session:no?javax.microedition.io.PushRegistryPermission,*
+user?LocalConnectivity:session:blanket:oneshot:no?javax.microedition.io.CommProtocolPermission,comm:*
+user?MultimediaRecording:session:oneshot:no?javax.microedition.media.PlayerPermission,*,record
+user?MultimediaRecording:session:oneshot:no?javax.microedition.media.PlayerPermission,*,snapshot
+assigned?java.util.PropertyPermission,microedition.*,read
+assigned?javax.microedition.event.EventPermission,*.*,read
+assigned?javax.microedition.event.EventPermission,*.*,register
+assigned?javax.microedition.event.EventPermission,*.*,post
--- a/javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/OMJSecurityTests.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/OMJSecurityTests.java	Wed Jun 23 18:07:10 2010 +0300
@@ -740,7 +740,27 @@
                                                                                                                          UserSecuritySettings.SESSION_INTERACTION_MODE})),
                                                     new PolicyBasedPermissionImpl("java.util.PropertyPermission", "microedition.*", "read", null),
                                                     new PolicyBasedPermissionImpl(p4.getName(), "mobinfo.publicinfo", "read", null),
-                                                    new PolicyBasedPermissionImpl(p4.getName(), "mobinfo.cellid", "read", null),
+                                                    new PolicyBasedPermissionImpl(p4.getName(), "mobinfo.cellid", "read",
+                                                                                  new UserSecuritySettingsImpl("Location",
+                                                                                                               UserSecuritySettings.SESSION_INTERACTION_MODE,
+                                                                                                               new int[]{UserSecuritySettings.BLANKET_INTERACTION_MODE,
+                                                                                                                         UserSecuritySettings.NO_INTERACTION_MODE,
+                                                                                                                         UserSecuritySettings.ONESHOT_INTERACTION_MODE,
+                                                                                                                         UserSecuritySettings.SESSION_INTERACTION_MODE})),
+                                                    new PolicyBasedPermissionImpl(p4.getName(), "mobinfo.countrycode", "read",
+                                                                                  new UserSecuritySettingsImpl("Location",
+                                                                                                               UserSecuritySettings.SESSION_INTERACTION_MODE,
+                                                                                                               new int[]{UserSecuritySettings.BLANKET_INTERACTION_MODE,
+                                                                                                                         UserSecuritySettings.NO_INTERACTION_MODE,
+                                                                                                                         UserSecuritySettings.ONESHOT_INTERACTION_MODE,
+                                                                                                                         UserSecuritySettings.SESSION_INTERACTION_MODE})),
+                                                    new PolicyBasedPermissionImpl(p4.getName(), "mobinfo.networkid", "read",
+                                                                                  new UserSecuritySettingsImpl("Location",
+                                                                                                               UserSecuritySettings.SESSION_INTERACTION_MODE,
+                                                                                                               new int[]{UserSecuritySettings.BLANKET_INTERACTION_MODE,
+                                                                                                                         UserSecuritySettings.NO_INTERACTION_MODE,
+                                                                                                                         UserSecuritySettings.ONESHOT_INTERACTION_MODE,
+                                                                                                                         UserSecuritySettings.SESSION_INTERACTION_MODE})),
                                                     new PolicyBasedPermissionImpl("com.nokia.ext2.internal.Ext2Perm", "ext2.target4", "ext2.action4", null),
                                                 }));
         // getBlanketPermissions: while installing V1 the permissions are not put to blanket, while installing V2 there are some blanket permissions returned
@@ -779,6 +799,8 @@
                                          StorageNames.VALUE,
                                          "MIICWDCCAcECBEhQwOgwDQYJKoZIhvcNAQEEBQAwczELMAkGA1UEBhMCZmkxEjAQBgNVBAgTCVBpcmthbm1hYTEQMA4GA1UEBxMHVGFtcGVyZTEOMAwGA1UEChMFTm9raWExDTALBgNVBAsTBEphdmExHzAdBgNVBAMMFkpQX1RoaXJkX1BhcnR5X1RydXN0ZWQwHhcNMDgwNjEyMDYyMzM2WhcNMTgwNjEwMDYyMzM2WjBzMQswCQYDVQQGEwJmaTESMBAGA1UECBMJUGlya2FubWFhMRAwDgYDVQQHEwdUYW1wZXJlMQ4wDAYDVQQKEwVOb2tpYTENMAsGA1UECxMESmF2YTEfMB0GA1UEAwwWSlBfVGhpcmRfUGFydHlfVHJ1c3RlZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEArAesh03rswICRUjexWMoIH9ZZqUtlx+tfhZhuzuYhiL6cLdhxNlU8yuIdw4f17XP3yxVIB8rz1EEagCMd0Y5ZleNFZ992ReLcf9VH13RxaZ88PRxBLLROm1jcwTknYSS6AxGMup77DMwwFSN8XPnOHWt4aLGUrecMeUyI2c5UbsCAwEAATANBgkqhkiG9w0BAQQFAAOBgQAylJ+3aSq6a7AAL7UM8V8JhGZlLneErF7A/BJGDi7Vmr5gmlGyf6RCJJIg4qCp+J3Tv3eCRNNuphQaSRdFpaulwCmtfCzSZNtvZg0VhMOVsZqTwQgmP6NzKoIbqqzlgm5U+yUJw8FmX17vgdeSEdJ/oL/WT4AKrWFJYl8MdQ9ZnQ=="));
         session.write(StorageNames.APPLICATION_PACKAGE_ATTRIBUTES_TABLE, appPackageEntry);
+        permissionGranter.cleanup();
+        PermissionResolver.testClearCache();
         allAttributes.clear();
         allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
         allAttributes.put(AuthenticationAttribute.MAIN_ATTRIBUTE_PREFIX + "1-1", new Attribute("",        "MIICWDCCAcECBEhQwOgwDQYJKoZIhvcNAQEEBQAwczELMAkGA1UEBhMCZmkxEjAQBgNVBAgTCVBpcmthbm1hYTEQMA4GA1UEBxMHVGFtcGVyZTEOMAwGA1UEChMFTm9raWExDTALBgNVBAsTBEphdmExHzAdBgNVBAMMFkpQX1RoaXJkX1BhcnR5X1RydXN0ZWQwHhcNMDgwNjEyMDYyMzM2WhcNMTgwNjEwMDYyMzM2WjBzMQswCQYDVQQGEwJmaTESMBAGA1UECBMJUGlya2FubWFhMRAwDgYDVQQHEwdUYW1wZXJlMQ4wDAYDVQQKEwVOb2tpYTENMAsGA1UECxMESmF2YTEfMB0GA1UEAwwWSlBfVGhpcmRfUGFydHlfVHJ1c3RlZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEArAesh03rswICRUjexWMoIH9ZZqUtlx+tfhZhuzuYhiL6cLdhxNlU8yuIdw4f17XP3yxVIB8rz1EEagCMd0Y5ZleNFZ992ReLcf9VH13RxaZ88PRxBLLROm1jcwTknYSS6AxGMup77DMwwFSN8XPnOHWt4aLGUrecMeUyI2c5UbsCAwEAATANBgkqhkiG9w0BAQQFAAOBgQAylJ+3aSq6a7AAL7UM8V8JhGZlLneErF7A/BJGDi7Vmr5gmlGyf6RCJJIg4qCp+J3Tv3eCRNNuphQaSRdFpaulwCmtfCzSZNtvZg0VhMOVsZqTwQgmP6NzKoIbqqzlgm5U+yUJw8FmX17vgdeSEdJ/oL/WT4AKrWFJYl8MdQ9ZnQ=="));
--- a/javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/authorization/PermissionGranterTests.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/authorization/PermissionGranterTests.java	Wed Jun 23 18:07:10 2010 +0300
@@ -218,6 +218,7 @@
         IMPL_PERMISSION_MAPPING_TABLE = PermissionMappingTable.setMappingTable(TestPermissionMappingTable.getMappingTable());
         SecurityPolicyModule.policiesDir = TEST_DATA_DIR;
         SecurityPolicyModule.policiesFileNamePrefix = "test_";
+        String[] blanketPermissions = null;
         // data structures used in tests
         AuthenticationStorageData authData = null;
         AuthenticationCredentials[] authCredentials = null;
@@ -823,7 +824,6 @@
                    },
                    getAssignedPermissions("IdentifiedThirdParty")));
         // 19. getBlanketPermissions - null appUID
-        String[] blanketPermissions = null;
         storage.removeAuthenticationStorageData(appUID);
         permissionGranter.removeSecurityData(session, appUID);
         blanketPermissions = permissionGranter.getBlanketPermissions(null);
@@ -975,7 +975,7 @@
                 ((PolicyBasedPermission)grantedPermissions.elementAt(i));
             UserSecuritySettings settings =
                 permission.getUserSecuritySettings();
-            if (settings != null)
+            if (settings != null && settings.getName() == UserSecuritySettings.LOCAL_CONNECTIVITY_SETTINGS)
             {
                 assertTrue(settings.getCurrentInteractionMode() == UserSecuritySettings.BLANKET_INTERACTION_MODE);
             }
@@ -1041,7 +1041,8 @@
                     && findString(policyPerms[i].getName(), permissionNameFilter) != -1)
                     || permissionNameFilter == null) && (permissionTypeFilter == null
                                                          || (permissionTypeFilter.equals("assigned")
-                                                             && policyPerms[i].getUserSecuritySettings() == null)))
+                                                             && (policyPerms[i].getType() == PolicyBasedPermission.ASSIGNED_TYPE 
+                                                             || policyPerms[i].getType() == PolicyBasedPermission.USER_ASSIGNED_TYPE))))
             {
                 vPermissions.addElement(new MIDPPermission(policyPerms[i].getName(), policyPerms[i].getTarget(), policyPerms[i].getActionList()));
             }
@@ -1087,10 +1088,12 @@
 
     private static MIDPPermission[] getDefaultPermissions()
     {
-        MIDPPermission[] defaultPerms = new MIDPPermission[3];
+        MIDPPermission[] defaultPerms = new MIDPPermission[5];
         defaultPerms[0] = new MIDPPermission("java.util.PropertyPermission", "microedition.*", "read");
         defaultPerms[1] = new MIDPPermission("javax.microedition.PropertyPermission", "mobinfo.publicinfo", "read");
         defaultPerms[2] = new MIDPPermission("javax.microedition.PropertyPermission", "mobinfo.cellid", "read");
+        defaultPerms[3] = new MIDPPermission("javax.microedition.PropertyPermission", "mobinfo.countrycode", "read");
+        defaultPerms[4] = new MIDPPermission("javax.microedition.PropertyPermission", "mobinfo.networkid", "read");
         return defaultPerms;
     }
 
--- a/javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/authorization/SecurityPolicyModuleTests.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/authorization/SecurityPolicyModuleTests.java	Wed Jun 23 18:07:10 2010 +0300
@@ -39,111 +39,115 @@
 
     static final SecurityPolicyPermission[] MANUFACTURER_PERMS =
     {
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.HttpProtocolPermission"),"http://*", null, null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.HttpsProtocolPermission"),"https://*", null, null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.DatagramProtocolPermission"),"datagram://*", null, null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.DatagramProtocolPermission"),"datagram://", null, null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.SocketProtocolPermission"),"socket://*", null, null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.SocketProtocolPermission"),"socket://", null, null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.SSLProtocolPermission"),"ssl://*", null, null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.CommProtocolPermission"),"comm:*", null, null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.FileProtocolPermission"),"*", "read", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.FileProtocolPermission"),"*", "write", null),
-        new SecurityPolicyPermission(getPermissionName("java.util.PropertyPermission"),"microedition.*","read",null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.sms"), "sms://*" , "open", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.sms"), "sms://*" , "send", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.sms"), "sms://*" , "receive", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.mms"), "mms://*" , "open", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.mms"), "mms://*" , "send", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.mms"), "mms://*" , "receive", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.cbs"), "cbs://*" , "open", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.cbs"), "cbs://*" , "receive", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.pim.ContactList"), "pim://*" , "read_contacts", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.pim.EventList"), "pim://*" , "read_events", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.pim.ToDoList"), "pim://*" , "read_todos", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.pim.ContactList"), "pim://*" , "write_contacts", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.pim.EventList"), "pim://*" , "write_events", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.pim.ToDoList"), "pim://*" , "write_todos", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.PushRegistryPermission"),"*","staticregistration",null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.PushRegistryPermission"),"*","dynamicregistration",null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.PushRegistryPermission"),"*","autoinvocation",null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.obex.server"),"*", "server", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.obex.client"),"*", "client", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.bluetooth.server"),"*", "server", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.bluetooth.client"),"*", "client", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.location.LocationPermission"),"location://*", "position", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.location.LocationPermission"),"location://*", "orientation", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.location.LocationPermission"),"landmarks://*", "read", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.location.LocationPermission"),"landmarks://*", "write", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.location.LocationPermission"),"landmarks://*", "category", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.location.LocationPermission"),"landmarks://*", "management", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.location.LocationPermission"),"proximity://*", "registerlistener", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.apdu.aid"),"apdu://*", "aid", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.apdu.sat"),"apdu://*", "sat", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.securityservice.CMSMessageSignatureService"),"pki://*", "authenticate", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.media.control.RecordControl"),"*", "record", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.media.control.VideoControl.getSnapshot"),"*", "snapshot", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.rtsp"),"*", null, null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.imsi","read",null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.msisdn","read",null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.publicinfo","read",null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.cellid","read",null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.midlet.AutoStartPermission"),null,null,null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.midlet.CmdLineArgsPermission"),null,null,null),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.HttpProtocolPermission"),"http://*", null, PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.HttpsProtocolPermission"),"https://*", null, PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.DatagramProtocolPermission"),"datagram://*", null, PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.DatagramProtocolPermission"),"datagram://", null, PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.SocketProtocolPermission"),"socket://*", null, PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.SocketProtocolPermission"),"socket://", null, PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.SSLProtocolPermission"),"ssl://*", null, PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.CommProtocolPermission"),"comm:*", null, PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.FileProtocolPermission"),"*", "read", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.FileProtocolPermission"),"*", "write", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("java.util.PropertyPermission"),"microedition.*","read",PolicyBasedPermission.ASSIGNED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.sms"), "sms://*" , "open", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.sms"), "sms://*" , "send", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.sms"), "sms://*" , "receive", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.mms"), "mms://*" , "open", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.mms"), "mms://*" , "send", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.mms"), "mms://*" , "receive", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.cbs"), "cbs://*" , "open", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.cbs"), "cbs://*" , "receive", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.pim.ContactList"), "pim://*" , "read_contacts", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.pim.EventList"), "pim://*" , "read_events", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.pim.ToDoList"), "pim://*" , "read_todos", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.pim.ContactList"), "pim://*" , "write_contacts", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.pim.EventList"), "pim://*" , "write_events", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.pim.ToDoList"), "pim://*" , "write_todos", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.PushRegistryPermission"),"*","staticregistration",PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.PushRegistryPermission"),"*","dynamicregistration",PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.PushRegistryPermission"),"*","autoinvocation",PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.obex.server"),"*", "server", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.obex.client"),"*", "client", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.bluetooth.server"),"*", "server", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.bluetooth.client"),"*", "client", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.location.LocationPermission"),"location://*", "position", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.location.LocationPermission"),"location://*", "orientation", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.location.LocationPermission"),"landmarks://*", "read", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.location.LocationPermission"),"landmarks://*", "write", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.location.LocationPermission"),"landmarks://*", "category", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.location.LocationPermission"),"landmarks://*", "management", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.location.LocationPermission"),"proximity://*", "registerlistener", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.apdu.aid"),"apdu://*", "aid", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.apdu.sat"),"apdu://*", "sat", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.securityservice.CMSMessageSignatureService"),"pki://*", "authenticate", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.media.control.RecordControl"),"*", "record", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.media.control.VideoControl.getSnapshot"),"*", "snapshot", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.rtsp"),"*", null, PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.imsi","read",PolicyBasedPermission.ASSIGNED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.msisdn","read",PolicyBasedPermission.ASSIGNED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.publicinfo","read",PolicyBasedPermission.ASSIGNED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.cellid","read",PolicyBasedPermission.ASSIGNED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.countrycode","read",PolicyBasedPermission.ASSIGNED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.networkid","read",PolicyBasedPermission.ASSIGNED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.midlet.AutoStartPermission"),null,null,PolicyBasedPermission.ASSIGNED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.midlet.CmdLineArgsPermission"),null,null,PolicyBasedPermission.ALLOWED_TYPE),
     };
     static final SecurityPolicyPermission[] OPERATOR_PERMS =
     {
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.HttpProtocolPermission"),"http://*", null, null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.HttpsProtocolPermission"),"https://*", null, null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.DatagramProtocolPermission"),"datagram://*", null, null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.DatagramProtocolPermission"),"datagram://", null, null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.SocketProtocolPermission"),"socket://*", null, null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.SocketProtocolPermission"),"socket://", null, null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.SSLProtocolPermission"),"ssl://*", null, null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.CommProtocolPermission"),"comm:*", null, null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.FileProtocolPermission"),"*", "read", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.FileProtocolPermission"),"*", "write", null),
-        new SecurityPolicyPermission(getPermissionName("java.util.PropertyPermission"),"microedition.*","read",null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.sms"), "sms://*" , "open", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.sms"), "sms://*" , "send", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.sms"), "sms://*" , "receive", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.mms"), "mms://*" , "open", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.mms"), "mms://*" , "send", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.mms"), "mms://*" , "receive", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.cbs"), "cbs://*" , "open", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.cbs"), "cbs://*" , "receive", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.pim.ContactList"), "pim://*" , "read_contacts", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.pim.EventList"), "pim://*" , "read_events", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.pim.ToDoList"), "pim://*" , "read_todos", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.pim.ContactList"), "pim://*" , "write_contacts", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.pim.EventList"), "pim://*" , "write_events", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.pim.ToDoList"), "pim://*" , "write_todos", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.PushRegistryPermission"),"*","staticregistration",null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.PushRegistryPermission"),"*","dynamicregistration",null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.PushRegistryPermission"),"*","autoinvocation",null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.obex.server"),"*", "server", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.obex.client"),"*", "client", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.bluetooth.server"),"*", "server", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.bluetooth.client"),"*", "client", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.location.LocationPermission"),"location://*", "position", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.location.LocationPermission"),"location://*", "orientation", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.location.LocationPermission"),"landmarks://*", "read", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.location.LocationPermission"),"landmarks://*", "write", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.location.LocationPermission"),"landmarks://*", "category", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.location.LocationPermission"),"landmarks://*", "management", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.location.LocationPermission"),"proximity://*", "registerlistener", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.apdu.aid"),"apdu://*", "aid", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.apdu.sat"),"apdu://*", "sat", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.securityservice.CMSMessageSignatureService"),"pki://*", "authenticate", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.media.control.RecordControl"),"*", "record", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.media.control.VideoControl.getSnapshot"),"*", "snapshot", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.rtsp"),"*", null, null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.imsi","read",null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.msisdn","read",null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.publicinfo","read",null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.cellid","read",null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.midlet.AutoStartPermission"),null,null,null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.midlet.CmdLineArgsPermission"),null,null,null),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.HttpProtocolPermission"),"http://*", null, PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.HttpsProtocolPermission"),"https://*", null, PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.DatagramProtocolPermission"),"datagram://*", null, PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.DatagramProtocolPermission"),"datagram://", null, PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.SocketProtocolPermission"),"socket://*", null, PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.SocketProtocolPermission"),"socket://", null, PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.SSLProtocolPermission"),"ssl://*", null, PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.CommProtocolPermission"),"comm:*", null, PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.FileProtocolPermission"),"*", "read", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.FileProtocolPermission"),"*", "write", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("java.util.PropertyPermission"),"microedition.*","read",PolicyBasedPermission.ASSIGNED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.sms"), "sms://*" , "open", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.sms"), "sms://*" , "send", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.sms"), "sms://*" , "receive", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.mms"), "mms://*" , "open", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.mms"), "mms://*" , "send", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.mms"), "mms://*" , "receive", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.cbs"), "cbs://*" , "open", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.cbs"), "cbs://*" , "receive", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.pim.ContactList"), "pim://*" , "read_contacts", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.pim.EventList"), "pim://*" , "read_events", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.pim.ToDoList"), "pim://*" , "read_todos", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.pim.ContactList"), "pim://*" , "write_contacts", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.pim.EventList"), "pim://*" , "write_events", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.pim.ToDoList"), "pim://*" , "write_todos", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.PushRegistryPermission"),"*","staticregistration",PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.PushRegistryPermission"),"*","dynamicregistration",PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.PushRegistryPermission"),"*","autoinvocation",PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.obex.server"),"*", "server", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.obex.client"),"*", "client", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.bluetooth.server"),"*", "server", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.bluetooth.client"),"*", "client", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.location.LocationPermission"),"location://*", "position", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.location.LocationPermission"),"location://*", "orientation", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.location.LocationPermission"),"landmarks://*", "read", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.location.LocationPermission"),"landmarks://*", "write", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.location.LocationPermission"),"landmarks://*", "category", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.location.LocationPermission"),"landmarks://*", "management", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.location.LocationPermission"),"proximity://*", "registerlistener", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.apdu.aid"),"apdu://*", "aid", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.apdu.sat"),"apdu://*", "sat", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.securityservice.CMSMessageSignatureService"),"pki://*", "authenticate", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.media.control.RecordControl"),"*", "record", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.media.control.VideoControl.getSnapshot"),"*", "snapshot", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.rtsp"),"*", null, PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.imsi","read",PolicyBasedPermission.ASSIGNED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.msisdn","read",PolicyBasedPermission.ASSIGNED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.publicinfo","read",PolicyBasedPermission.ASSIGNED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.cellid","read",PolicyBasedPermission.ASSIGNED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.countrycode","read",PolicyBasedPermission.ASSIGNED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.networkid","read",PolicyBasedPermission.ASSIGNED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.midlet.AutoStartPermission"),null,null,PolicyBasedPermission.ASSIGNED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.midlet.CmdLineArgsPermission"),null,null,PolicyBasedPermission.ALLOWED_TYPE),
     };
     static final SecurityPolicyPermission[] IDENTIFIED_THIRD_PARTY_PERMS =
     {
@@ -189,18 +193,18 @@
         new SecurityPolicyPermission(getPermissionName("javax.microedition.io.FileProtocolPermission"),"*", "write",
                                      new SecurityPolicyPermissionSettings("Write User Data Access",UserSecuritySettings.SESSION_INTERACTION_MODE,
                                                                           new int[]{UserSecuritySettings.BLANKET_INTERACTION_MODE,UserSecuritySettings.ONESHOT_INTERACTION_MODE,UserSecuritySettings.NO_INTERACTION_MODE,UserSecuritySettings.SESSION_INTERACTION_MODE})),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.sms"), "sms://*" , "open", null),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.sms"), "sms://*" , "open", PolicyBasedPermission.ALLOWED_TYPE),
         new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.sms"), "sms://*" , "send",
                                      new SecurityPolicyPermissionSettings("Messaging",UserSecuritySettings.SESSION_INTERACTION_MODE,
                                                                           new int[]{UserSecuritySettings.BLANKET_INTERACTION_MODE,UserSecuritySettings.ONESHOT_INTERACTION_MODE,UserSecuritySettings.NO_INTERACTION_MODE,UserSecuritySettings.SESSION_INTERACTION_MODE})),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.sms"), "sms://*" , "receive", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.mms"), "mms://*" , "open", null),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.sms"), "sms://*" , "receive", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.mms"), "mms://*" , "open", PolicyBasedPermission.ALLOWED_TYPE),
         new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.mms"), "mms://*" , "send",
                                      new SecurityPolicyPermissionSettings("Messaging",UserSecuritySettings.SESSION_INTERACTION_MODE,
                                                                           new int[]{UserSecuritySettings.BLANKET_INTERACTION_MODE,UserSecuritySettings.ONESHOT_INTERACTION_MODE,UserSecuritySettings.NO_INTERACTION_MODE,UserSecuritySettings.SESSION_INTERACTION_MODE})),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.mms"), "mms://*" , "receive", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.cbs"), "cbs://*" , "open", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.cbs"), "cbs://*" , "receive", null),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.mms"), "mms://*" , "receive", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.cbs"), "cbs://*" , "open", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.cbs"), "cbs://*" , "receive", PolicyBasedPermission.ALLOWED_TYPE),
         new SecurityPolicyPermission(getPermissionName("javax.microedition.pim.ContactList"), "pim://*" , "read_contacts",
                                      new SecurityPolicyPermissionSettings("Read User Data Access",UserSecuritySettings.SESSION_INTERACTION_MODE,
                                                                           new int[]{UserSecuritySettings.BLANKET_INTERACTION_MODE,UserSecuritySettings.ONESHOT_INTERACTION_MODE,UserSecuritySettings.NO_INTERACTION_MODE,UserSecuritySettings.SESSION_INTERACTION_MODE})),
@@ -219,7 +223,7 @@
         new SecurityPolicyPermission(getPermissionName("javax.microedition.pim.ToDoList"), "pim://*" , "write_todos",
                                      new SecurityPolicyPermissionSettings("Write User Data Access",UserSecuritySettings.SESSION_INTERACTION_MODE,
                                                                           new int[]{UserSecuritySettings.BLANKET_INTERACTION_MODE,UserSecuritySettings.ONESHOT_INTERACTION_MODE,UserSecuritySettings.NO_INTERACTION_MODE,UserSecuritySettings.SESSION_INTERACTION_MODE})),
-        new SecurityPolicyPermission(getPermissionName("java.util.PropertyPermission"),"microedition.*","read",null),
+        new SecurityPolicyPermission(getPermissionName("java.util.PropertyPermission"),"microedition.*","read",PolicyBasedPermission.ASSIGNED_TYPE),
         new SecurityPolicyPermission(getPermissionName("javax.microedition.io.PushRegistryPermission"),"*", "staticregistration",
                                      new SecurityPolicyPermissionSettings("Application Auto Invocation",UserSecuritySettings.BLANKET_INTERACTION_MODE,
                                                                           new int[]{UserSecuritySettings.BLANKET_INTERACTION_MODE,UserSecuritySettings.SESSION_INTERACTION_MODE,UserSecuritySettings.ONESHOT_INTERACTION_MODE,UserSecuritySettings.NO_INTERACTION_MODE})),
@@ -265,8 +269,16 @@
         new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.rtsp"),"*", null,
                                      new SecurityPolicyPermissionSettings("Net Access",UserSecuritySettings.SESSION_INTERACTION_MODE,
                                                                           new int[]{UserSecuritySettings.BLANKET_INTERACTION_MODE,UserSecuritySettings.ONESHOT_INTERACTION_MODE,UserSecuritySettings.NO_INTERACTION_MODE,UserSecuritySettings.SESSION_INTERACTION_MODE})),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.publicinfo","read",null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.cellid","read",null),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.publicinfo","read",PolicyBasedPermission.ASSIGNED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.cellid","read",PolicyBasedPermission.USER_ASSIGNED_TYPE,
+                                     new SecurityPolicyPermissionSettings("Location",UserSecuritySettings.SESSION_INTERACTION_MODE,
+                                                                          new int[]{UserSecuritySettings.BLANKET_INTERACTION_MODE,UserSecuritySettings.ONESHOT_INTERACTION_MODE,UserSecuritySettings.NO_INTERACTION_MODE,UserSecuritySettings.SESSION_INTERACTION_MODE})),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.countrycode","read",PolicyBasedPermission.USER_ASSIGNED_TYPE,
+                                     new SecurityPolicyPermissionSettings("Location",UserSecuritySettings.SESSION_INTERACTION_MODE,
+                                                                          new int[]{UserSecuritySettings.BLANKET_INTERACTION_MODE,UserSecuritySettings.ONESHOT_INTERACTION_MODE,UserSecuritySettings.NO_INTERACTION_MODE,UserSecuritySettings.SESSION_INTERACTION_MODE})),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.networkid","read",PolicyBasedPermission.USER_ASSIGNED_TYPE,
+                                     new SecurityPolicyPermissionSettings("Location",UserSecuritySettings.SESSION_INTERACTION_MODE,
+                                                                          new int[]{UserSecuritySettings.BLANKET_INTERACTION_MODE,UserSecuritySettings.ONESHOT_INTERACTION_MODE,UserSecuritySettings.NO_INTERACTION_MODE,UserSecuritySettings.SESSION_INTERACTION_MODE})),
         new SecurityPolicyPermission(getPermissionName("javax.microedition.midlet.CmdLineArgsPermission"),null, null,
                                      new SecurityPolicyPermissionSettings("Url start",UserSecuritySettings.SESSION_INTERACTION_MODE,
                                                                           new int[]{UserSecuritySettings.ONESHOT_INTERACTION_MODE,UserSecuritySettings.NO_INTERACTION_MODE,UserSecuritySettings.SESSION_INTERACTION_MODE})),
@@ -315,18 +327,18 @@
         new SecurityPolicyPermission(getPermissionName("javax.microedition.io.FileProtocolPermission"),"*", "write",
                                      new SecurityPolicyPermissionSettings("Write User Data Access",UserSecuritySettings.ONESHOT_INTERACTION_MODE,
                                                                           new int[]{UserSecuritySettings.ONESHOT_INTERACTION_MODE,UserSecuritySettings.NO_INTERACTION_MODE,UserSecuritySettings.SESSION_INTERACTION_MODE})),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.sms"), "sms://*" , "open", null),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.sms"), "sms://*" , "open", PolicyBasedPermission.ALLOWED_TYPE),
         new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.sms"), "sms://*" , "send",
                                      new SecurityPolicyPermissionSettings("Messaging",UserSecuritySettings.ONESHOT_INTERACTION_MODE,
                                                                           new int[]{UserSecuritySettings.NO_INTERACTION_MODE,UserSecuritySettings.ONESHOT_INTERACTION_MODE,UserSecuritySettings.SESSION_INTERACTION_MODE})),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.sms"), "sms://*" , "receive", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.mms"), "mms://*" , "open", null),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.sms"), "sms://*" , "receive", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.mms"), "mms://*" , "open", PolicyBasedPermission.ALLOWED_TYPE),
         new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.mms"), "mms://*" , "send",
                                      new SecurityPolicyPermissionSettings("Messaging",UserSecuritySettings.ONESHOT_INTERACTION_MODE,
                                                                           new int[]{UserSecuritySettings.NO_INTERACTION_MODE,UserSecuritySettings.ONESHOT_INTERACTION_MODE,UserSecuritySettings.SESSION_INTERACTION_MODE})),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.mms"), "mms://*" , "receive", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.cbs"), "cbs://*" , "open", null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.cbs"), "cbs://*" , "receive", null),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.mms"), "mms://*" , "receive", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.cbs"), "cbs://*" , "open", PolicyBasedPermission.ALLOWED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.cbs"), "cbs://*" , "receive", PolicyBasedPermission.ALLOWED_TYPE),
         new SecurityPolicyPermission(getPermissionName("javax.microedition.pim.ContactList"), "pim://*" , "read_contacts",
                                      new SecurityPolicyPermissionSettings("Read User Data Access",UserSecuritySettings.ONESHOT_INTERACTION_MODE,
                                                                           new int[]{UserSecuritySettings.ONESHOT_INTERACTION_MODE,UserSecuritySettings.NO_INTERACTION_MODE,UserSecuritySettings.SESSION_INTERACTION_MODE})),
@@ -345,7 +357,7 @@
         new SecurityPolicyPermission(getPermissionName("javax.microedition.pim.ToDoList"), "pim://*" , "write_todos",
                                      new SecurityPolicyPermissionSettings("Write User Data Access",UserSecuritySettings.ONESHOT_INTERACTION_MODE,
                                                                           new int[]{UserSecuritySettings.ONESHOT_INTERACTION_MODE,UserSecuritySettings.NO_INTERACTION_MODE,UserSecuritySettings.SESSION_INTERACTION_MODE})),
-        new SecurityPolicyPermission(getPermissionName("java.util.PropertyPermission"),"microedition.*","read",null),
+        new SecurityPolicyPermission(getPermissionName("java.util.PropertyPermission"),"microedition.*","read",PolicyBasedPermission.ASSIGNED_TYPE),
         new SecurityPolicyPermission(getPermissionName("javax.microedition.io.PushRegistryPermission"),"*", "staticregistration",
                                      new SecurityPolicyPermissionSettings("Application Auto Invocation",UserSecuritySettings.BLANKET_INTERACTION_MODE,
                                                                           new int[]{UserSecuritySettings.BLANKET_INTERACTION_MODE,UserSecuritySettings.SESSION_INTERACTION_MODE,UserSecuritySettings.ONESHOT_INTERACTION_MODE,UserSecuritySettings.NO_INTERACTION_MODE})),
@@ -385,8 +397,16 @@
         new SecurityPolicyPermission(getPermissionName("javax.microedition.io.Connector.rtsp"),"*", null,
                                      new SecurityPolicyPermissionSettings("Net Access",UserSecuritySettings.SESSION_INTERACTION_MODE,
                                                                           new int[]{UserSecuritySettings.ONESHOT_INTERACTION_MODE,UserSecuritySettings.NO_INTERACTION_MODE,UserSecuritySettings.SESSION_INTERACTION_MODE})),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.publicinfo","read",null),
-        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.cellid","read",null),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.publicinfo","read",PolicyBasedPermission.ASSIGNED_TYPE),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.cellid","read",PolicyBasedPermission.USER_ASSIGNED_TYPE,
+                                     new SecurityPolicyPermissionSettings("Location",UserSecuritySettings.ONESHOT_INTERACTION_MODE,
+                                                                          new int[]{UserSecuritySettings.ONESHOT_INTERACTION_MODE,UserSecuritySettings.NO_INTERACTION_MODE,UserSecuritySettings.SESSION_INTERACTION_MODE})),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.countrycode","read",PolicyBasedPermission.USER_ASSIGNED_TYPE,
+                                     new SecurityPolicyPermissionSettings("Location",UserSecuritySettings.ONESHOT_INTERACTION_MODE,
+                                                                          new int[]{UserSecuritySettings.ONESHOT_INTERACTION_MODE,UserSecuritySettings.NO_INTERACTION_MODE,UserSecuritySettings.SESSION_INTERACTION_MODE})),
+        new SecurityPolicyPermission(getPermissionName("javax.microedition.PropertyPermission"),"mobinfo.networkid","read",PolicyBasedPermission.USER_ASSIGNED_TYPE,
+                                     new SecurityPolicyPermissionSettings("Location",UserSecuritySettings.ONESHOT_INTERACTION_MODE,
+                                                                          new int[]{UserSecuritySettings.ONESHOT_INTERACTION_MODE,UserSecuritySettings.NO_INTERACTION_MODE,UserSecuritySettings.SESSION_INTERACTION_MODE})),
     };
 
     // Begin j2meunit test framework setup
--- a/javacommons/security/tsrc/javasrc/com/nokia/mj/tools/security/midp/PolicyEditorTests.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/security/tsrc/javasrc/com/nokia/mj/tools/security/midp/PolicyEditorTests.java	Wed Jun 23 18:07:10 2010 +0300
@@ -336,7 +336,7 @@
         initBoolArray(permsChecked);
         for (int i=0; i<perms1.size(); i++)
         {
-            String[] permTokens = Tokenizer.split((String)perms1.get(i), ",");
+            String[] permTokens = Tokenizer.split((String)perms1.get(i), "?");
             int currentToken = 0;
             int type = getType(permTokens[currentToken]);
             currentToken++;
@@ -344,7 +344,7 @@
             String name = null;
             String target = null;
             String actionList = null;
-            if (type == PolicyBasedPermission.USER_TYPE)
+            if (permTokens.length == 3)
             {
                 String[] settingsProps = Tokenizer.split(permTokens[currentToken],":");
                 String settingsName = settingsProps[0];
@@ -361,30 +361,33 @@
                 settings = new UserSecuritySettingsImpl(settingsName, currentInteractionMode, allowedInteractionModes);
                 currentToken++;
             }
-            name = permTokens[currentToken];
+            String[] permDetails = Tokenizer.split(permTokens[currentToken], ",");
+            currentToken = 0;
+            name = permDetails[currentToken];
             MIDPPermission mappedPerm = PermissionMappingTable.get(name);
             if (mappedPerm != null)
             {
                 name = mappedPerm.getName();
             }
             currentToken++;
-            if (permTokens.length > currentToken)
+            if (permDetails.length > currentToken)
             {
-                target = permTokens[currentToken];
+                target = permDetails[currentToken];
                 currentToken++;
             }
-            if (permTokens.length > currentToken)
+            if (permDetails.length > currentToken)
             {
-                actionList = permTokens[currentToken];
+                actionList = permDetails[currentToken];
                 actionList = actionList.replace(':',',');
             }
-            PolicyBasedPermissionImpl perm1 = new PolicyBasedPermissionImpl(name, target, actionList, settings);
+            PolicyBasedPermissionImpl perm1 = new PolicyBasedPermissionImpl(name, target, actionList, type, settings);
             for (int j=0; j<perms2.length; j++)
             {
                 PolicyBasedPermissionImpl perm2 = new PolicyBasedPermissionImpl(
                     perms2[j].getName(),
                     perms2[j].getTarget(),
                     perms2[j].getActionList(),
+                    perms2[j].getType(),
                     (perms2[j].getUserSecuritySettings() != null ?
                      (new UserSecuritySettingsImpl(
                           perms2[j].getUserSecuritySettings().getName(),
@@ -420,6 +423,10 @@
         {
             return PolicyBasedPermission.ASSIGNED_TYPE;
         }
+        else if (sType.equalsIgnoreCase("user_assigned"))
+        {
+            return PolicyBasedPermission.USER_ASSIGNED_TYPE;
+        }
         return -1;
     }
 
--- a/javacommons/utils/build/build.xml	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/utils/build/build.xml	Wed Jun 23 18:07:10 2010 +0300
@@ -30,6 +30,7 @@
                    com.nokia.mj.impl.properties.common.Locale,
                    com.nokia.mj.impl.properties.common.Platform,
                    com.nokia.mj.impl.utils.Formatter,
+                   com.nokia.mj.impl.utils.InstallerErrorMessage,
                    com.nokia.mj.impl.utils.ResourceLoader"/>
 
   <target name="system.properties">
--- a/javacommons/utils/javasrc/com/nokia/mj/impl/utils/Formatter.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/utils/javasrc/com/nokia/mj/impl/utils/Formatter.java	Wed Jun 23 18:07:10 2010 +0300
@@ -260,6 +260,18 @@
         }
         return toString();
     }
+    /**
+     * Applies convertion from european digits into arabic-indic digits 
+     * based on existing language settings
+     *
+     * @param str String which might contain european digits
+     * @return A string identical with the provided string but with the 
+     *         european digits (if any) converted to arabic-indic digits
+     */
+    public static String formatDigits(String str)
+    {
+        return _formatDigits(str);
+    }
 
     /*** ----------------------------- PRIVATE ---------------------------- */
 
@@ -358,4 +370,14 @@
      *
      */
     private native String _formatDate(long timeInMilliSecs);
+
+    /**
+     * Applies convertion from european digits into arabic-indic digits
+     * based on existing language settings
+     *
+     * @param str String which might contain european digits
+     * @return A string identical with the provided string but with the 
+     *         european digits (if any) converted to arabic-indic digits
+     */
+    private static native String _formatDigits(String str);
 }
--- a/javacommons/utils/src.s60/formatternative.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/utils/src.s60/formatternative.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -19,10 +19,12 @@
 //#include <avkon.rsg>
 #include <memory>
 #include <stringresourcereader.h>
+#include <aknutils.h>
 
 #include "com_nokia_mj_impl_utils_Formatter.h"
 #include "com_nokia_mj_impl_utils_ResourceLoader.h"
 #include "javajniutils.h"
+#include "s60commonutils.h"
 #include "logger.h"
 
 enum EDateTimeFormat
@@ -41,6 +43,7 @@
 // const TInt KMaxDateTimeStringSize = 50;
 const TInt KMaxDateFormatSize = 30;
 const TInt KMaxNumberFormatSize = 40;
+using namespace java::util;
 
 // _LIT( KAvkonResFile, "z:\\resource\\avkon.rsc" );
 
@@ -65,6 +68,7 @@
               "Cannot format %d to current locale. Error: %d", aNumber, error);
     }
 
+    AknTextUtils::LanguageSpecificNumberConversion( numberPtr );
     return aJni->NewString(
                (const jchar*)numberPtr.Ptr(), numberPtr.Length());
 }
@@ -105,3 +109,15 @@
     return (jint)User::Language();
 }
 
+JNIEXPORT jstring JNICALL Java_com_nokia_mj_impl_utils_Formatter__1formatDigits
+  (JNIEnv * aEnv, jclass, jstring str)
+{
+    jstring ret = str;
+    std::wstring wstr = JniUtils::jstringToWstring(aEnv, str);
+    HBufC* buf = S60CommonUtils::wstringToDes(wstr.c_str());
+    TPtr ptr(buf->Des());
+    AknTextUtils::LanguageSpecificNumberConversion( ptr );
+    ret = S60CommonUtils::NativeToJavaString(*aEnv, ptr);
+    delete buf; buf = NULL;
+    return ret;
+}
--- a/javacommons/utils/src/javainifileutils.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javacommons/utils/src/javainifileutils.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -157,9 +157,9 @@
         }
         rewind(iniFile);
         data = new char[len+1];
-        data[len] = 0;
         if (data != 0)
         {
+            data[len] = 0;
             fread(data, sizeof(char), len, iniFile);
         }
         fclose(iniFile);
--- a/javaextensions/bluetooth/bluetoothcommons/src.s60/servicerecord.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javaextensions/bluetooth/bluetoothcommons/src.s60/servicerecord.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -148,7 +148,7 @@
     TPtrC8 uuidDes(uuidBytes, uuidByteLength);
     TRAPD(err, uuid.SetL(uuidDes));
 
-    delete uuidBytes;
+    delete[] uuidBytes;
     uuidBytes = NULL;
 
     if (KErrNone != err)
@@ -205,7 +205,7 @@
             char *fileName = java::util::JavaCommonUtils::wstringToUtf8(
                                  persistentFileName);
             persistentRecFd = open(fileName, O_RDONLY);
-            delete fileName;
+            delete[] fileName;
         }
         catch (ExceptionBase ex)
         {
@@ -618,7 +618,7 @@
             write(mSrvRecFd, (char *) &aDeviceServiceClasses,
                   sizeof(aDeviceServiceClasses));
 
-            delete fileName;
+            delete[] fileName;
         }
         catch (ExceptionBase ex)
         {
@@ -1286,7 +1286,7 @@
             char *fileName =
                 java::util::JavaCommonUtils::wstringToUtf8(persistentFileName);
             persistentRecFd = open(fileName, O_RDONLY);
-            delete fileName;
+            delete[] fileName;
         }
         catch (ExceptionBase ex)
         {
@@ -1310,7 +1310,10 @@
     unsigned int devServClass = 0;
     ret = read(persistentRecFd, &devServClass, sizeof(devServClass));
     if (ret <= 0)
+    {
+        delete srvRecPopulator;
         return;
+    }
 
     elementBuilder = srvRecPopulator->SetDeviceServiceClass(devServClass);
 
--- a/javaextensions/comm/javasrc/com/nokia/mj/impl/gcf/protocol/comm/CommPermissionImpl.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javaextensions/comm/javasrc/com/nokia/mj/impl/gcf/protocol/comm/CommPermissionImpl.java	Wed Jun 23 18:07:10 2010 +0300
@@ -47,7 +47,7 @@
 
     public String toString()
     {
-        return "javax.microedition.io.CommProtocolPermission";
+        return "javax.microedition.io.Connector.comm";
     }
 
     public boolean implies(Permission p)
--- a/javaextensions/datagram/datagram/javasrc/com/nokia/mj/impl/gcf/protocol/datagram/DatagramPermissionImpl.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javaextensions/datagram/datagram/javasrc/com/nokia/mj/impl/gcf/protocol/datagram/DatagramPermissionImpl.java	Wed Jun 23 18:07:10 2010 +0300
@@ -56,7 +56,7 @@
 
     public String toString()
     {
-        return "javax.microedition.io.DatagramProtocolPermission";
+        return "javax.microedition.io.Connector.datagram";
     }
 
     public boolean implies(Permission p)
--- a/javaextensions/midprms_db/javasrc/com/nokia/mj/impl/rms/RmsFileInfo.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javaextensions/midprms_db/javasrc/com/nokia/mj/impl/rms/RmsFileInfo.java	Wed Jun 23 18:07:10 2010 +0300
@@ -71,7 +71,7 @@
 
     private long getSize()
     {
-        long size = 0;
+        long size = -1;
         try
         {
             size = iFile.fileSize();
@@ -82,6 +82,7 @@
         }
         if (size < 0)
         {
+            Logger.WLOG(Logger.EMidpRms, "fileSize = " + size);
             size = 0;
         }
         return size;
@@ -102,18 +103,19 @@
 
     private long getFreeSpace()
     {
-        long size = 0;
+        long size = -1;
         try
         {
             size = iFile.availableSize();
         }
         catch (Exception e)
         {
-            Logger.ELOG(Logger.EMidpRms, "availableSize()" , e);
+            Logger.ELOG(Logger.EMidpRms, "availableSize() failed" , e);
         }
         if (size < 0)
         {
-            size = 0;
+            Logger.WLOG(Logger.EMidpRms, "availableSize = " + size);
+            size = MAX_RMS_SIZE;
         }
         return size;
     }
--- a/javaextensions/mobinfo/javasrc.s60/com/nokia/mj/impl/properties/mobinfo/MobileInfoPermission.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javaextensions/mobinfo/javasrc.s60/com/nokia/mj/impl/properties/mobinfo/MobileInfoPermission.java	Wed Jun 23 18:07:10 2010 +0300
@@ -28,6 +28,8 @@
     private static final String IMSI_TARGET_NAME = "mobinfo.imsi";
     private static final String MSISDN_TARGET_NAME = "mobinfo.msisdn";
     private static final String CELLID_TARGET_NAME = "mobinfo.cellid";
+    private static final String COUNTRYCODE_TARGET_NAME = "mobinfo.countrycode";
+    private static final String NETWORKID_TARGET_NAME = "mobinfo.networkid";
     private static final String PUBLIC_INFO_TARGET_NAME = "mobinfo.publicinfo";
 
     private String iTarget = null;
@@ -40,7 +42,9 @@
         if (IMSI_TARGET_NAME.equals(aUri)
                 || MSISDN_TARGET_NAME.equals(aUri)
                 || CELLID_TARGET_NAME.equals(aUri)
-                || PUBLIC_INFO_TARGET_NAME.equals(aUri))
+                || PUBLIC_INFO_TARGET_NAME.equals(aUri)
+                || COUNTRYCODE_TARGET_NAME.equals(aUri)
+                || NETWORKID_TARGET_NAME.equals(aUri))
         {
             // aUri contains a known target name -> save it as such
             iTarget = aUri;
@@ -62,6 +66,14 @@
             {
                 iTarget = CELLID_TARGET_NAME;
             }
+            else if (MobileInfoProperties.COUNTRY_CODE.equals(aUri))
+            {
+                iTarget = COUNTRYCODE_TARGET_NAME;
+            }
+            else if (MobileInfoProperties.NETWORK_ID.equals(aUri))
+            {
+                iTarget = NETWORKID_TARGET_NAME;
+            }
             else
             {
                 iTarget = PUBLIC_INFO_TARGET_NAME;
@@ -78,6 +90,14 @@
      */
     public String getSecurityPromptQuestion(int aInteractionMode)
     {
+        if (CELLID_TARGET_NAME.equals(iTarget) 
+            || COUNTRYCODE_TARGET_NAME.equals(iTarget) 
+            || NETWORKID_TARGET_NAME.equals(iTarget))
+        {
+            return SecurityPromptMessage.getInstance().getText(
+                SecurityPromptMessage.QUESTION_ID_READING_LOCATION_DATA,
+                null);
+        }
         return null;
     }
 
@@ -91,6 +111,18 @@
         {
             return "com.nokia.mid.Mobinfo.MSISDN";
         }
+        else if (CELLID_TARGET_NAME.equals(iTarget))
+        {
+            return "com.nokia.mid.Mobinfo.cellid";
+        }
+        else if (COUNTRYCODE_TARGET_NAME.equals(iTarget))
+        {
+            return "com.nokia.mid.Mobinfo.countrycode";
+        }
+        else if (NETWORKID_TARGET_NAME.equals(iTarget))
+        {
+            return "com.nokia.mid.Mobinfo.networkid";
+        }
         return null;
     }
 
--- a/javaextensions/mobinfo/javasrc.s60/com/nokia/mj/impl/properties/mobinfo/MobileInfoProperties.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javaextensions/mobinfo/javasrc.s60/com/nokia/mj/impl/properties/mobinfo/MobileInfoProperties.java	Wed Jun 23 18:07:10 2010 +0300
@@ -51,7 +51,7 @@
 
     private static final String BATTERY_LEVEL = "com.nokia.mid.batterylevel";
 
-    private static final String COUNTRY_CODE = "com.nokia.mid.countrycode";
+    static final String COUNTRY_CODE = "com.nokia.mid.countrycode";
 
     private static final String IMEI = "com.nokia.mid.imei";
 
@@ -59,7 +59,7 @@
 
     private static final String NETWORK_AVAILABILITY = "com.nokia.mid.networkavailability";
 
-    private static final String NETWORK_ID = "com.nokia.mid.networkid";
+    static final String NETWORK_ID = "com.nokia.mid.networkid";
 
     private static final String NETWORK_SIGNAL = "com.nokia.mid.networksignal";
 
--- a/javaextensions/wma/mms/src.s60/cjavammsmessagehandler.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javaextensions/wma/mms/src.s60/cjavammsmessagehandler.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -790,8 +790,6 @@
         {
             // get cc length
             aHeaderLengths[KCcFieldIndex] = ReadIntL(aReadStream);
-            if (div == 0)
-                break;
             mmsMap = div;
         }
         break;
--- a/javaextensions/wma/sms_cbs/javasrc/com/nokia/mj/impl/sms/SMSPermissionImpl.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javaextensions/wma/sms_cbs/javasrc/com/nokia/mj/impl/sms/SMSPermissionImpl.java	Wed Jun 23 18:07:10 2010 +0300
@@ -21,6 +21,7 @@
 import java.security.PermissionCollection;
 import com.nokia.mj.impl.security.common.PermissionBase;
 import com.nokia.mj.impl.security.utils.SecurityPromptMessage;
+import com.nokia.mj.impl.utils.Formatter;
 
 public class SMSPermissionImpl extends PermissionBase
 {
@@ -76,15 +77,25 @@
         }
         else if (iAction.compareTo("send") == 0)
         {
+            String prefix = "";
+            String formattedDestination = iDestination;
+            if (formattedDestination.startsWith("+"))
+            {
+                formattedDestination = iDestination.substring(1);
+                prefix = "+";
+            }
+            formattedDestination = Formatter.formatDigits(formattedDestination) 
+                + prefix;
             if (iNumberOfSegments > 1)
             {
                 return (SecurityPromptMessage.getInstance()).getText(
                            SecurityPromptMessage.QUESTION_ID_SMS_SENDING,
-                           new Object[] {new Integer(iNumberOfSegments),iDestination});
+                           new Object[] {new Integer(iNumberOfSegments),
+                           formattedDestination});
             }
             return (SecurityPromptMessage.getInstance()).getText(
                        SecurityPromptMessage.QUESTION_ID_SMS_SINGLE_SENDING,
-                       new Object[] {iDestination});
+                       new Object[] {formattedDestination});
         }
         return null;
     }
--- a/javaextensions/wma/sms_cbs/pushplugin/sms/src.s60/smsserverconnection.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javaextensions/wma/sms_cbs/pushplugin/sms/src.s60/smsserverconnection.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -211,6 +211,7 @@
         mIoctlBuf() = KSockSelectRead;
         mSocket.Ioctl(KIOctlSelect, iStatus, &mIoctlBuf, KSOLSocket);
         SetActive();
+        pthread_mutex_unlock(&mMutex);
         return;
     }
     switch (mState)
@@ -276,6 +277,7 @@
         pthread_cond_signal(&mCondVar);
         mIsRunning = EFalse;
         CActiveScheduler::Stop();
+        break;
     }
     default:
     {
--- a/javamanager/javaappschemeplugin/build/javaappschemeplugin.mmp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javaappschemeplugin/build/javaappschemeplugin.mmp	Wed Jun 23 18:07:10 2010 +0300
@@ -26,6 +26,13 @@
 // Use bytepair compression to enable code paging
 PAGED
 
+APP_LAYER_SYSTEMINCLUDE
+
+// Corrects a problem with SchemeHandler.inl in 5.0 2009w18 and 10.1 builds
+#ifndef RD_JAVA_S60_RELEASE_9_2
+SYSTEMINCLUDE   /epoc32/include/ecom
+#endif
+
 SOURCEPATH  ../src
 
 SOURCE  javaapphandler.cpp
@@ -37,9 +44,6 @@
 
 USERINCLUDE     ../inc
 
-SYSTEMINCLUDE   /epoc32/include/ecom
-APP_LAYER_SYSTEMINCLUDE
-
 
 LIBRARY     euser.lib
 LIBRARY     ecom.lib
--- a/javamanager/javabackup/javabackupcore/build/javabackup.mmp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javabackup/javabackupcore/build/javabackup.mmp	Wed Jun 23 18:07:10 2010 +0300
@@ -43,12 +43,14 @@
 SOURCE                  jsbcactive.cpp
 SOURCE                  jsbcdataowner.cpp
 
+#ifdef RD_JAVA_S60_RELEASE_5_0
+SYSTEMINCLUDE	/epoc32/include/connect    // Due to abclient.h in S60 5.0
+#endif
+
 USERINCLUDE             ../src.s60
 USERINCLUDE             ../../inc.s60
 USERINCLUDE             ../../../../inc
 
-SYSTEMINCLUDE           /epoc32/include/connect
-
 LIBRARY                 ecom.lib
 LIBRARY                 abclient.lib
 LIBRARY                 javastorage.lib
--- a/javamanager/javabackup/javabackupcore/src.s60/jsbcdataowner.h	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javabackup/javabackupcore/src.s60/jsbcdataowner.h	Wed Jun 23 18:07:10 2010 +0300
@@ -19,7 +19,7 @@
 #ifndef JSBCDATAOWNER_H
 #define JSBCDATAOWNER_H
 
-#include <abclient.h>
+#include <connect/abclient.h>
 
 namespace java
 {
--- a/javamanager/javabackup/midp2backup/build/midp2backupplugin.mmp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javabackup/midp2backup/build/midp2backupplugin.mmp	Wed Jun 23 18:07:10 2010 +0300
@@ -49,8 +49,6 @@
 USERINCLUDE             ../../inc.s60
 USERINCLUDE             ../../../../inc
 
-SYSTEMINCLUDE           /epoc32/include/connect
-
 start resource          ../data/10282474.rss
 TARGET                  midp2backupplugin.rsc
 end
--- a/javamanager/javabackup/midp2backup/src.s60/javastoragebackuputil.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javabackup/midp2backup/src.s60/javastoragebackuputil.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -881,6 +881,9 @@
 
             attribute.setEntry(ON_SCREEN_KEYPAD, iStringVector[count++]);
             insertEntry.insert(attribute);
+            
+            attribute.setEntry(SECURITY_WARNINGS, iStringVector[count++]);
+            insertEntry.insert(attribute);
 
             try
             {
@@ -1620,6 +1623,16 @@
             str = (*findIterator).entryValue();
         }
         iStringVector.push_back(str);
+        
+        attribute.setEntry(SECURITY_WARNINGS, L"");
+        str = emptyString;
+        findIterator = (*applications).find(attribute);
+
+        if (findIterator != (*applications).end())
+        {
+            str = (*findIterator).entryValue();
+        }
+        iStringVector.push_back(str);
 
         rowsCount++;
     }
--- a/javamanager/javabackup/midp2backup/src.s60/midp2backupplugin.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javabackup/midp2backup/src.s60/midp2backupplugin.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -29,7 +29,7 @@
 #include "javacommonutils.h"
 #include "logger.h"
 
-#include <sbdefs.h>
+#include <connect/sbdefs.h>
 #include <s32mem.h>
 #include <s32file.h>
 #include <f32file.h>
--- a/javamanager/javacaptain/extensionplugins/javacertstore/tsrc.s60/build/testsmartcardtokenplugin.mmp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javacaptain/extensionplugins/javacertstore/tsrc.s60/build/testsmartcardtokenplugin.mmp	Wed Jun 23 18:07:10 2010 +0300
@@ -29,9 +29,6 @@
 CAPABILITY      CAP_ECOM_PLUGIN
 VENDORID        VID_DEFAULT
 
-systeminclude   /epoc32/include
-systeminclude   /epoc32/include/ecom
-
 sourcepath      ../src
 
 source          testsmartcardtokenplugin.cpp
--- a/javamanager/javacaptain/extensionplugins/javacertstore/tsrc.s60/src/101F5B72.rss	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javacaptain/extensionplugins/javacertstore/tsrc.s60/src/101F5B72.rss	Wed Jun 23 18:07:10 2010 +0300
@@ -14,7 +14,7 @@
 * Description: 
 *
 */
-#include <RegistryInfoV2.rh>
+#include <ecom/RegistryInfoV2.rh>
 #include <ct/InterfaceUID.hrh>
 
 // True
--- a/javamanager/javacaptain/extensionplugins/scrupdater/inc/scrupdater.h	Fri Jun 11 13:33:44 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +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:  ScrUpdater is Java Captain Symbian plugin that updates
-*               presence information of Java Applications in USIF SCR
-*               when removable drive is added or removed to the device.
-*
-*/
-
-#ifndef SCRUPDATER_H
-#define SCRUPDATER_H
-
-#include <usif/scr/scr.h>
-#include <usif/scr/screntries.h>
-
-#include "javaosheaders.h"
-
-#include "eventconsumerinterface.h"
-#include "extensionplugininterface.h"
-
-namespace java
-{
-
-namespace captain
-{
-
-class CoreInterface;
-
-OS_NONSHARABLE_CLASS(ScrUpdater) :  public EventConsumerInterface,
-        public ExtensionPluginInterface
-{
-public:
-    ScrUpdater();
-    virtual ~ScrUpdater();
-
-    // PluginInterface
-    virtual void startPlugin(CoreInterface* aCore);
-    virtual void stopPlugin();
-
-    // EventConsumerInterface
-    virtual void event(const std::string& eventProvider,
-                       java::comms::CommsMessage& aMsg);
-
-    // ExtensionPluginInterface methods
-    virtual EventConsumerInterface* getEventConsumer();
-
-private:
-    void removeScrPresencesL(driveInfo *aInfo);
-    void addScrPresencesL(driveInfo *aInfo);
-    void initializeScrPresenceInfoL();
-
-    Usif::RSoftwareComponentRegistry *createScrL();
-
-
-    CoreInterface* mCore;
-};
-
-} // namespace captain
-} // namespace java
-
-#endif // SCRUPDATER_H
--- a/javamanager/javacaptain/extensionplugins/scrupdater/src.s60/lookup.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +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:  lookup
-*
-*/
-
-#include <string> //For strcmp
-
-#include "javasymbianoslayer.h"
-#include "logger.h"
-
-#include "extensionplugininterface.h"
-
-using namespace java::captain;
-
-ExtensionPluginInterface* getExtensionPlugin();
-
-EXPORT_C FuncPtr findDllMethod(const char* funcName)
-{
-    JELOG2(EJavaCaptain);
-    FuncPtr ptr = 0;
-    if (funcName)
-    {
-        if (strcmp(funcName, "getExtensionPlugin") == 0)
-        {
-            ptr = (FuncPtr)getExtensionPlugin;
-        }
-    }
-    else
-    {
-        ELOG(EJavaCaptain,
-             "scrupdater extensionplugin findDllMethod() funcName == null");
-    }
-    return ptr;
-}
--- a/javamanager/javacaptain/extensionplugins/scrupdater/src.s60/scrupdater.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,705 +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:  ScrUpdater is Java Captain Symbian plugin that updates
-*               presence information of Java Applications in USIF SCR
-*               when removable drive is added or removed to the device.
-*
-*/
-
-#include <apgcli.h>
-#include <e32base.h>
-#include <f32file.h>
-
-#include "javaprocessconstants.h"
-#include "javasymbianoslayer.h"
-#include "javauids.h"
-#include "logger.h"
-#include "coreinterface.h"
-#include "booteventprovidermessages.h"
-#include "mmceventprovidermessages.h"
-
-#include "scrupdater.h"
-
-// Enable notifying AppArc for USIF Phase 2.
-//#define RD_JAVA_USIF_NOTIFY_APP_ARC
-
-
-using namespace Usif;
-
-/**
- * Return pointer to ExtensionPluginInterface implementation for this
- * extension dll
- */
-java::captain::ExtensionPluginInterface* getExtensionPlugin()
-{
-    return new java::captain::ScrUpdater();
-}
-
-namespace java
-{
-namespace captain
-{
-
-using java::fileutils::driveInfo;
-using java::fileutils::DriveListenerInterface;
-
-/**
- * Empty contructor
- */
-ScrUpdater::ScrUpdater() : mCore(0)
-{
-}
-
-/**
- * Empty destructor
- */
-ScrUpdater::~ScrUpdater()
-{
-}
-
-/**
- * Implement PluginInterface method
- */
-void ScrUpdater::startPlugin(CoreInterface* core)
-{
-    LOG(EJavaCaptain, EInfo, "ScrUpdater plugin started");
-
-    mCore = core;
-}
-
-/**
- * Implement PluginInterface method
- */
-void ScrUpdater::stopPlugin()
-{
-    mCore = 0;
-}
-
-/**
- * Implement ExtensionPluginInterface method
- */
-EventConsumerInterface* ScrUpdater::getEventConsumer()
-{
-    return this;
-}
-
-/**
- * Handle Java Captain events sent by Boot event provider or
- * MMC event provider.
- *
- * Implement EventConsumerInterface method
- */
-void ScrUpdater::event(const std::string& eventProvider,
-                       java::comms::CommsMessage& aMsg)
-{
-    if (eventProvider == BOOT_EVENT_PROVIDER)
-    {
-        int bootType = NORMAL_BOOT_C;
-        getBootMessageParams(aMsg, bootType);
-        LOG1(
-            EJavaCaptain,
-            EInfo,
-            "ScrUpdater::event() boot event received (type=%d)",
-            bootType);
-        switch (bootType)
-        {
-        case IAD_BOOT_C:
-        case FIRST_DEVICE_BOOT_C:
-        case NORMAL_BOOT_C:
-        {
-            // Update presence information
-            TRAPD(err, initializeScrPresenceInfoL())
-            if (KErrNone != err)
-            {
-                ELOG1(EJavaCaptain, "initializeScrPresenceInfoL: leaved (%d)", err);
-            }
-        }
-        break;
-
-        default:
-        {
-            WLOG1(EJavaCaptain,
-                  "DriveListenerInterface: event() unknown boot event (type=%d)", bootType);
-        }
-        break;
-        }
-    }
-    else if (eventProvider == MMC_EVENT_PROVIDER)
-    {
-        int operation = 0;
-        driveInfo di;
-        getMmcChangedMessageParams(aMsg, operation, di);
-        LOG1(
-            EJavaCaptain,
-            EInfo,
-            "ScrUpdater::event() mmc event received (operation=%d)",
-            operation);
-
-        switch (operation)
-        {
-        case DriveListenerInterface::REMOVABLE_MEDIA_REMOVED_C:
-        {
-            // All Java applications in the removed drive are set
-            // to 'not present' state
-            TRAPD(err, removeScrPresencesL(&di));
-            if (KErrNone != err)
-            {
-                ELOG1(EJavaCaptain, "removeScrPresencesL leaved (%d)", err);
-            }
-        }
-        break;
-
-        case DriveListenerInterface::REMOVABLE_MEDIA_INSERTED_C:
-        {
-            // Those Java applications in the drive to where the media
-            // (e.g. memory card) was added are set to 'present' state
-            // IF the media id is correct (in other words if the same
-            // memory card that they have been installed to is added
-            // to the drive).
-            TRAPD(err, addScrPresencesL(&di));
-            if (KErrNone != err)
-            {
-                ELOG1(EJavaCaptain, "addScrPresencesL leaved (%d)", err);
-            }
-        }
-        break;
-        }
-    }
-}
-
-/**
- * Set the presence state of all Java applications installed
- * to the removable drive specified in aInfo to not present
- */
-void ScrUpdater::removeScrPresencesL(driveInfo *aInfo)
-{
-    __UHEAP_MARK;
-    LOG1WSTR(EJavaCaptain, EInfo,
-             "removeScrPresencesL: driveInfo root path is %s", aInfo->iRootPath);
-
-    RSoftwareComponentRegistry *pScr = createScrL();
-    CleanupStack::PushL(pScr);
-
-    // Get ids of all Java components in scr
-    RArray<TComponentId> componentIdList;
-    CComponentFilter *pJavaSwTypeFilter = CComponentFilter::NewLC();
-    pJavaSwTypeFilter->SetSoftwareTypeL(Usif::KSoftwareTypeJava);
-
-    pScr->GetComponentIdsL(componentIdList);
-    CleanupStack::PopAndDestroy(pJavaSwTypeFilter);
-    CleanupClosePushL(componentIdList);
-
-    // For each component check whether it has been installed
-    // to the removed drive
-    TInt  nComponents = componentIdList.Count();
-    TUint removedDrive = (TUint)(aInfo->iRootPath[0]);
-    // Now removedDrive contains the drive letter, convert it to drive number 0-25
-    if ((removedDrive > 64) && (removedDrive < 91))
-    {
-        // 'A' - 'Z'
-        removedDrive -= 65;
-    }
-    else if ((removedDrive > 96) && (removedDrive < 123))
-    {
-        // 'a' - 'z'
-        removedDrive -= 97;
-    }
-    else
-    {
-        ELOG1WSTR(EJavaCaptain,
-                  "removeScrPresencesL: Unexpected root path in remove drive info %s",
-                  aInfo->iRootPath);
-        CleanupStack::PopAndDestroy(pScr);
-        return;
-    }
-
-    LOG2(EJavaCaptain, EInfo, "Number of Java components is %d, removed drive is %d",
-         nComponents, removedDrive);
-
-#ifdef RD_JAVA_USIF_NOTIFY_APP_ARC
-    // TEMP TEST
-    TBool fPresenceChange = EFalse;
-    RArray<TApaAppUpdateInfo> removedApps;
-    CleanupClosePushL(removedApps);
-#endif
-
-    for (TInt nInd = 0; nInd < nComponents; nInd++)
-    {
-        CComponentEntry *pEntry = CComponentEntry::NewLC();
-        if (!(pScr->GetComponentL(componentIdList[nInd], *pEntry)))
-        {
-            ELOG1(EJavaCaptain,
-                  "removeScrPresencesL: SCR GetComponentIdsL returned id %d "
-                  "but GetComponentL does not find it", componentIdList[nInd]);
-            CleanupStack::PopAndDestroy(pEntry);
-            continue;
-        }
-
-        TInt nInstalledDrives = pEntry->InstalledDrives().Length();
-        if (nInstalledDrives <= removedDrive)
-        {
-            // SCR InstalledDrives should be array of 26 elements (value 0 or 1)
-            ELOG2(EJavaCaptain,
-                  "removeScrPresencesL: The length of InstalledDrives array (%d) "
-                  "is smaller than removedDrive (%d)", nInstalledDrives, removedDrive);
-            CleanupStack::PopAndDestroy(pEntry);
-            continue;
-        }
-
-        LOG1(EJavaCaptain, EInfo, "Java component id %d", componentIdList[nInd]);
-
-        if (pEntry->InstalledDrives()[removedDrive])
-        {
-            // This component has been installed to the drive
-            // that has just been removed
-            pScr->SetIsComponentPresentL(componentIdList[nInd], EFalse);
-
-            LOG1(EJavaCaptain, EInfo,
-                 "removeScrPresencesL: set component %d to not present",
-                 componentIdList[nInd]);
-
-#ifdef RD_JAVA_USIF_NOTIFY_APP_ARC
-            fPresenceChange = ETrue;
-
-            // Gather the Uids of all applications that are no longer present
-            RArray<TUid> appsInComponent;
-            CleanupClosePushL(appsInComponent);
-            pScr->GetAppUidsForComponentL(
-                componentIdList[nInd], appsInComponent);
-            for (TInt nInd2 = 0; nInd2 < appsInComponent.Count(); nInd2++)
-            {
-                TApaAppUpdateInfo appInfo;
-                appInfo.iAppUid = appsInComponent[nInd2];
-                appInfo.iAction = TApaAppUpdateInfo::EAppNotPresent;
-                (void)removedApps.Append(appInfo);
-            }
-            CleanupStack::PopAndDestroy(&appsInComponent);
-#endif
-        }
-
-        CleanupStack::PopAndDestroy(pEntry);
-    }
-
-#ifdef RD_JAVA_USIF_NOTIFY_APP_ARC
-    // Tell AppArc which applications are no longer present
-    while (fPresenceChange)
-    {
-        if (removedApps.Count() == 0)
-        {
-            ELOG(EJavaCaptain, "removeScrPresencesL: Uids of the removed apps are not known");
-            break;
-        }
-
-        RApaLsSession apaSession;
-        TInt err = apaSession.Connect();
-        if (KErrNone != err)
-        {
-            ELOG1(EJavaCaptain, "removeScrPresencesL: Error %d when connecting AppArc", err);
-            break;
-        }
-        else
-        {
-            CleanupClosePushL(apaSession);
-            apaSession.UpdateAppListL(removedApps);
-            CleanupStack::PopAndDestroy(); // closes apaSession
-            fPresenceChange = EFalse;
-        }
-    }
-
-    CleanupStack::PopAndDestroy(); // Close removedApps
-#endif
-    CleanupStack::PopAndDestroy(); // Close componentIdList
-    CleanupStack::PopAndDestroy(pScr);
-    __UHEAP_MARKEND;
-}
-
-
-/**
- * Set the presence state of all Java applications installed
- * to the removable drive specified in aInfo to present
- */
-void ScrUpdater::addScrPresencesL(driveInfo *aInfo)
-{
-    __UHEAP_MARK;
-    LOG1WSTR(EJavaCaptain, EInfo,
-             "addScrPresencesL: driveInfo root path is %s", aInfo->iRootPath);
-
-    RSoftwareComponentRegistry *pScr = createScrL();
-    CleanupStack::PushL(pScr);
-
-    // Get ids of all Java components in scr
-    RArray<TComponentId> componentIdList;
-    CComponentFilter *pJavaSwTypeFilter = CComponentFilter::NewLC();
-    pJavaSwTypeFilter->SetSoftwareTypeL(Usif::KSoftwareTypeJava);
-
-    pScr->GetComponentIdsL(componentIdList, pJavaSwTypeFilter);
-    CleanupStack::PopAndDestroy(pJavaSwTypeFilter);
-    CleanupClosePushL(componentIdList);
-
-
-    // For each component check whether it has been installed
-    // to the added drive AND whether the media id is correct
-    // (in other words if the actual memory card where the component
-    // has been installed to is added to the drive).
-    TInt  nComponents  = componentIdList.Count();
-    TUint addedMediaId = (TUint)(aInfo->iId);
-    TUint addedDrive   = (TUint)(aInfo->iRootPath[0]);
-    // Now addedDrive contains the drive letter, convert it to drive number 0-25
-    if ((addedDrive > 64) && (addedDrive < 91))
-    {
-        // 'A' - 'Z'
-        addedDrive -= 65;
-    }
-    else if ((addedDrive > 96) && (addedDrive < 123))
-    {
-        // 'a' - 'z'
-        addedDrive -= 97;
-    }
-    else
-    {
-        ELOG1WSTR(EJavaCaptain,
-                  "addScrPresencesL: Unexpected root path in add drive info %s",
-                  aInfo->iRootPath);
-        CleanupStack::PopAndDestroy(pScr);
-        return;
-    }
-
-    LOG2(EJavaCaptain, EInfo, "Number of Java components is %d, added drive is %d",
-         nComponents, addedDrive);
-
-#ifdef RD_JAVA_USIF_NOTIFY_APP_ARC
-    TBool fPresenceChange = EFalse;
-    RArray<TApaAppUpdateInfo> addedApps;
-    CleanupClosePushL(addedApps);
-#endif
-
-    for (TInt nInd = 0; nInd < nComponents; nInd++)
-    {
-        CComponentEntry *pEntry = CComponentEntry::NewLC();
-        if (!(pScr->GetComponentL(componentIdList[nInd], *pEntry)))
-        {
-            ELOG1(EJavaCaptain,
-                  "addScrPresencesL: SCR GetComponentIdsL returned id %d "
-                  "but GetComponentL does not find it", componentIdList[nInd]);
-            CleanupStack::PopAndDestroy(pEntry);
-            continue;
-        }
-
-        // When Java Installer registers Java app to SCR it stores also
-        // the media id using SetComponentPropertyL(TComponentId aComponentId,
-        // _L("Media-Id")), TInt64 aValue);  (aValue is actually 32 bit int)
-        CIntPropertyEntry* pMediaIdProperty = (CIntPropertyEntry *)
-                                              pScr->GetComponentPropertyL(componentIdList[nInd],_L("Media-Id"));
-        if (NULL == pMediaIdProperty)
-        {
-            ELOG1(EJavaCaptain,
-                  "addScrPresencesL: media_id property not found for component %d",
-                  componentIdList[nInd]);
-            CleanupStack::PopAndDestroy(pEntry);
-            continue;
-        }
-        CleanupStack::PushL(pMediaIdProperty);
-
-        TInt nInstalledDrives = pEntry->InstalledDrives().Length();
-        if (nInstalledDrives <= addedDrive)
-        {
-            // SCR InstalledDrives should be array of 26 elements (value 0 or 1)
-            ELOG2(EJavaCaptain,
-                  "addScrPresencesL: The length of InstalledDrives array (%d) "
-                  "is smaller than addedDrive (%d)", nInstalledDrives, addedDrive);
-            CleanupStack::PopAndDestroy(pEntry);
-            continue;
-        }
-
-        LOG1(EJavaCaptain, EInfo, "Java component id %d", componentIdList[nInd]);
-
-        if (pEntry->InstalledDrives()[addedDrive])
-        {
-            // This component has been installed to the drive
-            // that has just been added.
-            // Now check whether the media id of the added media
-            // is OK for this component.
-            if (addedMediaId == pMediaIdProperty->IntValue())
-            {
-                pScr->SetIsComponentPresentL(componentIdList[nInd], ETrue);
-
-                LOG1(EJavaCaptain, EInfo,
-                     "addScrPresencesL: set component %d to present",
-                     componentIdList[nInd]);
-
-#ifdef RD_JAVA_USIF_NOTIFY_APP_ARC
-                fPresenceChange = ETrue;
-
-                // Gather the Uids of all 'new' applications that are now present
-                RArray<TUid> appsInComponent;
-                CleanupClosePushL(appsInComponent);
-                pScr->GetAppUidsForComponentL(
-                    componentIdList[nInd], appsInComponent);
-                for (TInt nInd2 = 0; nInd2 < appsInComponent.Count(); nInd2++)
-                {
-                    TApaAppUpdateInfo appInfo;
-                    appInfo.iAppUid = appsInComponent[nInd2];
-                    appInfo.iAction = TApaAppUpdateInfo::EAppPresent;
-                    (void)addedApps.Append(appInfo);
-                }
-                CleanupStack::PopAndDestroy(&appsInComponent);
-#endif
-            }
-        }
-
-        CleanupStack::PopAndDestroy(pMediaIdProperty);
-        CleanupStack::PopAndDestroy(pEntry);
-    }
-
-#ifdef RD_JAVA_USIF_NOTIFY_APP_ARC
-    // Tell AppArc which 'new' applications are now present
-    while (fPresenceChange)
-    {
-        if (addedApps.Count() == 0)
-        {
-            ELOG(EJavaCaptain, "addScrPresencesL: Uids of the 'new' apps are not known");
-            break;
-        }
-
-        RApaLsSession apaSession;
-        TInt err = apaSession.Connect();
-        if (KErrNone != err)
-        {
-            ELOG1(EJavaCaptain, "addScrPresencesL: Error %d when connecting AppArc", err);
-            break;
-        }
-        else
-        {
-            CleanupClosePushL(apaSession);
-            apaSession.UpdateAppListL(addedApps);
-            CleanupStack::PopAndDestroy(); // closes apaSession
-            fPresenceChange = EFalse;
-        }
-    }
-
-    CleanupStack::PopAndDestroy(); // Close addedApps
-#endif
-    CleanupStack::PopAndDestroy(); // Close componentIdList
-    CleanupStack::PopAndDestroy(pScr);
-    __UHEAP_MARKEND;
-}
-
-
-/**
- * Loop through all removable drives and get the media id of
- * the memory card or other removable media in the drive and update
- * presence information of all Java applications installed
- * to removable drives accordingly.
- */
-void ScrUpdater::initializeScrPresenceInfoL()
-{
-    __UHEAP_MARK;
-    RFs fs;
-    User::LeaveIfError(fs.Connect());
-    CleanupClosePushL(fs);
-
-    // Which drives are present and what is the media id of
-    // each removable volume
-    TInt  err = KErrNone;
-    TInt  err2 = KErrNone;
-    TBool drivePresent[EDriveZ + 1];
-    TUint driveMediaId[EDriveZ + 1];
-    TVolumeInfo volumeInfo;
-    TDriveInfo  driveInfo;
-
-    for (TInt nInd = EDriveA; nInd < EDriveZ; nInd++)
-    {
-        err = fs.Volume(volumeInfo, nInd);
-        if (KErrNone == err)
-        {
-            drivePresent[nInd] = ETrue;
-            driveMediaId[nInd] = volumeInfo.iUniqueID;
-            // If the media is not removable, media id is not checked
-            err2 = fs.Drive(driveInfo, nInd);
-            if (KErrNone != err2)
-            {
-                ELOG1(EJavaCaptain,
-                      "initializeScrPresenceInfoL: error (%d) when trying to get drive info",
-                      err2);
-                User::Leave(err2);
-            }
-            else
-            {
-                if (!(driveInfo.iDriveAtt & KDriveAttRemovable))
-                {
-                    driveMediaId[nInd] = 0;
-                }
-            }
-        }
-        else if (KErrNotReady == err)
-        {
-            // no volume in this drive
-            drivePresent[nInd] = EFalse;
-            driveMediaId[nInd] = 0;
-        }
-        else
-        {
-            ELOG1(EJavaCaptain,
-                  "initializeScrPresenceInfoL: error (%d) when trying to get volume info",
-                  err);
-            User::Leave(err);
-        }
-    }
-    CleanupStack::PopAndDestroy(); // close RFs
-
-
-    RSoftwareComponentRegistry *pScr = createScrL();
-    CleanupStack::PushL(pScr);
-
-    // Get ids of all Java components in scr
-    RArray<TComponentId> componentIdList;
-    CComponentFilter *pJavaSwTypeFilter = CComponentFilter::NewLC();
-    pJavaSwTypeFilter->SetSoftwareTypeL(Usif::KSoftwareTypeJava);
-
-    pScr->GetComponentIdsL(componentIdList, pJavaSwTypeFilter);
-    CleanupStack::PopAndDestroy(pJavaSwTypeFilter);
-    CleanupClosePushL(componentIdList);
-
-    // For each component check whether the drive it has been installed
-    // to is present AND whether the media id is correct
-    TInt  nComponents  = componentIdList.Count();
-
-    LOG1(EJavaCaptain, EInfo, "initializeScrPresenceInfoL: Number of Java components is %d",
-         nComponents);
-
-    for (TInt nInd = 0; nInd < nComponents; nInd++)
-    {
-        CComponentEntry *pEntry = CComponentEntry::NewLC();
-        if (!(pScr->GetComponentL(componentIdList[nInd], *pEntry)))
-        {
-            ELOG1(EJavaCaptain,
-                  "initializeScrPresenceInfoL: SCR GetComponentIdsL returned id %d "
-                  "but GetComponentL does not find it", componentIdList[nInd]);
-            CleanupStack::PopAndDestroy(pEntry);
-            continue;
-        }
-
-        CIntPropertyEntry* pMediaIdProperty = (CIntPropertyEntry *)
-                                              pScr->GetComponentPropertyL(componentIdList[nInd],_L("Media-Id"));
-        if (NULL == pMediaIdProperty)
-        {
-            ELOG1(EJavaCaptain,
-                  "initializeScrPresenceInfoL: media_id property not found for component %d",
-                  componentIdList[nInd]);
-            CleanupStack::PopAndDestroy(pEntry);
-            continue;
-        }
-        CleanupStack::PushL(pMediaIdProperty);
-
-        TInt nInstalledDrives = pEntry->InstalledDrives().Length();
-        if (nInstalledDrives > (EDriveZ + 1))
-        {
-            WLOG2(EJavaCaptain,
-                  "initializeScrPresenceInfoL: too big (%d) installed drives array for "
-                  "component %d", nInstalledDrives, componentIdList[nInd]);
-            nInstalledDrives = EDriveZ;
-        }
-        // When Java components are installed, only one installed drive
-        // and corresponding media id are registered.
-        TInt installationDrive = -1;
-
-        for (TInt driveNumber = EDriveA; driveNumber < nInstalledDrives; driveNumber++)
-        {
-            if (pEntry->InstalledDrives()[driveNumber])
-            {
-                installationDrive = driveNumber;
-                break;
-            }
-        }
-
-        if (installationDrive == -1)
-        {
-            ELOG1(EJavaCaptain,
-                  "initializeScrPresenceInfoL: component (id %d) did not have installed drive info",
-                  componentIdList[nInd]);
-            CleanupStack::PopAndDestroy(pMediaIdProperty);
-            CleanupStack::PopAndDestroy(pEntry);
-            continue;
-        }
-
-        if (drivePresent[installationDrive])
-        {
-            // Check also the media id
-            if (driveMediaId[installationDrive] == pMediaIdProperty->IntValue())
-            {
-                LOG1(EJavaCaptain, EInfo,
-                     "initializeScrPresenceInfoL: set component %d to present",
-                     componentIdList[nInd]);
-
-                pScr->SetIsComponentPresentL(componentIdList[nInd], ETrue);
-            }
-            else
-            {
-                LOG1(EJavaCaptain, EInfo,
-                     "initializeScrPresenceInfoL: set component %d to NOT present",
-                     componentIdList[nInd]);
-
-                pScr->SetIsComponentPresentL(componentIdList[nInd], EFalse);
-            }
-        }
-        else
-        {
-            LOG1(EJavaCaptain, EInfo,
-                 "initializeScrPresenceInfoL: set component %d to NOT present",
-                 componentIdList[nInd]);
-
-            // drive is not present -> Java component installed to that
-            // drive is not present
-            pScr->SetIsComponentPresentL(componentIdList[nInd], EFalse);
-        }
-
-        CleanupStack::PopAndDestroy(pMediaIdProperty);
-        CleanupStack::PopAndDestroy(pEntry);
-    }
-
-    CleanupStack::PopAndDestroy(); // Close componentIdList
-    CleanupStack::PopAndDestroy(pScr); // Also closes RSoftwareComponentRegistry
-
-    __UHEAP_MARKEND;
-}
-
-
-/**
- * Creates an instance of RSoftwareComponentRegistry and connects to it.
- */
-RSoftwareComponentRegistry *ScrUpdater::createScrL()
-{
-    RSoftwareComponentRegistry *pScr = new RSoftwareComponentRegistry;
-    if (NULL == pScr)
-    {
-        ELOG(EJavaInstaller,
-             "CreateScrL: Creating RSoftwareComponentRegistry failed");
-        User::Leave(KErrGeneral);
-    }
-    TInt err = pScr->Connect();
-    if (KErrNone != err)
-    {
-        ELOG1(EJavaInstaller,
-              "CreateScrL: Connecting to RSoftwareComponentRegistry failed, error %d",
-              err);
-        delete pScr;
-        User::Leave(err);
-    }
-
-    return pScr;
-}
-
-
-} // namespace captain
-} // namespace java
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javacaptain/extensionplugins/scrupdater/src/lookup.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* 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:  lookup
+*
+*/
+
+#include <string> //For strcmp
+
+#include "javasymbianoslayer.h"
+#include "logger.h"
+
+#include "extensionplugininterface.h"
+
+using namespace java::captain;
+
+ExtensionPluginInterface* getExtensionPlugin();
+
+EXPORT_C FuncPtr findDllMethod(const char* funcName)
+{
+    JELOG2(EJavaCaptain);
+    FuncPtr ptr = 0;
+    if (funcName)
+    {
+        if (strcmp(funcName, "getExtensionPlugin") == 0)
+        {
+            ptr = (FuncPtr)getExtensionPlugin;
+        }
+    }
+    else
+    {
+        ELOG(EJavaCaptain,
+             "scrupdater extensionplugin findDllMethod() funcName == null");
+    }
+    return ptr;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javacaptain/extensionplugins/scrupdater/src/scrupdater.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,687 @@
+/*
+* 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:  ScrUpdater is Java Captain Symbian plugin that updates
+*               presence information of Java Applications in USIF SCR
+*               when removable drive is added or removed to the device.
+*
+*/
+
+#include <apgcli.h>
+#include <e32base.h>
+#include <f32file.h>
+
+#include "javaprocessconstants.h"
+#include "javasymbianoslayer.h"
+#include "javauids.h"
+#include "logger.h"
+#include "coreinterface.h"
+#include "booteventprovidermessages.h"
+#include "mmceventprovidermessages.h"
+
+#include "scrupdater.h"
+
+using namespace Usif;
+
+/**
+ * Return pointer to ExtensionPluginInterface implementation for this
+ * extension dll
+ */
+java::captain::ExtensionPluginInterface* getExtensionPlugin()
+{
+    return new java::captain::ScrUpdater();
+}
+
+namespace java
+{
+namespace captain
+{
+
+using java::fileutils::driveInfo;
+using java::fileutils::DriveListenerInterface;
+
+/**
+ * Empty contructor
+ */
+ScrUpdater::ScrUpdater() : mCore(0)
+{
+}
+
+/**
+ * Empty destructor
+ */
+ScrUpdater::~ScrUpdater()
+{
+}
+
+/**
+ * Implement PluginInterface method
+ */
+void ScrUpdater::startPlugin(CoreInterface* core)
+{
+    LOG(EJavaCaptain, EInfo, "ScrUpdater plugin started");
+
+    mCore = core;
+}
+
+/**
+ * Implement PluginInterface method
+ */
+void ScrUpdater::stopPlugin()
+{
+    mCore = 0;
+}
+
+/**
+ * Implement ExtensionPluginInterface method
+ */
+EventConsumerInterface* ScrUpdater::getEventConsumer()
+{
+    return this;
+}
+
+/**
+ * Handle Java Captain events sent by Boot event provider or
+ * MMC event provider.
+ *
+ * Implement EventConsumerInterface method
+ */
+void ScrUpdater::event(const std::string& eventProvider,
+                       java::comms::CommsMessage& aMsg)
+{
+    if (eventProvider == BOOT_EVENT_PROVIDER)
+    {
+        int bootType = NORMAL_BOOT_C;
+        getBootMessageParams(aMsg, bootType);
+        LOG1(
+            EJavaCaptain,
+            EInfo,
+            "ScrUpdater::event() boot event received (type=%d)",
+            bootType);
+        switch (bootType)
+        {
+            case IAD_BOOT_C:
+            case FIRST_DEVICE_BOOT_C:
+            case NORMAL_BOOT_C:
+            {
+                // Update presence information
+                TRAPD(err, initializeScrPresenceInfoL())
+                if (KErrNone != err)
+                {
+                    ELOG1(EJavaCaptain, "initializeScrPresenceInfoL: leaved (%d)", err);
+                }
+            }
+            break;
+
+            default:
+            {
+                WLOG1(EJavaCaptain,
+                    "DriveListenerInterface: event() unknown boot event (type=%d)", bootType);
+            }
+            break;
+        }
+    }
+    else if (eventProvider == MMC_EVENT_PROVIDER)
+    {
+        int operation = 0;
+        driveInfo di;
+        getMmcChangedMessageParams(aMsg, operation, di);
+        LOG1(
+            EJavaCaptain,
+            EInfo,
+            "ScrUpdater::event() mmc event received (operation=%d)",
+            operation);
+
+        switch (operation)
+        {
+            case DriveListenerInterface::REMOVABLE_MEDIA_REMOVED_C:
+            {
+                // All Java applications in the removed drive are set
+                // to 'not present' state
+                TRAPD(err, removeScrPresencesL(&di));
+                if (KErrNone != err)
+                {
+                    ELOG1(EJavaCaptain, "removeScrPresencesL leaved (%d)", err);
+                }
+            }
+            break;
+
+            case DriveListenerInterface::REMOVABLE_MEDIA_INSERTED_C:
+            {
+                // Those Java applications in the drive to where the media
+                // (e.g. memory card) was added are set to 'present' state
+                // IF the media id is correct (in other words if the same
+                // memory card that they have been installed to is added
+                // to the drive).
+                TRAPD(err, addScrPresencesL(&di));
+                if (KErrNone != err)
+                {
+                    ELOG1(EJavaCaptain, "addScrPresencesL leaved (%d)", err);
+                }
+            }
+            break;
+        }
+    }
+}
+
+/**
+ * Set the presence state of all Java applications installed
+ * to the removable drive specified in aInfo to not present
+ */
+void ScrUpdater::removeScrPresencesL(driveInfo *aInfo)
+{
+    __UHEAP_MARK;
+    LOG1WSTR(EJavaCaptain, EInfo,
+        "removeScrPresencesL: driveInfo root path is %s", aInfo->iRootPath);
+
+    RSoftwareComponentRegistry *pScr = createScrL();
+    CleanupStack::PushL(pScr);
+
+    // Get ids of all Java components in scr
+    RArray<TComponentId> componentIdList;
+    CComponentFilter *pJavaSwTypeFilter = CComponentFilter::NewLC();
+    pJavaSwTypeFilter->SetSoftwareTypeL(Usif::KSoftwareTypeJava);
+
+    pScr->GetComponentIdsL(componentIdList, pJavaSwTypeFilter);
+    CleanupStack::PopAndDestroy(pJavaSwTypeFilter);
+    CleanupClosePushL(componentIdList);
+
+    // For each component check whether it has been installed
+    // to the removed drive
+    TInt  nComponents = componentIdList.Count();
+    TUint removedDrive = (TUint)(aInfo->iRootPath[0]);
+    // Now removedDrive contains the drive letter, convert it to drive number 0-25
+    if ((removedDrive > 64) && (removedDrive < 91))
+    {
+        // 'A' - 'Z'
+        removedDrive -= 65;
+    }
+    else if ((removedDrive > 96) && (removedDrive < 123))
+    {
+        // 'a' - 'z'
+        removedDrive -= 97;
+    }
+    else
+    {
+        ELOG1WSTR(EJavaCaptain,
+            "removeScrPresencesL: Unexpected root path in remove drive info %s",
+            aInfo->iRootPath);
+        CleanupStack::PopAndDestroy(pScr);
+        return;
+    }
+
+    LOG2(EJavaCaptain, EInfo, "Number of Java components is %d, removed drive is %d",
+        nComponents, removedDrive);
+
+    TBool fPresenceChange = EFalse;
+    RArray<TApaAppUpdateInfo> removedApps;
+    CleanupClosePushL(removedApps);
+
+    for (TInt nInd = 0; nInd < nComponents; nInd++)
+    {
+        CComponentEntry *pEntry = CComponentEntry::NewLC();
+        if (!(pScr->GetComponentL(componentIdList[nInd], *pEntry)))
+        {
+            ELOG1(EJavaCaptain,
+                "removeScrPresencesL: SCR GetComponentIdsL returned id %d "
+                "but GetComponentL does not find it", componentIdList[nInd]);
+            CleanupStack::PopAndDestroy(pEntry);
+            continue;
+        }
+
+        TInt nInstalledDrives = pEntry->InstalledDrives().Length();
+        if (nInstalledDrives <= removedDrive)
+        {
+            // SCR InstalledDrives should be array of 26 elements (value 0 or 1)
+            ELOG2(EJavaCaptain,
+                "removeScrPresencesL: The length of InstalledDrives array (%d) "
+                "is smaller than removedDrive (%d)", nInstalledDrives, removedDrive);
+            CleanupStack::PopAndDestroy(pEntry);
+            continue;
+        }
+
+        LOG1(EJavaCaptain, EInfo, "Java component id %d", componentIdList[nInd]);
+
+        if (pEntry->InstalledDrives()[removedDrive])
+        {
+            // This component has been installed to the drive
+            // that has just been removed
+            pScr->SetIsComponentPresentL(componentIdList[nInd], EFalse);
+
+            LOG1(EJavaCaptain, EInfo,
+                "removeScrPresencesL: set component %d to not present",
+                componentIdList[nInd]);
+
+            fPresenceChange = ETrue;
+
+            // Gather the Uids of all applications that are no longer present
+            RArray<TUid> appsInComponent;
+            CleanupClosePushL(appsInComponent);
+            pScr->GetAppUidsForComponentL(
+                componentIdList[nInd], appsInComponent);
+            for (TInt nInd2 = 0; nInd2 < appsInComponent.Count(); nInd2++)
+            {
+                TApaAppUpdateInfo appInfo;
+                appInfo.iAppUid = appsInComponent[nInd2];
+                appInfo.iAction = TApaAppUpdateInfo::EAppNotPresent;
+                (void)removedApps.Append(appInfo);
+            }
+            CleanupStack::PopAndDestroy(&appsInComponent);
+        }
+
+        CleanupStack::PopAndDestroy(pEntry);
+    }
+
+    // Tell AppArc which applications are no longer present
+    while (fPresenceChange)
+    {
+        if (removedApps.Count() == 0)
+        {
+            ELOG(EJavaCaptain, "removeScrPresencesL: Uids of the removed apps are not known");
+            break;
+        }
+
+        RApaLsSession apaSession;
+        TInt err = apaSession.Connect();
+        if (KErrNone != err)
+        {
+            ELOG1(EJavaCaptain, "removeScrPresencesL: Error %d when connecting AppArc", err);
+            break;
+        }
+        else
+        {
+            CleanupClosePushL(apaSession);
+            apaSession.UpdateAppListL(removedApps);
+            CleanupStack::PopAndDestroy(); // closes apaSession
+            fPresenceChange = EFalse;
+        }
+    }
+
+    CleanupStack::PopAndDestroy(); // Close removedApps
+    CleanupStack::PopAndDestroy(); // Close componentIdList
+    CleanupStack::PopAndDestroy(pScr);
+    __UHEAP_MARKEND;
+}
+
+
+/**
+ * Set the presence state of all Java applications installed
+ * to the removable drive specified in aInfo to present
+ */
+void ScrUpdater::addScrPresencesL(driveInfo *aInfo)
+{
+    __UHEAP_MARK;
+    LOG1WSTR(EJavaCaptain, EInfo,
+        "addScrPresencesL: driveInfo root path is %s", aInfo->iRootPath);
+
+    RSoftwareComponentRegistry *pScr = createScrL();
+    CleanupStack::PushL(pScr);
+
+    // Get ids of all Java components in scr
+    RArray<TComponentId> componentIdList;
+    CComponentFilter *pJavaSwTypeFilter = CComponentFilter::NewLC();
+    pJavaSwTypeFilter->SetSoftwareTypeL(Usif::KSoftwareTypeJava);
+
+    pScr->GetComponentIdsL(componentIdList, pJavaSwTypeFilter);
+    CleanupStack::PopAndDestroy(pJavaSwTypeFilter);
+    CleanupClosePushL(componentIdList);
+
+    // For each component check whether it has been installed
+    // to the added drive AND whether the media id is correct
+    // (in other words if the actual memory card where the component
+    // has been installed to is added to the drive).
+    TInt  nComponents  = componentIdList.Count();
+    TUint addedMediaId = (TUint)(aInfo->iId);
+    TUint addedDrive   = (TUint)(aInfo->iRootPath[0]);
+    // Now addedDrive contains the drive letter, convert it to drive number 0-25
+    if ((addedDrive > 64) && (addedDrive < 91))
+    {
+        // 'A' - 'Z'
+        addedDrive -= 65;
+    }
+    else if ((addedDrive > 96) && (addedDrive < 123))
+    {
+        // 'a' - 'z'
+        addedDrive -= 97;
+    }
+    else
+    {
+        ELOG1WSTR(EJavaCaptain,
+            "addScrPresencesL: Unexpected root path in add drive info %s",
+            aInfo->iRootPath);
+        CleanupStack::PopAndDestroy(pScr);
+        return;
+    }
+
+    LOG2(EJavaCaptain, EInfo, "Number of Java components is %d, added drive is %d",
+        nComponents, addedDrive);
+
+    TBool fPresenceChange = EFalse;
+    RArray<TApaAppUpdateInfo> addedApps;
+    CleanupClosePushL(addedApps);
+
+    for (TInt nInd = 0; nInd < nComponents; nInd++)
+    {
+        CComponentEntry *pEntry = CComponentEntry::NewLC();
+        if (!(pScr->GetComponentL(componentIdList[nInd], *pEntry)))
+        {
+            ELOG1(EJavaCaptain,
+                "addScrPresencesL: SCR GetComponentIdsL returned id %d "
+                "but GetComponentL does not find it", componentIdList[nInd]);
+            CleanupStack::PopAndDestroy(pEntry);
+            continue;
+        }
+
+        // When Java Installer registers Java app to SCR it stores also
+        // the media id using SetComponentPropertyL(TComponentId aComponentId,
+        // _L("Media-Id")), TInt64 aValue);  (aValue is actually 32 bit int)
+        CIntPropertyEntry* pMediaIdProperty = (CIntPropertyEntry *)
+            pScr->GetComponentPropertyL(componentIdList[nInd],_L("Media-Id"));
+        if (NULL == pMediaIdProperty)
+        {
+            ELOG1(EJavaCaptain,
+                "addScrPresencesL: media_id property not found for component %d",
+                componentIdList[nInd]);
+            CleanupStack::PopAndDestroy(pEntry);
+            continue;
+        }
+        CleanupStack::PushL(pMediaIdProperty);
+
+        TInt nInstalledDrives = pEntry->InstalledDrives().Length();
+        if (nInstalledDrives <= addedDrive)
+        {
+            // SCR InstalledDrives should be array of 26 elements (value 0 or 1)
+            ELOG2(EJavaCaptain,
+                "addScrPresencesL: The length of InstalledDrives array (%d) "
+                "is smaller than addedDrive (%d)", nInstalledDrives, addedDrive);
+            CleanupStack::PopAndDestroy(pEntry);
+            continue;
+        }
+
+        LOG1(EJavaCaptain, EInfo, "Java component id %d", componentIdList[nInd]);
+
+        if (pEntry->InstalledDrives()[addedDrive])
+        {
+            // This component has been installed to the drive
+            // that has just been added.
+            // Now check whether the media id of the added media
+            // is OK for this component.
+            if (addedMediaId == pMediaIdProperty->IntValue())
+            {
+                pScr->SetIsComponentPresentL(componentIdList[nInd], ETrue);
+
+                LOG1(EJavaCaptain, EInfo,
+                    "addScrPresencesL: set component %d to present",
+                    componentIdList[nInd]);
+
+                fPresenceChange = ETrue;
+
+                // Gather the Uids of all 'new' applications that are now present
+                RArray<TUid> appsInComponent;
+                CleanupClosePushL(appsInComponent);
+                pScr->GetAppUidsForComponentL(
+                    componentIdList[nInd], appsInComponent);
+                for (TInt nInd2 = 0; nInd2 < appsInComponent.Count(); nInd2++)
+                {
+                    TApaAppUpdateInfo appInfo;
+                    appInfo.iAppUid = appsInComponent[nInd2];
+                    appInfo.iAction = TApaAppUpdateInfo::EAppPresent;
+                    (void)addedApps.Append(appInfo);
+                }
+                CleanupStack::PopAndDestroy(&appsInComponent);
+            }
+        }
+
+        CleanupStack::PopAndDestroy(pMediaIdProperty);
+        CleanupStack::PopAndDestroy(pEntry);
+    }
+
+    // Tell AppArc which 'new' applications are now present
+    while (fPresenceChange)
+    {
+        if (addedApps.Count() == 0)
+        {
+            ELOG(EJavaCaptain, "addScrPresencesL: Uids of the 'new' apps are not known");
+            break;
+        }
+
+        RApaLsSession apaSession;
+        TInt err = apaSession.Connect();
+        if (KErrNone != err)
+        {
+            ELOG1(EJavaCaptain, "addScrPresencesL: Error %d when connecting AppArc", err);
+            break;
+        }
+        else
+        {
+            CleanupClosePushL(apaSession);
+            apaSession.UpdateAppListL(addedApps);
+            CleanupStack::PopAndDestroy(); // closes apaSession
+            fPresenceChange = EFalse;
+        }
+    }
+
+    CleanupStack::PopAndDestroy(); // Close addedApps
+    CleanupStack::PopAndDestroy(); // Close componentIdList
+    CleanupStack::PopAndDestroy(pScr);
+    __UHEAP_MARKEND;
+}
+
+
+/**
+ * Loop through all removable drives and get the media id of
+ * the memory card or other removable media in the drive and update
+ * presence information of all Java applications installed
+ * to removable drives accordingly.
+ */
+void ScrUpdater::initializeScrPresenceInfoL()
+{
+    __UHEAP_MARK;
+    RFs fs;
+    User::LeaveIfError(fs.Connect());
+    CleanupClosePushL(fs);
+
+    // Which drives are present and what is the media id of
+    // each removable volume
+    TInt  err = KErrNone;
+    TInt  err2 = KErrNone;
+    TBool drivePresent[EDriveZ + 1];
+    TUint driveMediaId[EDriveZ + 1];
+    TVolumeInfo volumeInfo;
+    TDriveInfo  driveInfo;
+
+    for (TInt nInd = EDriveA; nInd < EDriveZ; nInd++)
+    {
+        err = fs.Volume(volumeInfo, nInd);
+        if (KErrNone == err)
+        {
+            drivePresent[nInd] = ETrue;
+            driveMediaId[nInd] = volumeInfo.iUniqueID;
+            // If the media is not removable, media id is not checked
+            err2 = fs.Drive(driveInfo, nInd);
+            if (KErrNone != err2)
+            {
+                ELOG1(EJavaCaptain,
+                    "initializeScrPresenceInfoL: error (%d) when trying to get drive info",
+                    err2);
+                User::Leave(err2);
+            }
+            else
+            {
+                if (!(driveInfo.iDriveAtt & KDriveAttRemovable))
+                {
+                    driveMediaId[nInd] = 0;
+                }
+            }
+        }
+        else if (KErrNotReady == err)
+        {
+            // no volume in this drive
+            drivePresent[nInd] = EFalse;
+            driveMediaId[nInd] = 0;
+        }
+        else
+        {
+            ELOG1(EJavaCaptain,
+                "initializeScrPresenceInfoL: error (%d) when trying to get volume info",
+                err);
+            User::Leave(err);
+        }
+    }
+    CleanupStack::PopAndDestroy(); // close RFs
+
+
+    RSoftwareComponentRegistry *pScr = createScrL();
+    CleanupStack::PushL(pScr);
+
+    // Get ids of all Java components in scr
+    RArray<TComponentId> componentIdList;
+    CComponentFilter *pJavaSwTypeFilter = CComponentFilter::NewLC();
+    pJavaSwTypeFilter->SetSoftwareTypeL(Usif::KSoftwareTypeJava);
+
+    pScr->GetComponentIdsL(componentIdList, pJavaSwTypeFilter);
+    CleanupStack::PopAndDestroy(pJavaSwTypeFilter);
+    CleanupClosePushL(componentIdList);
+
+    // For each component check whether the drive it has been installed
+    // to is present AND whether the media id is correct
+    TInt  nComponents  = componentIdList.Count();
+
+    LOG1(EJavaCaptain, EInfo, "initializeScrPresenceInfoL: Number of Java components is %d",
+        nComponents);
+
+    for (TInt nInd = 0; nInd < nComponents; nInd++)
+    {
+        CComponentEntry *pEntry = CComponentEntry::NewLC();
+        if (!(pScr->GetComponentL(componentIdList[nInd], *pEntry)))
+        {
+            ELOG1(EJavaCaptain,
+                "initializeScrPresenceInfoL: SCR GetComponentIdsL returned id %d "
+                "but GetComponentL does not find it", componentIdList[nInd]);
+            CleanupStack::PopAndDestroy(pEntry);
+            continue;
+        }
+
+        CIntPropertyEntry* pMediaIdProperty = (CIntPropertyEntry *)
+            pScr->GetComponentPropertyL(componentIdList[nInd],_L("Media-Id"));
+        if (NULL == pMediaIdProperty)
+        {
+            ELOG1(EJavaCaptain,
+                "initializeScrPresenceInfoL: media_id property not found for component %d",
+                componentIdList[nInd]);
+            CleanupStack::PopAndDestroy(pEntry);
+            continue;
+        }
+        CleanupStack::PushL(pMediaIdProperty);
+
+        TInt nInstalledDrives = pEntry->InstalledDrives().Length();
+        if (nInstalledDrives > (EDriveZ + 1))
+        {
+            WLOG2(EJavaCaptain,
+                "initializeScrPresenceInfoL: too big (%d) installed drives array for "
+                "component %d", nInstalledDrives, componentIdList[nInd]);
+            nInstalledDrives = EDriveZ;
+        }
+        // When Java components are installed, only one installed drive
+        // and corresponding media id are registered.
+        TInt installationDrive = -1;
+
+        for (TInt driveNumber = EDriveA; driveNumber < nInstalledDrives; driveNumber++)
+        {
+            if (pEntry->InstalledDrives()[driveNumber])
+            {
+                installationDrive = driveNumber;
+                break;
+            }
+        }
+
+        if (installationDrive == -1)
+        {
+            ELOG1(EJavaCaptain,
+                "initializeScrPresenceInfoL: component (id %d) did not have installed drive info",
+                componentIdList[nInd]);
+            CleanupStack::PopAndDestroy(pMediaIdProperty);
+            CleanupStack::PopAndDestroy(pEntry);
+            continue;
+        }
+
+        if (drivePresent[installationDrive])
+        {
+            // Check also the media id
+            if (driveMediaId[installationDrive] == pMediaIdProperty->IntValue())
+            {
+                LOG1(EJavaCaptain, EInfo,
+                    "initializeScrPresenceInfoL: set component %d to present",
+                    componentIdList[nInd]);
+
+                pScr->SetIsComponentPresentL(componentIdList[nInd], ETrue);
+            }
+            else
+            {
+                LOG1(EJavaCaptain, EInfo,
+                    "initializeScrPresenceInfoL: set component %d to NOT present",
+                    componentIdList[nInd]);
+
+                pScr->SetIsComponentPresentL(componentIdList[nInd], EFalse);
+            }
+        }
+        else
+        {
+            LOG1(EJavaCaptain, EInfo,
+                "initializeScrPresenceInfoL: set component %d to NOT present",
+                componentIdList[nInd]);
+
+            // drive is not present -> Java component installed to that
+            // drive is not present
+            pScr->SetIsComponentPresentL(componentIdList[nInd], EFalse);
+        }
+
+        CleanupStack::PopAndDestroy(pMediaIdProperty);
+        CleanupStack::PopAndDestroy(pEntry);
+    }
+
+    CleanupStack::PopAndDestroy(); // Close componentIdList
+    CleanupStack::PopAndDestroy(pScr); // Also closes RSoftwareComponentRegistry
+
+    __UHEAP_MARKEND;
+}
+
+
+/**
+ * Creates an instance of RSoftwareComponentRegistry and connects to it.
+ */
+RSoftwareComponentRegistry *ScrUpdater::createScrL()
+{
+    RSoftwareComponentRegistry *pScr = new RSoftwareComponentRegistry;
+    if (NULL == pScr)
+    {
+        ELOG(EJavaInstaller,
+            "CreateScrL: Creating RSoftwareComponentRegistry failed");
+        User::Leave(KErrGeneral);
+    }
+    TInt err = pScr->Connect();
+    if (KErrNone != err)
+    {
+        ELOG1(EJavaInstaller,
+            "CreateScrL: Connecting to RSoftwareComponentRegistry failed, error %d",
+            err);
+        delete pScr;
+        User::Leave(err);
+    }
+
+    return pScr;
+}
+
+
+} // namespace captain
+} // namespace java
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javacaptain/extensionplugins/scrupdater/src/scrupdater.h	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,71 @@
+/*
+* 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:  ScrUpdater is Java Captain Symbian plugin that updates
+*               presence information of Java Applications in USIF SCR
+*               when removable drive is added or removed to the device.
+*
+*/
+
+#ifndef SCRUPDATER_H
+#define SCRUPDATER_H
+
+#include <usif/scr/scr.h>
+#include <usif/scr/screntries.h>
+
+#include "javaosheaders.h"
+
+#include "eventconsumerinterface.h"
+#include "extensionplugininterface.h"
+
+namespace java
+{
+
+namespace captain
+{
+
+class CoreInterface;
+
+OS_NONSHARABLE_CLASS(ScrUpdater) :  public EventConsumerInterface,
+        public ExtensionPluginInterface
+{
+public:
+    ScrUpdater();
+    virtual ~ScrUpdater();
+
+    // PluginInterface
+    virtual void startPlugin(CoreInterface* aCore);
+    virtual void stopPlugin();
+
+    // EventConsumerInterface
+    virtual void event(const std::string& eventProvider,
+                       java::comms::CommsMessage& aMsg);
+
+    // ExtensionPluginInterface methods
+    virtual EventConsumerInterface* getEventConsumer();
+
+private:
+    void removeScrPresencesL(driveInfo *aInfo);
+    void addScrPresencesL(driveInfo *aInfo);
+    void initializeScrPresenceInfoL();
+
+    Usif::RSoftwareComponentRegistry *createScrL();
+
+
+    CoreInterface* mCore;
+};
+
+} // namespace captain
+} // namespace java
+
+#endif // SCRUPDATER_H
--- a/javamanager/javainstaller/appinstuiplugin/build/javainstalllauncher.mmp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/appinstuiplugin/build/javainstalllauncher.mmp	Wed Jun 23 18:07:10 2010 +0300
@@ -52,8 +52,6 @@
 USERINCLUDE     ../inc
 USERINCLUDE     ../../../../inc
 
-SYSTEMINCLUDE   ../../../../inc
-
 // Libraries
 LIBRARY         charconv.lib
 LIBRARY         cone.lib
--- a/javamanager/javainstaller/installer/build/javainstaller.pro	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/build/javainstaller.pro	Wed Jun 23 18:07:10 2010 +0300
@@ -61,11 +61,7 @@
 
     contains(PROJECT_DEFINES,RD_JAVA_S60_RELEASE_10_1_ONWARDS) {
         CONFIG += hb
-        LIBS += -lxqservice
-    }
-
-    contains(PROJECT_DEFINES,RD_JAVA_USIF_NOTIFY_PROGRESS) {
-        LIBS += -lsifnotification
+        LIBS += -lsifnotification -lxqservice
     }
 
     MMP_RULES += \
--- a/javamanager/javainstaller/installer/javasrc.s60/com/nokia/mj/impl/installer/applicationregistrator/SifNotifier.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc.s60/com/nokia/mj/impl/installer/applicationregistrator/SifNotifier.java	Wed Jun 23 18:07:10 2010 +0300
@@ -107,19 +107,15 @@
         iIconDir = aIconDir;
         iComponentIcon = aComponentIcon;
 
-        if (iHandle == 0)
-        {
-            InstallerException.internalError(
-                "SifNotifier.notifyStart: notifier has not been initialized");
-        }
+        checkHandle();
         int ret = _notifyStart(
                       iHandle, aGlobalComponentId, aComponentName,
                       aApplicationNames, aApplicationIcons,
                       aComponentSize, aIconDir, aComponentIcon);
         if (ret < 0)
         {
-            Log.logError("Notifying SIF start failed with code " + ret +
-                         ", " + getInfoString());
+            Log.log("Notifying SIF start failed with code " + ret +
+                    ", " + getInfoString());
             InstallerException.internalError(
                 "Notifying SIF start failed with code " + ret);
         }
@@ -138,11 +134,7 @@
     public void notifyEnd(
         int aErrCategory, int aErrCode, String aErrMsg, String aErrMsgDetails)
     {
-        if (iHandle == 0)
-        {
-            InstallerException.internalError(
-                "SifNotifier.notifyEnd: notifier has not been initialized");
-        }
+        checkHandle();
         if (aErrCategory == 0 && iLastProgressSent < MAX_PROGRESS)
         {
             // Before sending end notification, update progress to max if
@@ -162,8 +154,8 @@
             ", ErrMsgDetails: " + aErrMsgDetails;
         if (ret < 0)
         {
-            Log.logError("Notifying SIF end failed with code " + ret +
-                         ", " + getInfoString() + ", " + logMsg);
+            Log.log("Notifying SIF end failed with code " + ret +
+                    ", " + getInfoString() + ", " + logMsg);
             InstallerException.internalError(
                 "Notifying SIF end failed with code " + ret);
         }
@@ -184,11 +176,7 @@
         {
             return;
         }
-        if (iHandle == 0)
-        {
-            InstallerException.internalError(
-                "SifNotifier.notifyProgress: notifier has not been initialized");
-        }
+        checkHandle();
         if (aSubOperation == SUB_OP_NO)
         {
             iLastProgressSent = aCurrent;
@@ -202,8 +190,8 @@
             ", Total: " + aTotal;
         if (ret < 0)
         {
-            Log.logError("Notifying SIF progress failed with code " + ret +
-                         ", " + getInfoString() + ", " + logMsg);
+            Log.log("Notifying SIF progress failed with code " + ret +
+                    ", " + getInfoString() + ", " + logMsg);
             InstallerException.internalError(
                 "Notifying SIF progress failed with code " + ret);
         }
@@ -221,11 +209,7 @@
      */
     public void destroy()
     {
-        if (iHandle == 0)
-        {
-            InstallerException.internalError(
-                "SifNotifier.destroy: notifier has not been initialized");
-        }
+        checkHandle();
         int ret = _destroy(iHandle);
         if (ret < 0)
         {
@@ -265,6 +249,19 @@
     /*** ----------------------------- PRIVATE ---------------------------- */
 
     /**
+     * Checks if notifier instance has been initialized.
+     * @throws InstallerException if notifier has not been initialized
+     */
+    private void checkHandle()
+    {
+        if (iHandle == 0)
+        {
+            InstallerException.internalError(
+                "SifNotifier.destroy: notifier has not been initialized");
+        }
+    }
+
+    /**
      * Returns notification info string used in logging.
      */
     private String getInfoString()
--- a/javamanager/javainstaller/installer/javasrc.s60/com/nokia/mj/impl/installer/applicationregistrator/SifRegistrator.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc.s60/com/nokia/mj/impl/installer/applicationregistrator/SifRegistrator.java	Wed Jun 23 18:07:10 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2010 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"
@@ -60,6 +60,14 @@
     }
 
     /**
+     * Returns SIF specific error category from given error id.
+     */
+    public static int getErrorCategory(int aErrorId)
+    {
+        return _getErrorCategory(aErrorId);
+    }
+
+    /**
      * Launches the application view. If launching application view
      * fails this method does not throw exception but produces an
      * error log entry.
@@ -157,7 +165,7 @@
         if (ret < 0)
         {
             InstallerException.internalError(
-                "Creating session failed with code " + ret);
+                "Creating SIF session failed with code " + ret);
         }
         //Log.log("SifRegistrator session started");
         iSessionHandle = ret;
@@ -176,36 +184,18 @@
      */
     public void registerSuite(SuiteInfo aSuiteInfo, boolean aIsUpdate)
     {
-        if (0 == iSessionHandle)
-        {
-            InstallerException.internalError("No valid SIF session.");
-        }
+        checkSession();
         Log.log("SifRegistrator registering application suite " +
                 aSuiteInfo.getGlobalId());
 
-        if (_getUsifMode() > 0)
+        // Register suite as a component.
+        registerComponent(aSuiteInfo, aIsUpdate);
+        registerLocalizedComponentName(aSuiteInfo, -1);
+        // Register applications within the component.
+        Vector apps = aSuiteInfo.getApplications();
+        for (int i = 0; i < apps.size(); i++)
         {
-            // USIF Phase 2 registration.
-            // Register suite as a component.
-            registerComponent(aSuiteInfo, aIsUpdate);
-            registerLocalizedComponentName(aSuiteInfo, -1);
-            // Register applications within the component.
-            Vector apps = aSuiteInfo.getApplications();
-            for (int i = 0; i < apps.size(); i++)
-            {
-                registerApplication(aSuiteInfo, i);
-            }
-        }
-        else
-        {
-            // USIF Phase 1 registration.
-            // Register each application in the suite.
-            Vector apps = aSuiteInfo.getApplications();
-            for (int i = 0; i < apps.size(); i++)
-            {
-                registerComponent(aSuiteInfo, i, aIsUpdate);
-                registerLocalizedComponentName(aSuiteInfo, i);
-            }
+            registerApplication(aSuiteInfo, i);
         }
         registerLocalizedProperties(aSuiteInfo);
     }
@@ -221,29 +211,12 @@
      */
     public void unregisterSuite(SuiteInfo aSuiteInfo)
     {
-        if (0 == iSessionHandle)
-        {
-            InstallerException.internalError("No valid SIF session.");
-        }
+        checkSession();
         Log.log("SifRegistrator unregistering application suite " +
                 aSuiteInfo.getGlobalId());
 
-        if (_getUsifMode() > 0)
-        {
-            // USIF Phase 2 unregistration.
-            // Unregister suite as a component.
-            unregisterComponent(aSuiteInfo);
-        }
-        else
-        {
-            // USIF Phase 1 unregistration.
-            // Unregister each application in the suite.
-            Vector apps = aSuiteInfo.getApplications();
-            for (int i = 0; i < apps.size(); i++)
-            {
-                unregisterComponent(aSuiteInfo, i);
-            }
-        }
+        // Unregister suite as a component.
+        unregisterComponent(aSuiteInfo);
     }
 
     /**
@@ -256,15 +229,11 @@
      */
     public void commitSession()
     {
-        if (0 == iSessionHandle)
-        {
-            InstallerException.internalError("No valid SIF session.");
-        }
-
+        checkSession();
         int err = _commitSession(iSessionHandle);
         if (err < 0)
         {
-            InstallerException.internalError("Commiting session failed with code " + err);
+            InstallerException.internalError("Commiting SIF session failed with code " + err);
         }
         // Current session has been closed
         iSessionHandle = 0;
@@ -279,17 +248,13 @@
      */
     public void rollbackSession()
     {
-        if (0 == iSessionHandle)
-        {
-            InstallerException.internalError("No valid SIF session.");
-        }
-
+        checkSession();
         int err = _rollbackSession(iSessionHandle);
         // Session is closed always when rollback is called
         iSessionHandle = 0;
         if (err < 0)
         {
-            InstallerException.internalError("Rolling back the session failed with code " + err);
+            InstallerException.internalError("Rolling back SIF session failed with code " + err);
         }
         //Log.log("SifRegistrator session rolled back");
     }
@@ -305,7 +270,6 @@
         {
             return;
         }
-
         _closeSession(iSessionHandle);
         // Current session has been closed
         iSessionHandle = 0;
@@ -322,11 +286,7 @@
      */
     public ComponentId getComponentId(String aGlobalId)
     {
-        if (0 == iSessionHandle)
-        {
-            InstallerException.internalError("No valid SIF session.");
-        }
-
+        checkSession();
         ComponentId result = new ComponentId();
         int ret = _getComponentId(iSessionHandle, aGlobalId, result);
         if (-1 == ret)
@@ -354,11 +314,7 @@
      */
     public ComponentId getComponentId(Uid aAppUid)
     {
-        if (0 == iSessionHandle)
-        {
-            InstallerException.internalError("No valid SIF session.");
-        }
-
+        checkSession();
         ComponentId result = new ComponentId();
         int ret = _getComponentIdForApp(
                       iSessionHandle, ((PlatformUid)aAppUid).getIntValue(), result);
@@ -384,15 +340,12 @@
      */
     public void logComponent(String aGlobalId)
     {
-        if (0 == iSessionHandle)
-        {
-            InstallerException.internalError("No valid SIF session.");
-        }
-
+        checkSession();
         int ret = _logComponent(iSessionHandle, aGlobalId);
         if (ret < -1)
         {
-            Log.logError("SifRegistrator logComponent failed with code " + ret);
+            Log.logError("SifRegistrator logComponent for " + aGlobalId +
+                         " failed with code " + ret);
         }
     }
 
@@ -400,120 +353,19 @@
     /*** ----------------------------- PRIVATE ---------------------------- */
 
     /**
-     * Registers one Java application to S60 USIF as a component.
-     * Used with USIF Phase 1.
-     *
-     * @param aSuiteInfo Information needed to register the application
-     * @param aIndex index of the application in the suite
-     * @param aIsUpdate true in case of an update, false in case of a new
-     * installation
-     * @throws InstallerException if registration cannot done or
-     *  startSession has not been called successfully
-     * @see startSession
-     * @see SuiteInfo
+     * Checks if SifRegistrator session has been started.
+     * @throws InstallerException if SifRegistrator session has not been started
      */
-    private void registerComponent(
-        SuiteInfo aSuiteInfo, int aIndex, boolean aIsUpdate)
+    private void checkSession()
     {
-        String globalId = aSuiteInfo.getGlobalId(aIndex);
-        if (globalId == null)
-        {
-            Log.logWarning("SifRegistrator: Application with index " + aIndex +
-                           " not found from " + aSuiteInfo.getGlobalId());
-            return;
-        }
-        ApplicationInfo appInfo =
-            (ApplicationInfo)aSuiteInfo.getApplications().elementAt(aIndex);
-        String suiteName = aSuiteInfo.getName();
-        String vendor = aSuiteInfo.getVendor();
-        String version = aSuiteInfo.getVersion().toString();
-        String name = appInfo.getName();
-        int uid = ((PlatformUid)appInfo.getUid()).getIntValue();
-        String[] componentFiles = getComponentFiles(aSuiteInfo);
-        long componentSize = aSuiteInfo.getInitialSize();
-        String attrValue = aSuiteInfo.getAttributeValue("Nokia-MIDlet-Block-Uninstall");
-        boolean isRemovable = !(attrValue != null && attrValue.equalsIgnoreCase("true"));
-        boolean isDrmProtected = (aSuiteInfo.getContentInfo() == aSuiteInfo.CONTENT_INFO_DRM);
-        boolean isOriginVerified = aSuiteInfo.isTrusted();
-        String midletInfoUrl = aSuiteInfo.getAttributeValue("MIDlet-Info-URL");
-        String midletDescription = aSuiteInfo.getAttributeValue("MIDlet-Description");
-        String downloadUrl = aSuiteInfo.getAttributeValue("Nokia-MIDlet-Download-URL");
-        ComponentId componentId = new ComponentId();
-        int err = _registerComponent(
-                      iSessionHandle, uid,
-                      getScrString(suiteName), getScrString(vendor),
-                      getScrString(version), getScrString(name),
-                      getScrString(globalId), componentFiles,
-                      componentSize, isRemovable, isDrmProtected,
-                      isOriginVerified, aIsUpdate, aSuiteInfo.getMediaId(),
-                      getScrString(midletInfoUrl),
-                      getScrString(midletDescription),
-                      getScrString(downloadUrl),
-                      componentId);
-        if (err < 0)
+        if (iSessionHandle == 0)
         {
-            InstallerException.internalError(
-                "Registering component " + globalId +
-                " failed with code " + err);
-        }
-        else
-        {
-            appInfo.setComponentId(componentId);
-            Log.log("SifRegistrator registered component " + globalId +
-                    " with id " + componentId.getId());
-        }
-    }
-
-    /**
-     * Unregisters one Java application from being S60 USIF component.
-     * Used with USIF Phase 1.
-     *
-     * @param aSuiteInfo Information needed to unregister the application,
-     * @param aIndex index of the application in the suite
-     * @throws InstallerException if unregistration cannot done or
-     *  startSession has not been called successfully
-     * @see startSession
-     * @see SuiteInfo
-     */
-    private void unregisterComponent(SuiteInfo aSuiteInfo, int aIndex)
-    {
-        String globalId = aSuiteInfo.getGlobalId(aIndex);
-        if (globalId == null)
-        {
-            Log.logWarning("SifRegistrator: Application with index " + aIndex +
-                           " not found from " + aSuiteInfo.getGlobalId());
-            return;
-        }
-        ComponentId componentId = getComponentId(globalId);
-        if (componentId == null)
-        {
-            Log.logWarning(
-                "SifRegistrator unregistration failed, application " +
-                globalId + " does not exist");
-            return;
-        }
-        // Save component id to ApplicationInfo.
-        ApplicationInfo appInfo =
-            (ApplicationInfo)aSuiteInfo.getApplications().elementAt(aIndex);
-        appInfo.setComponentId(componentId);
-        // Unregister application.
-        int err = _unregisterComponent(iSessionHandle, componentId.getId());
-        if (err < 0)
-        {
-            InstallerException.internalError(
-                "Unregistering component " + globalId +
-                " failed with code " + err);
-        }
-        else
-        {
-            Log.log("SifRegistrator unregistered component " + globalId +
-                    " with id " + componentId.getId());
+            InstallerException.internalError("No valid SIF session.");
         }
     }
 
     /**
      * Registers Java application suite to S60 USIF as a component.
-     * Used with USIF Phase 2.
      *
      * @param aSuiteInfo Suite information
      * @param aIsUpdate true in case of an update, false in case of a new
@@ -529,7 +381,6 @@
         String suiteName = aSuiteInfo.getName();
         String vendor = aSuiteInfo.getVendor();
         String version = aSuiteInfo.getVersion().toString();
-        String name = null; // Set name to null so that suite name will be used.
         int uid = ((PlatformUid)aSuiteInfo.getUid()).getIntValue();
         String[] componentFiles = getComponentFiles(aSuiteInfo);
         long componentSize = aSuiteInfo.getInitialSize();
@@ -540,17 +391,20 @@
         String midletInfoUrl = aSuiteInfo.getAttributeValue("MIDlet-Info-URL");
         String midletDescription = aSuiteInfo.getAttributeValue("MIDlet-Description");
         String downloadUrl = aSuiteInfo.getAttributeValue("Nokia-MIDlet-Download-URL");
+        String updateUrl = aSuiteInfo.getAttributeValue("Nokia-Update");
         ComponentId componentId = new ComponentId();
         int err = _registerComponent(
                       iSessionHandle, uid,
                       getScrString(suiteName), getScrString(vendor),
-                      getScrString(version), getScrString(name),
-                      getScrString(globalId), componentFiles,
-                      componentSize, isRemovable, isDrmProtected,
-                      isOriginVerified, aIsUpdate, aSuiteInfo.getMediaId(),
+                      getScrString(version), getScrString(globalId),
+                      componentFiles, componentSize,
+                      isRemovable, isDrmProtected,
+                      isOriginVerified, aIsUpdate,
+                      aSuiteInfo.getMediaId(),
                       getScrString(midletInfoUrl),
                       getScrString(midletDescription),
                       getScrString(downloadUrl),
+                      getScrString(updateUrl),
                       componentId);
         if (err < 0)
         {
@@ -568,7 +422,6 @@
 
     /**
      * Unregisters Java application suite from being S60 USIF component.
-     * Used with USIF Phase 2.
      *
      * @param aSuiteInfo suite information
      * @throws InstallerException if unregistration cannot done or
@@ -610,7 +463,6 @@
      * from given SuiteInfo object. The SuiteInfo must already have
      * been registered to USIF as a component with registerComponent()
      * method before this method is called.
-     * Used with USIF Phase 2.
      *
      * @param aSuiteInfo information needed to register the application
      * @param aIndex index of the application in the suite
@@ -816,51 +668,41 @@
         // Register Domain-Category property.
         String protectionDomainProperty = "Domain-Category";
         String protectionDomainName = aSuite.getProtectionDomainName();
-        if (protectionDomainName != null)
+        err = _setLocalizedComponentProperty(
+            iSessionHandle, cid, protectionDomainProperty,
+            getProtectionDomainPropertyValue(protectionDomainName),
+            UNSPECIFIED_LOCALE);
+        if (err < 0)
         {
-            err = _setLocalizedComponentProperty(
-                iSessionHandle, cid, protectionDomainProperty,
-                getProtectionDomainPropertyValue(protectionDomainName),
-                UNSPECIFIED_LOCALE);
-            if (err < 0)
-            {
-                InstallerException.internalError(
-                    "Adding property " + protectionDomainProperty +
-                    " value " + protectionDomainName + " for component " +
-                    cid + " failed with code " + err);
-            }
-        }
-        else
-        {
-            Log.logWarning(
-                "SifRegistrator.registerLocalizedProperties: " +
-                protectionDomainProperty + " not set");
+            InstallerException.internalError(
+                "Adding property " + protectionDomainProperty +
+                " value " + protectionDomainName + " for component " +
+                cid + " failed with code " + err);
         }
     }
 
     /**
      * Returns the "Domain-Category" property value which contains
      * the text id and text file name for the localized domain category
-     * text.
+     * text. This method must never return null.
      */
     private String getProtectionDomainPropertyValue(String aProtectionDomain)
     {
-        String textId = null;
-        if (aProtectionDomain.equals("Manufacturer"))
-        {
-            textId = "txt_java_inst_setlabel_cert_domain_val_manufacturer";
-        }
-        else if (aProtectionDomain.equals("Operator"))
+        String textId = "txt_java_inst_setlabel_cert_domain_val_untrusted_third_party";
+        if (aProtectionDomain != null)
         {
-            textId = "txt_java_inst_setlabel_cert_domain_val_operator";
-        }
-        else if (aProtectionDomain.equals("IdentifiedThirdParty"))
-        {
-            textId = "txt_java_inst_setlabel_cert_domain_val_trusted_third_party";
-        }
-        else if (aProtectionDomain.equals("UnidentifiedThirdParty"))
-        {
-            textId = "txt_java_inst_setlabel_cert_domain_val_untrusted_third_party";
+            if (aProtectionDomain.equals("Manufacturer"))
+            {
+                textId = "txt_java_inst_setlabel_cert_domain_val_manufacturer";
+            }
+            else if (aProtectionDomain.equals("Operator"))
+            {
+                textId = "txt_java_inst_setlabel_cert_domain_val_operator";
+            }
+            else if (aProtectionDomain.equals("IdentifiedThirdParty"))
+            {
+                textId = "txt_java_inst_setlabel_cert_domain_val_trusted_third_party";
+            }
         }
         return textId + ",javaapplicationinstaller";
     }
@@ -894,6 +736,13 @@
                             "SifRegistrator ignored unknown locale: " +
                             name + ": " + localizedName);
                     }
+                    else if (localizedName.getName() == null ||
+                             localizedName.getName().length() == 0)
+                    {
+                        Log.logWarning(
+                            "SifRegistrator ignored empty localized text: " +
+                            name + ": " + localizedName);
+                    }
                     else
                     {
                         Log.log("SifRegistrator found localized text " +
@@ -1015,7 +864,6 @@
      * @param aSuiteName
      * @param aVendor
      * @param aVersion
-     * @param aName
      * @param aGlobalId
      * @param aComponentFiles
      * @param aComponentSize
@@ -1027,17 +875,19 @@
      * @param aMidletInfoUrl
      * @param aMidletDescription
      * @param aDownloadUrl
+     * @param aUpdateUrl
      * @param aComponentId upon successful execution contains the
      * component id for the registered component
      * @return 0 if registration succeeded or Symbian error code
      */
     private static native int _registerComponent(
         int aSessionHandle, int aUid, String aSuiteName, String aVendor,
-        String aVersion, String aName, String aGlobalId,
+        String aVersion, String aGlobalId,
         String[] aComponentFiles, long aComponentSize,
         boolean aIsRemovable, boolean aIsDrmProtected,
         boolean aIsOriginVerified, boolean aIsUpdate, int aMediaId,
-        String aMidletInfoUrl, String aMidletDescription, String aDownloadUrl,
+        String aMidletInfoUrl, String aMidletDescription,
+        String aDownloadUrl, String aUpdateUrl,
         ComponentId aComponentId);
 
     /**
@@ -1145,4 +995,9 @@
      * @return 1 if application data should be registered to USIF, 0 otherwise
      */
     private static native int _getUsifMode();
+
+    /**
+     * Returns SIF specific error category from given error id.
+     */
+    private static native int _getErrorCategory(int aErrorId);
 }
--- a/javamanager/javainstaller/installer/javasrc.s60/com/nokia/mj/impl/installer/utils/SysUtil.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc.s60/com/nokia/mj/impl/installer/utils/SysUtil.java	Wed Jun 23 18:07:10 2010 +0300
@@ -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"
@@ -359,11 +359,12 @@
                                              " drives failed with code " + ret);
         }
         // Save the drives so that next time they are not fetched again.
-        iUserVisibleDrives = new Vector();
+        Vector drivesVector = new Vector();
         for (int i = 0; i < aVisibleDrives.size(); i++)
         {
-            iUserVisibleDrives.addElement(aVisibleDrives.elementAt(i));
+            drivesVector.addElement(aVisibleDrives.elementAt(i));
         }
+        iUserVisibleDrives = drivesVector;
     }
 
     /**
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/GetComponentInfo.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/GetComponentInfo.java	Wed Jun 23 18:07:10 2010 +0300
@@ -480,6 +480,15 @@
                         suiteUid, null,
                         iSecurityAttributes.getAuthenticationAttributes());
 
+                if (authenticationCredentials != null)
+                {
+                    for (int i = 0; i < authenticationCredentials.length; i++)
+                    {
+                        String domain = authenticationCredentials[i]
+                            .getProtectionDomainCategory();
+                        Log.log("Protection domain: " + domain);
+                    }
+                }
                 if (iJarFilename != null)
                 {
                     // Authenticate jar.
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/InstallationNotifier.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/InstallationNotifier.java	Wed Jun 23 18:07:10 2010 +0300
@@ -241,10 +241,8 @@
         Log.log("InstallationNotifier.set: progress " + currentPercentage);
         defineProperties();
 
-        if (aCurrentValue == 0 ||
-                aCurrentValue == iMaxValue ||
-                aCurrentValue >= iLastPropertyUpdate + iPropertyProgressStep ||
-                aCurrentValue <= iLastPropertyUpdate - iPropertyProgressStep)
+        if (isUpdateNeeded(aCurrentValue, iMaxValue,
+                           iLastPropertyUpdate, iPropertyProgressStep))
         {
             iLastPropertyUpdate = aCurrentValue;
             Log.log("InstallationNotifier.set: update property to " +
@@ -256,10 +254,8 @@
              currentPercentage);
         }
 
-        if (aCurrentValue == 0 ||
-                aCurrentValue == iMaxValue ||
-                aCurrentValue >= iLastUiUpdate + iUiProgressStep ||
-                aCurrentValue <= iLastUiUpdate - iUiProgressStep)
+        if (isUpdateNeeded(aCurrentValue, iMaxValue,
+                           iLastUiUpdate, iUiProgressStep))
         {
             iLastUiUpdate = aCurrentValue;
             if (iInstallerUi != null)
@@ -380,4 +376,24 @@
                 "InstallationNotifier: Deleting property failed", ex);
         }
     }
+
+    /**
+     * Returns true if progress update is needed, false otherwise.
+     *
+     * @param aCurrent current progress value
+     * @param aMax maximum progress value
+     * @param aPrevious previously updated progress value
+     * @param aStep step between progress updates
+     */
+    private static boolean isUpdateNeeded(
+        int aCurrent, int aMax, int aPrevious, int aStep)
+    {
+        if (aCurrent == 0 || aCurrent == aMax ||
+            aCurrent >= aPrevious + aStep ||
+            aCurrent <= aPrevious - aStep)
+        {
+            return true;
+        }
+        return false;
+    }
 }
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/Installer.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/Installer.java	Wed Jun 23 18:07:10 2010 +0300
@@ -99,6 +99,11 @@
      */
     static final int RET_NO_SYSTEM_EXIT = 100;
 
+    /** Id for installer cancel Comms message. */
+    private static final int INSTALLER_CANCEL_MESSAGE_ID = 603;
+    /** Id for installer cancel Comms response message. */
+    private static final int INSTALLER_CANCEL_RESPONSE_MESSAGE_ID = 604;
+
     // ThreadDumper instance.
     private static ThreadDumper iThreadDumper = null;
 
@@ -1235,6 +1240,8 @@
             "  -commsresult=endpoint         In the end of operation, send\n"+
             "                                InstallerResultMessage to specified comms\n"+
             "                                endpoint.\n"+
+            "  -base64=base64options         Comma separated list of base64 encoded\n"+
+            "                                options.\n"+
             "\n"+
             "Either -jad or -jar must be specified, other options are optional.\n";
 
@@ -1264,10 +1271,13 @@
             "  -captainmsgs=yes|no           If set to no, JavaInstaller will not send\n"+
             "                                any messages to JavaCaptain during\n"+
             "                                uninstallation. Default is yes.\n"+
+            "  -resetpreinstall              Reset preinstall state.\n"+
             "  -skipotastatus                Skip OTA status handling.\n"+
             "  -commsresult=endpoint         In the end of operation, send\n"+
             "                                InstallerResultMessage to specified comms\n"+
             "                                endpoint.\n"+
+            "  -base64=base64options         Comma separated list of base64 encoded\n"+
+            "                                options.\n"+
             "\n"+
             "The -uid option must be specified, other options are optional.\n";
 
@@ -1466,7 +1476,7 @@
                 if (aMessage.hasPermission(CommsPermission.INSTALL_APPLICATION))
                 {
                     int msgId = aMessage.getMessageId();
-                    if (msgId == 603)
+                    if (msgId == INSTALLER_CANCEL_MESSAGE_ID)
                     {
                         Installer.cancel();
                         result = ERR_NONE;
@@ -1479,7 +1489,7 @@
                 }
                 CommsMessage response = new CommsMessage();
                 response.replyTo(aMessage);
-                response.setMessageId(604);
+                response.setMessageId(INSTALLER_CANCEL_RESPONSE_MESSAGE_ID);
                 response.write(result);
                 iInstallerServer.send(response);
                 Log.log("InstallerListener sent " + response);
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/InstallerResultMessage.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/InstallerResultMessage.java	Wed Jun 23 18:07:10 2010 +0300
@@ -21,6 +21,7 @@
 import com.nokia.mj.impl.comms.CommsEndpoint;
 import com.nokia.mj.impl.comms.CommsMessage;
 import com.nokia.mj.impl.installer.applicationregistrator.SifNotifier;
+import com.nokia.mj.impl.installer.applicationregistrator.SifRegistrator;
 import com.nokia.mj.impl.installer.storagehandler.ApplicationInfo;
 import com.nokia.mj.impl.installer.storagehandler.SuiteInfo;
 import com.nokia.mj.impl.installer.utils.InstallerException;
@@ -37,30 +38,77 @@
 
 /**
  * InstallerResultMessage contains information about install, uninstall
- * and componentinfo operations. It is sent to Comms endpoint specified
- * at JavaInstaller startup.
+ * and componentinfo operation results. JavaInstaller sends it at the end
+ * of operation to Comms endpoint specified at JavaInstaller startup with
+ * -commsresult option.
+ * <p>
+ * InstallerResultMessage contains name-value pairs: name is a string,
+ * value can be either a string or an int. Message syntax:
+ * <p>
+ * <pre>
+ * message := length named_int_value* length named_string_value*
+ * named_int_value := name int_value
+ * named_string_value := name string_value
+ * name := &lt;string&gt;
+ * int_value := &lt;int&gt;
+ * string_value := &lt;string&gt;
+ * length := &lt;int telling the length of the table that follows&gt;
+ * </pre>
+ * <p>
  */
 public class InstallerResultMessage
 {
+    /** Operation type. Value type: int.
+        Possible values: 0: install, 1: uninstall, 2: componentinfo. */
     public static final String NAME_OPERATION = "operation";
+    /** Status code indicating operation result. Value type: int. */
     public static final String NAME_RESULT = "result";
+    /** SIF error category. Value type: int. */
     public static final String NAME_ERROR_CATEGORY = "error-category";
+    /** Java runtime specific error code. Value type: int. */
+    public static final String NAME_ERROR_CODE = "error-code";
+    /** Localized error message. Value type: string. */
     public static final String NAME_ERROR_MSG = "error-message";
+    /** Localized message with more details of the error reason. Value type: string. */
     public static final String NAME_ERROR_DETAILS = "error-details";
+    /** Suite UID. Value type: int. */
     public static final String NAME_SUITE_UID = "suite-uid";
+    /** Midlet-n UID. Value type: int. */
     public static final String NAME_MIDLET_UID = "midlet-uid-";
+    /** Suite component id. Value type: int. */
     public static final String NAME_SUITE_CID = "suite-cid";
+    /** Midlet-n component id. Value type: int. */
     public static final String NAME_MIDLET_CID = "midlet-cid-";
+    /** Suite global id. Value type: string. */
     public static final String NAME_SUITE_GID = "suite-gid";
+    /** Midlet-n global id. Value type: string. */
     public static final String NAME_MIDLET_GID = "midlet-gid-";
+    /** Suite name. Value type: string. */
     public static final String NAME_SUITE_NAME = "suite-name";
+    /** Midlet-n name. Value type: string. */
     public static final String NAME_MIDLET_NAME=  "midlet-name-";
+    /** Suite vendor. Value type: string. */
     public static final String NAME_VENDOR = "vendor";
+    /** Suite version. Value type: string. */
     public static final String NAME_VERSION = "version";
+    /** Component installation status. Value type: int. Possible values:
+        0: new component,
+        1: upgrade,
+        2: already installed,
+        3: newer version already installed,
+        4: invalid package, cannot be installed. */
     public static final String NAME_INSTALL_STATUS = "install-status";
+    /** Component authenticity. Value type: int. Possible values:
+        0: component is not authenticated, 1: component is authenticated. */
     public static final String NAME_AUTHENTICITY = "authenticity";
+    /** Size of the files owned by the component at the time of the
+        installation. Calculated from MIDlet-Data-Size and
+        MIDlet-Jar-Size attributes. Value type: int. */
     public static final String NAME_COMPONENT_SIZE = "component-size";
 
+    /** Id for installer result Comms message. */
+    private static final int INSTALLER_RESULT_MESSAGE_ID = 601;
+
     private Hashtable iNamedIntValues = null;
     private Hashtable iNamedStringValues = null;
 
@@ -165,7 +213,7 @@
             {
                 addValue(NAME_ERROR_DETAILS, msg);
             }
-            addErrorCategory(eb);
+            addErrorCodes(eb);
         }
         if (aException instanceof InstallerException)
         {
@@ -193,25 +241,24 @@
     }
 
     /**
-     * Get a string value from this message.
-     * @throws IllegalArgumentException if value with given name is not found
+     * Returns a string value from this message, or null
+     * if string value is not present.
      */
-    public String getStringValue(String aName)
+    String getStringValue(String aName)
     {
         Object value = iNamedStringValues.get(aName);
         if (value instanceof String)
         {
             return (String)value;
         }
-        throw new IllegalArgumentException(
-            "InstallerResultMessage: string value " + aName + " not found");
+        return null;
     }
 
     /**
      * Get an int value from this message.
      * @throws IllegalArgumentException if value with given name is not found
      */
-    public int getIntValue(String aName)
+    int getIntValue(String aName)
     {
         Object value = iNamedIntValues.get(aName);
         if (value instanceof Integer)
@@ -225,7 +272,7 @@
     /**
      * Removes a value from this message.
      */
-    public void removeValue(String aName)
+    void removeValue(String aName)
     {
         iNamedStringValues.remove(aName);
         iNamedIntValues.remove(aName);
@@ -255,19 +302,20 @@
         }
         if (iSifNotifier != null)
         {
-            int errCategory = 0;
-            int errCode = 0;
-            String errMsg = null;
-            String errDetails = null;
-            if (getIntValue(NAME_RESULT) != Installer.ERR_NONE)
-            {
-                errCategory = getIntValue(NAME_ERROR_CATEGORY);
-                errCode = Installer.ERR_GENERAL;
-                errMsg = getStringValue(NAME_ERROR_MSG);
-                errDetails = getStringValue(NAME_ERROR_DETAILS);
-            }
             try
             {
+                int result = getIntValue(NAME_RESULT);
+                int errCategory = 0;
+                int errCode = 0;
+                String errMsg = null;
+                String errDetails = null;
+                if (result != Installer.ERR_NONE)
+                {
+                    errCategory = getIntValue(NAME_ERROR_CATEGORY);
+                    errCode = getIntValue(NAME_ERROR_CODE);
+                    errMsg = getStringValue(NAME_ERROR_MSG);
+                    errDetails = getStringValue(NAME_ERROR_DETAILS);
+                }
                 iSifNotifier.notifyEnd(errCategory, errCode, errMsg, errDetails);
             }
             catch (Throwable t)
@@ -298,7 +346,7 @@
         {
             comms.connect(aEndpoint);
             CommsMessage msg = new CommsMessage();
-            msg.setMessageId(601);
+            msg.setMessageId(INSTALLER_RESULT_MESSAGE_ID);
             // Initialise the message data.
             msg.write(iNamedIntValues.size());
             Enumeration e = iNamedIntValues.keys();
@@ -318,7 +366,7 @@
             }
             // Send the message.
             Log.log("Sending InstallerResultMessage to " + aEndpoint);
-            CommsMessage installerResultResponse = comms.sendReceive(msg, 5);
+            comms.sendReceive(msg, 5);
             comms.disconnect();
             Log.log("Received InstallerResultResponse from " + aEndpoint);
         }
@@ -385,48 +433,13 @@
     }
 
     /**
-     * Adds error category to the result message.
+     * Adds error codes to the result message.
      */
-    private void addErrorCategory(ExceptionBase aEb)
+    private void addErrorCodes(ExceptionBase aEb)
     {
-        switch (aEb.getShortMessageId())
-        {
-        case InstallerErrorMessage.INST_NO_MEM:
-            addValue(NAME_ERROR_CATEGORY, 2); // ELowDiskSpace
-            break;
-        case InstallerErrorMessage.INST_NO_NET:
-            addValue(NAME_ERROR_CATEGORY, 3); // ENetworkUnavailable
-            break;
-        case InstallerErrorMessage.INST_CORRUPT_PKG:
-            addValue(NAME_ERROR_CATEGORY, 5); // ECorruptedPackage
-            break;
-        case InstallerErrorMessage.INST_COMPAT_ERR:
-            addValue(NAME_ERROR_CATEGORY, 6); // EApplicationNotCompatible
-            break;
-        case InstallerErrorMessage.INST_AUTHORIZATION_ERR:
-            // fall through
-        case InstallerErrorMessage.INST_AUTHENTICATION_ERR:
-            addValue(NAME_ERROR_CATEGORY, 7); // ESecurityError
-            break;
-        case InstallerErrorMessage.INST_PUSH_REG_ERR:
-            // fall through
-        case InstallerErrorMessage.INST_UNEXPECTED_ERR:
-            // fall through
-        case InstallerErrorMessage.UNINST_UNEXPECTED_ERR:
-            // fall through
-        case InstallerErrorMessage.OTHER_UNEXPECTED_ERR:
-            addValue(NAME_ERROR_CATEGORY, 8); // EUnexpectedError
-            break;
-        case InstallerErrorMessage.INST_CANCEL:
-            // fall through
-        case InstallerErrorMessage.UNINST_CANCEL:
-            addValue(NAME_ERROR_CATEGORY, 9); // EUserCancelled
-            break;
-        case InstallerErrorMessage.UNINST_NOT_ALLOWED:
-            addValue(NAME_ERROR_CATEGORY, 10); // EUninstallationBlocked
-            break;
-        default:
-            addValue(NAME_ERROR_CATEGORY, 8); // EUnexpectedError
-        }
+        addValue(NAME_ERROR_CATEGORY,
+                 SifRegistrator.getErrorCategory(aEb.getShortMessageId()));
+        addValue(NAME_ERROR_CODE,
+                 aEb.getShortMessageId()*1000 + aEb.getDetailedMessageId());
     }
 }
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/CheckJarPackages.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/CheckJarPackages.java	Wed Jun 23 18:07:10 2010 +0300
@@ -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"
@@ -73,7 +73,7 @@
         // Application touch support detection is not needed
         // if Nokia-MIDlet-On-Screen-Keypad has been defined.
         boolean touchDetection = true;
-        if (ball.getAttributeValue("Nokia-MIDlet-On-Screen-Keypad") != null)
+        if (ball.iSuite.getOnScreenKeypad() != SuiteInfo.OSK_UNDEFINED)
         {
             touchDetection = false;
         }
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/FinalizeInstallation.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/FinalizeInstallation.java	Wed Jun 23 18:07:10 2010 +0300
@@ -304,7 +304,14 @@
 
                 if (ball.iSifRegistrator.getSifMode() > 0 && launchApp)
                 {
-                    ball.iSifRegistrator.launchAppView();
+                    ball.getInstallerUi().syncExec(new Runnable()
+                    {
+                        // launchAppView() must be called in the UI thread.
+                        public void run()
+                        {
+                            ball.iSifRegistrator.launchAppView();
+                        }
+                    });
                 }
                 else
                 if (ball.iCaptainMsgs && launchApp &&
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/HandleCustomAttributes.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/HandleCustomAttributes.java	Wed Jun 23 18:07:10 2010 +0300
@@ -56,7 +56,7 @@
     {
         if (aBall.iApplicationRegistrator.isOnDeviceKeypadNeeded())
         {
-            // default value when on-screen-keypad is needed
+            // Default value when on-screen-keypad is needed.
             aBall.iSuite.setOnScreenKeypad(SuiteInfo.OSK_GAMEACTIONS);
 
             String attrName = "Nokia-MIDlet-On-Screen-Keypad";
@@ -77,13 +77,16 @@
                 }
                 else
                 {
-                    Log.logWarning("Invalid " + attrName + " value " + attrValue);
+                    // Ignore on-screen-keypad attribute with invalid value.
+                    aBall.iSuite.setOnScreenKeypad(SuiteInfo.OSK_UNDEFINED);
+                    Log.logWarning("Ignoring invalid " + attrName +
+                                   " value " + attrValue);
                 }
             }
         }
         else
         {
-            // If the device does not need on-screen-keypad, the value is not set at all
+            // If the device does not need on-screen-keypad, the value is not set at all.
             aBall.iSuite.setOnScreenKeypad(SuiteInfo.OSK_UNDEFINED);
         }
 
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/StartProgressNotifications.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/StartProgressNotifications.java	Wed Jun 23 18:07:10 2010 +0300
@@ -99,7 +99,7 @@
         }
         catch (Throwable t)
         {
-            Log.logError("StartProgressNotifications: SifNotifier.notifyStart failed", t);
+            Log.log("StartProgressNotifications: SifNotifier.notifyStart failed", t);
             try
             {
                 ball.iSifNotifier.destroy();
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/uninstall/steps/GetFromStorage.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/uninstall/steps/GetFromStorage.java	Wed Jun 23 18:07:10 2010 +0300
@@ -54,6 +54,15 @@
         // Check if debug attribute has been defined for this suite.
         ball.setDebug(ball.iSuite.getAttributeValue("Nokia-MIDlet-Install-Debug"));
 
+        // Check from arguments if preinstall state should be reset.
+        String arg = ball.iArgs.get("resetpreinstall");
+        if (arg != null)
+        {
+            ball.iSuite.setResetPreinstall(true);
+            ball.log("ResetPreinstall set");
+        }
+
+
         // Log all suite info.
         //ball.log(ball.iSuite.toString());
     }
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/storagehandler/StorageHandler.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/storagehandler/StorageHandler.java	Wed Jun 23 18:07:10 2010 +0300
@@ -925,13 +925,23 @@
         }
         else
         {
-            // Not an update ==> user is making uninstallation.
+            // Not an update ==> suite is being uninstalled.
             int oldPreinstallState = readPreinstallState(aSuiteInfo);
             if (oldPreinstallState == aSuiteInfo.STATE_PREINSTALLED)
             {
-                // User is uninstalling a preinstalled application,
-                // set preinstall state to STATE_NO_PREINSTALL.
-                setNoPreinstallState(aSuiteInfo);
+                if (aSuiteInfo.getResetPreinstall())
+                {
+                    // Preinstallation state should be reset,
+                    // remove existing data from
+                    // StorageNames.PREINSTALL_TABLE table.
+                    removePreinstallState(aSuiteInfo);
+                }
+                else
+                {
+                    // User is uninstalling a preinstalled application,
+                    // set preinstall state to STATE_NO_PREINSTALL.
+                    setNoPreinstallState(aSuiteInfo);
+                }
             }
             else if (oldPreinstallState == aSuiteInfo.STATE_INSTALLED)
             {
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/storagehandler/SuiteInfo.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/storagehandler/SuiteInfo.java	Wed Jun 23 18:07:10 2010 +0300
@@ -73,6 +73,9 @@
     private String iAccessPoint = null;
     // Flag telling if application suite is trusted
     private boolean iTrusted = false;
+    // Flag telling if preinstallation state should be
+    // reseted in uninstallation.
+    private boolean iResetPreinstall = false;
 
     /** Flag telling if default icon should be used. */
     private boolean iUseDefaultIcon = false;
@@ -783,6 +786,24 @@
     }
 
     /**
+     * Get the flag telling if preinstallation state should be reset.
+     * Used only in uninstallation.
+     */
+    public boolean getResetPreinstall()
+    {
+        return iResetPreinstall;
+    }
+
+    /**
+     * Set the flag telling if preinstallation state should be reset.
+     * Used only in uninstallation.
+     */
+    public void setResetPreinstall(boolean aResetPreinstall)
+    {
+        iResetPreinstall = aResetPreinstall;
+    }
+
+    /**
      * Calculates initial size from MIDlet-Data-Size and
      * MIDlet-Jar-Size attributes, or if they are not present
      * from jar file size.
@@ -865,6 +886,7 @@
         buf.append("  MediaId: ").append(getMediaId()).append("\n");
         buf.append("  InitialSize: ").append(getInitialSize()).append("\n");
         buf.append("  PreinstallState: ").append(iPreinstallState).append("\n");
+        buf.append("  ResetPreinstall: ").append(getResetPreinstall()).append("\n");
         buf.append("  OnScreenKeypad: ").append(getOnScreenKeypad()).append("\n");
         buf.append("  ConvertedIcon: ").append(getConvertedIconPath()).append("\n");
         buf.append("  Group: ").append(getInstallationGroup()).append("\n");
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/utils/Args.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/utils/Args.java	Wed Jun 23 18:07:10 2010 +0300
@@ -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,6 +20,7 @@
 
 import com.nokia.mj.impl.installer.utils.InstallerException;
 import com.nokia.mj.impl.installer.utils.Log;
+import com.nokia.mj.impl.utils.Base64;
 import com.nokia.mj.impl.utils.Tokenizer;
 
 import java.util.Hashtable;
@@ -59,6 +60,7 @@
                 //Log.log("Args: " + arg + "=" + value);
             }
         }
+        decodeBase64Args();
     }
 
     /**
@@ -203,7 +205,55 @@
             }
             drive = aDrive.toLowerCase().charAt(0) - 'a';
         }
-        Log.log("Parsed drive " + aDrive + " --> " + drive);
+        Log.log("Args: Parsed drive " + aDrive + " --> " + drive);
         return drive;
     }
+
+    /**
+     * Decodes base64 encoded arguments.
+     */
+    private void decodeBase64Args()
+    {
+        String base64Value = get("base64");
+        if (base64Value == null || base64Value.length() == 0)
+        {
+            return;
+        }
+        String[] tokens = Tokenizer.split(base64Value, ",");
+        String name = null;
+        String value = null;
+        for (int i = 0; i < tokens.length; i++)
+        {
+            name = tokens[i];
+            value = null;
+            if (name != null && name.length() > 0)
+            {
+                value = get(name);
+            }
+            if (value != null && value.length() > 0)
+            {
+                try
+                {
+                    byte[] valueBytes = Base64.decode(value);
+                    if (valueBytes != null && valueBytes.length > 0)
+                    {
+                        value = new String(valueBytes, "UTF-16");
+                        Log.log("Args: Base64 decoded option " +
+                                name + "=" + value);
+                        iArgs.put(name, value);
+                    }
+                    else
+                    {
+                        Log.logError("Args: Base64 decoding failed for " +
+                                     name + "=" + value);
+                    }
+                }
+                catch (Throwable t)
+                {
+                    Log.logError("Args: Base64 decoding failed for " +
+                                 name + "=" + value, t);
+                }
+            }
+        }
+    }
 }
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/utils/AutoStartPermission.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/utils/AutoStartPermission.java	Wed Jun 23 18:07:10 2010 +0300
@@ -67,7 +67,7 @@
      */
     public String toString()
     {
-        return "javax.microedition.midlet.AutoStartPermission";
+        return "AutoStartPermission";
     }
     
     /**
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/rt/installer/ApplicationUtilsImpl.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/rt/installer/ApplicationUtilsImpl.java	Wed Jun 23 18:07:10 2010 +0300
@@ -112,7 +112,7 @@
 
         boolean userPromptAllowed = false;
         if (aPermission.toString().equals(
-                    "javax.microedition.io.PushRegistryPermission"))
+                    "javax.microedition.io.PushRegistry"))
         {
             // PushRegistryPermission is the only permission which
             // must be prompted from the user during installation.
--- a/javamanager/javainstaller/installer/src.s60/applicationregistrator/applicationregistrator.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/src.s60/applicationregistrator/applicationregistrator.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -51,6 +51,7 @@
 // NAMESPACE DECLARATION
 using namespace java;
 
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 /**
  * MIDP Stub SIS file UID. The application type Uid for MIDlets in S60
  */
@@ -80,14 +81,6 @@
                           jboolean aBackground);
 
 /**
- * Internal helper method for checking whether Application Shell is already running
- * Used JNI method ...1startAppShellUi
- *
- * @return ETrue if AppShell is running
- */
-TBool isAppShellUiRunning();
-
-/**
  * Internal helper method for checking whether this code is executing in
  * a device that has correctly working version of
  * RApaLsSession::ForceCommitNonNativeApplicationsUpdatesL()
@@ -95,6 +88,15 @@
  * @return ETrue if force commit works well
  */
 TBool isForceCommitSupported();
+#endif // !SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+
+/**
+ * Internal helper method for checking whether Application Shell is already running
+ * Used JNI method ...1startAppShellUi
+ *
+ * @return ETrue if AppShell is running
+ */
+TBool isAppShellUiRunning();
 
 /**
  * Internal helper method for starting menu application
@@ -129,7 +131,7 @@
         return err;
     }
 
-#ifndef RD_JAVA_USIF_APP_REG
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
     // Delete any pending (un)registrations (possible if
     // e.g. device rebooted before commit).
     // This call does nothing if there is no pending registrations.
@@ -144,7 +146,7 @@
         pApaSession->Close();
         return err;
     }
-#endif // RD_JAVA_USIF_APP_REG
+#endif // !SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 
     // Return handle to session. Utilize the fact that in Symbian
     // all pointer addresses are MOD 4 so the last 2 bits are 0
@@ -168,7 +170,7 @@
  * @param[in] aBackground
  * @return 0 if registration succeeded or Symbian error code
  */
-#ifdef RD_JAVA_USIF_APP_REG
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_ApplicationRegistrator__1registerApplication
 (JNIEnv */*aEnv*/, jclass /*aClass*/, jint /*aSessionHandle*/, jint /*aUid*/, jstring /*aGroupName*/,
  jstring /*aMIDletName*/, jstring /*aTargetDrive*/, jstring /*aIconFileName*/,
@@ -176,7 +178,7 @@
 {
     return KErrNone;
 }
-#else
+#else // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_ApplicationRegistrator__1registerApplication
 (JNIEnv *aEnv, jclass aClass, jint aSessionHandle, jint aUid, jstring aGroupName,
  jstring aMIDletName, jstring aTargetDrive, jstring aIconFileName,
@@ -343,7 +345,6 @@
 
     return err;
 }
-#endif // RD_JAVA_USIF_APP_REG
 
 
 /**
@@ -475,6 +476,7 @@
 
     return err;
 }
+#endif // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 
 
 /**
@@ -484,13 +486,13 @@
  * @param[in] aUid The Uid of the application to be unregistered..
  * @return 0 if unregistration succeeded or Symbian error code
  */
-#ifdef RD_JAVA_USIF_APP_REG
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_ApplicationRegistrator__1unregisterApplication
 (JNIEnv *, jclass, jint /*aSessionHandle*/, jint /*aUid*/)
 {
     return KErrNone;
 }
-#else
+#else // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_ApplicationRegistrator__1unregisterApplication
 (JNIEnv *, jclass, jint aSessionHandle, jint aUid)
 {
@@ -503,7 +505,7 @@
     TRAPD(err, pApaSession->DeregisterNonNativeApplicationL(appUid));
     return err;
 }
-#endif // RD_JAVA_USIF_APP_REG
+#endif // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 
 
 /**
@@ -524,7 +526,7 @@
 
     TInt err = KErrNone;
 
-#ifndef RD_JAVA_USIF_APP_REG
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
     if (aSynchronous)
     {
         // Make synchronous commit
@@ -552,12 +554,12 @@
         // Use always this synchronous commit when running in emulator
         // to make writing autotest cases easier.
         TRAP(err, pApaSession->CommitNonNativeApplicationsUpdatesL());
-#else
+#else // __WINS__
         // asynchronous commit
         TRAP(err, pApaSession->ForceCommitNonNativeApplicationsUpdatesL());
 #endif // __WINS__
     }
-#endif // RD_JAVA_USIF_APP_REG
+#endif // !SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 
     if (KErrNone == err)
     {
@@ -582,9 +584,9 @@
         reinterpret_cast<RApaLsSession*>(aSessionHandle<<2);
 
     TInt err = KErrNone;
-#ifndef RD_JAVA_USIF_APP_REG
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
     err = pApaSession->RollbackNonNativeApplicationsUpdates();
-#endif // RD_JAVA_USIF_APP_REG
+#endif // !SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
     pApaSession->Close();
     delete pApaSession;
 
@@ -925,6 +927,7 @@
 }
 
 
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 /**
  * Internal helper method for checking whether this code is executing in
  * a device that has correctly working version of
@@ -969,3 +972,4 @@
         return EFalse;
     }
 }
+#endif // !SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
--- a/javamanager/javainstaller/installer/src.s60/applicationregistrator/sifnotifier.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/src.s60/applicationregistrator/sifnotifier.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -21,21 +21,11 @@
 #include "javasymbianoslayer.h" // for CleanupResetAndDestroyPushL
 #include "logger.h"
 
-#if defined(SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK) && defined(RD_JAVA_USIF_NOTIFY_PROGRESS)
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 
 #include <usif/sif/sifnotification.h>
 #include <usif/usifcommon.h>
 
-// Helper macro for logging a TDesC.
-#define LOG_TDESC_L(compIdParam, logLevelParam, msgParam, tdescParam) \
-    {                                                               \
-        HBufC8* tdescBuf = HBufC8::NewLC(tdescParam.Length() + 1);  \
-        TPtr8 tdescPtr(tdescBuf->Des());                            \
-        tdescPtr.Append(tdescParam);                                \
-        LOG1(compIdParam, logLevelParam, msgParam, tdescPtr.PtrZ());\
-        CleanupStack::PopAndDestroy(tdescBuf);                      \
-    }
-
 // NAMESPACE DECLARATION
 using namespace java;
 using namespace Usif;
@@ -306,7 +296,7 @@
     return KErrNone;
 }
 
-#else // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK && RD_JAVA_USIF_NOTIFY_PROGRESS
+#else // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 
 /*
  * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifNotifier
@@ -390,4 +380,4 @@
     return KErrNone;
 }
 
-#endif // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK && RD_JAVA_USIF_NOTIFY_PROGRESS
+#endif // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
--- a/javamanager/javainstaller/installer/src.s60/applicationregistrator/sifregistrator.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/src.s60/applicationregistrator/sifregistrator.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -24,6 +24,7 @@
 #include <w32std.h>
 
 #include "com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator.h"
+#include "com_nokia_mj_impl_utils_InstallerErrorMessage.h"
 #include "javacommonutils.h"
 #include "javasymbianoslayer.h" // for CleanupResetAndDestroyPushL
 #include "logger.h"
@@ -33,19 +34,15 @@
 
 #include <usif/scr/scr.h>
 #include <usif/scr/screntries.h>
-#ifdef RD_JAVA_USIF_APP_REG
 #include <usif/scr/appreginfo.h>
-#endif // RD_JAVA_USIF_APP_REG
+#include <usif/usiferror.h>
 #include <xqappmgr.h>
 
 // Helper macro for logging a TDesC.
 #define LOG_TDESC_L(compIdParam, logLevelParam, msgParam, tdescParam) \
-    {                                                               \
-        HBufC8* tdescBuf = HBufC8::NewLC(tdescParam.Length() + 1);  \
-        TPtr8 tdescPtr(tdescBuf->Des());                            \
-        tdescPtr.Append(tdescParam);                                \
-        LOG1(compIdParam, logLevelParam, msgParam, tdescPtr.PtrZ());\
-        CleanupStack::PopAndDestroy(tdescBuf);                      \
+    {                                                                 \
+        std::wstring ws((wchar_t*)tdescParam.Ptr(), tdescParam.Length()); \
+        LOG1(compIdParam, logLevelParam, msgParam, ws.c_str());       \
     }
 
 // NAMESPACE DECLARATION
@@ -55,21 +52,19 @@
 IMPORT_C HBufC* CreateHBufCFromJavaStringLC(JNIEnv* aEnv, jstring aString);
 
 // Properties registered to SCR.
-_LIT(KMIDletName, "MIDlet-Name");
 _LIT(KUid, "Uid");
 _LIT(KMediaId, "Media-Id");
 _LIT(KMIDletInfoURL, "MIDlet-Info-URL");
 _LIT(KMIDletDescription, "MIDlet-Description");
 _LIT(KDownloadURL, "Download-URL");
+_LIT(KUpdateURL, "Update-URL");
 _LIT(KSettingsPlugin, "SettingsName");
 _LIT(KSettingsPluginValue, "javaapplicationsettingsview");
 
-#ifdef RD_JAVA_USIF_APP_REG
 // Symbian file path separator.
 _LIT(KPathSeperator, "\\");
 // Postfix for the fake application name generated for AppArc.
 _LIT(KAppPostfix, ".fakeapp");
-#endif // RD_JAVA_USIF_APP_REG
 
 /**
  * Internal helper method for checking if specified application
@@ -179,7 +174,6 @@
  * See JNI method __1notifyAppChange.
  * This method makes calls that may leave (the actual registering).
  */
-#ifdef RD_JAVA_USIF_NOTIFY_APP_ARC
 void NotifyAppChangeL(JNIEnv *aEnv, jintArray aAppUids, jint aAppChange)
 {
     RApaLsSession apaSession;
@@ -212,11 +206,6 @@
     CleanupStack::PopAndDestroy(&apaSession);
     LOG(EJavaInstaller, EInfo, "NotifyAppChangeL completed");
 }
-#else
-void NotifyAppChangeL(JNIEnv *, jintArray, jint)
-{
-}
-#endif // RD_JAVA_USIF_NOTIFY_APP_ARC
 
 /*
  * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
@@ -227,12 +216,6 @@
 (JNIEnv *aEnv, jclass, jintArray aAppUids, jint aAppChange)
 {
     TRAPD(err, NotifyAppChangeL(aEnv, aAppUids, aAppChange));
-    if (KErrNone != err)
-    {
-        ELOG1(EJavaInstaller,
-              "notifyAppChange: notifying AppArc failed, error %d",
-              err);
-    }
     return err;
 }
 
@@ -257,14 +240,21 @@
     QUrl openRecentView("appto://20022F35?activityname=AppLibRecentView");
     XQApplicationManager applicationManager;
     XQAiwRequest *request = applicationManager.create(openRecentView);
-    if (request) {
+    if (request)
+    {
+        LOG(EJavaInstaller, EInfo, "launchAppView: launching AppLib");
         bool result = request->send();
-        if (!result) {
+        if (!result)
+        {
             int error = request->lastError();
             ELOG1(EJavaInstaller,
                   "launchAppView: launching AppLib failed, error %d", error);
             err = KErrGeneral;
         }
+        else
+        {
+            LOG(EJavaInstaller, EInfo, "launchAppView: launching AppLib succeeded");
+        }
         delete request;
     }
 
@@ -354,12 +344,6 @@
     TRAPD(err, pScr->RollbackTransactionL());
     pScr->Close();
     delete pScr;
-    if (KErrNone != err)
-    {
-        ELOG1(EJavaInstaller,
-              "rollbackSession: Rolling back transaction failed, error %d",
-              err);
-    }
     return err;
 }
 
@@ -389,9 +373,9 @@
         HBufC *valueBuf = CreateHBufCFromJavaStringLC(aEnv, aValue);
         aScr->SetComponentPropertyL(aComponentId, aName, *valueBuf);
         //LOG_TDESC_L(EJavaInstaller, EInfo,
-        //            "SetComponentPropertyL: name %s", aName);
+        //            "SetComponentPropertyL: name %S", aName);
         //LOG_TDESC_L(EJavaInstaller, EInfo,
-        //            "SetComponentPropertyL: value %s", valueBuf->Des());
+        //            "SetComponentPropertyL: value %S", valueBuf->Des());
         CleanupStack::PopAndDestroy(valueBuf);
     }
 }
@@ -402,23 +386,14 @@
  */
 TComponentId RegisterComponentL(
     JNIEnv *aEnv, RSoftwareComponentRegistry *aScr, jint aUid,
-    jstring aSuiteName, jstring aVendor, jstring aVersion,
-    jstring aName, jstring aGlobalId,
+    jstring aSuiteName, jstring aVendor, jstring aVersion, jstring aGlobalId,
     jobjectArray aComponentFiles, TInt64 aComponentSize,
     TBool aIsRemovable, TBool aIsDrmProtected,
     TBool aIsOriginVerified, TBool aIsUpdate, jint aMediaId,
-    jstring aMidletInfoUrl, jstring aMidletDescription, jstring aDownloadUrl)
+    jstring aMidletInfoUrl, jstring aMidletDescription,
+    jstring aDownloadUrl, jstring aUpdateUrl)
 {
-    HBufC *name = NULL;
-    if (NULL == aName)
-    {
-        // If name is not specified, use suite name.
-        name = CreateHBufCFromJavaStringLC(aEnv, aSuiteName);
-    }
-    else
-    {
-        name = CreateHBufCFromJavaStringLC(aEnv, aName);
-    }
+    HBufC *name = CreateHBufCFromJavaStringLC(aEnv, aSuiteName);
     HBufC *vendor = CreateHBufCFromJavaStringLC(aEnv, aVendor);
     HBufC *version = CreateHBufCFromJavaStringLC(aEnv, aVersion);
     HBufC *globalId = CreateHBufCFromJavaStringLC(aEnv, aGlobalId);
@@ -445,14 +420,10 @@
     aScr->SetComponentPropertyL(componentId, KSettingsPlugin(), KSettingsPluginValue());
     //LOG(EJavaInstaller, EInfo, "RegisterComponentL: Settings plugin property set");
 
-    if (NULL != aName)
-    {
-        // If name is specified, store suite name as property.
-        SetComponentPropertyL(aEnv, aScr, componentId, KMIDletName(), aSuiteName);
-    }
     SetComponentPropertyL(aEnv, aScr, componentId, KMIDletInfoURL(), aMidletInfoUrl);
     SetComponentPropertyL(aEnv, aScr, componentId, KMIDletDescription(), aMidletDescription);
     SetComponentPropertyL(aEnv, aScr, componentId, KDownloadURL(), aDownloadUrl);
+    SetComponentPropertyL(aEnv, aScr, componentId, KUpdateURL(), aUpdateUrl);
 
     CleanupStack::PopAndDestroy(globalId);
     CleanupStack::PopAndDestroy(version);
@@ -478,21 +449,22 @@
  */
 JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1registerComponent
 (JNIEnv *aEnv, jclass, jint aSessionHandle, jint aUid, jstring aSuiteName,
- jstring aVendor, jstring aVersion, jstring aName, jstring aGlobalId,
+ jstring aVendor, jstring aVersion, jstring aGlobalId,
  jobjectArray aComponentFiles, jlong aComponentSize, jboolean aIsRemovable,
  jboolean aIsDrmProtected, jboolean aIsOriginVerified, jboolean aIsUpdate,
  jint aMediaId, jstring aMidletInfoUrl, jstring aMidletDescription,
- jstring aDownloadUrl, jobject aComponentId)
+ jstring aDownloadUrl, jstring aUpdateUrl, jobject aComponentId)
 {
     __UHEAP_MARK;
     RSoftwareComponentRegistry *pScr =
         reinterpret_cast<RSoftwareComponentRegistry*>(aSessionHandle<<2);
     TComponentId componentId = -1;
     TRAPD(err, componentId = RegisterComponentL(
-                                 aEnv, pScr, aUid, aSuiteName, aVendor, aVersion, aName, aGlobalId,
+                                 aEnv, pScr, aUid, aSuiteName, aVendor, aVersion, aGlobalId,
                                  aComponentFiles, aComponentSize, aIsRemovable,
                                  aIsDrmProtected, aIsOriginVerified, aIsUpdate, aMediaId,
-                                 aMidletInfoUrl, aMidletDescription, aDownloadUrl));
+                                 aMidletInfoUrl, aMidletDescription,
+                                 aDownloadUrl, aUpdateUrl));
     __UHEAP_MARKEND;
     if (KErrNone == err)
     {
@@ -515,9 +487,7 @@
     RSoftwareComponentRegistry *pScr =
         reinterpret_cast<RSoftwareComponentRegistry*>(aSessionHandle<<2);
     TInt err = KErrNone;
-#ifdef RD_JAVA_USIF_APP_REG
     TRAP(err, pScr->DeleteApplicationEntriesL(aComponentId));
-#endif // RD_JAVA_USIF_APP_REG
     if (KErrNone == err)
     {
         TRAP(err, pScr->DeleteComponentL(aComponentId));
@@ -530,7 +500,6 @@
  * See JNI method __1registerApplication.
  * This method makes calls that may leave.
  */
-#ifdef RD_JAVA_USIF_APP_REG
 void RegisterApplicationL(
     JNIEnv *aEnv, RSoftwareComponentRegistry *aScr,
     jint aComponentId, jint aAppUid,
@@ -598,47 +567,36 @@
     RPointerArray<HBufC> captionsArray;
     CleanupResetAndDestroyPushL(captionsArray);
     TInt langCount = aEnv->GetArrayLength(aLanguages);
-    TInt captionCount = aEnv->GetArrayLength(aAppNames);
-    if (langCount == captionCount)
+    jint* languages = aEnv->GetIntArrayElements(aLanguages, NULL);
+    for (TInt i = 0; i < langCount; i++)
     {
-        jint* languages = aEnv->GetIntArrayElements(aLanguages, NULL);
-        for (TInt i = 0; i < langCount; i++)
-        {
-            TLanguage tmpLanguage = (TLanguage)languages[i];
-            HBufC *tmpCaption =
-                CreateHBufCFromJavaStringLC(
-                    aEnv, (jstring)aEnv->GetObjectArrayElement(aAppNames, i));
-            captionsArray.AppendL(tmpCaption);
-            CleanupStack::Pop(tmpCaption);
-            //LOG1(EJavaInstaller, EInfo,
-            //     "RegisterApplicationL: language %d", tmpLanguage);
-            //LOG_TDESC_L(EJavaInstaller, EInfo,
-            //            "RegisterApplicationL: caption %s", tmpCaption->Des());
-            CCaptionAndIconInfo *tmpCaptionAndIconInfo =
-                CCaptionAndIconInfo::NewLC(
-                    /*aCaption=*/ *tmpCaption,
-                    /*aIconFileName=*/ KNullDesC,
-                    /*aNumOfAppIcons=*/ 0);
-            CLocalizableAppInfo *tmpLocAppInfo =
-                CLocalizableAppInfo::NewLC(
-                    /*aShortCaption=*/ KNullDesC,
-                    /*aApplicationLanguage=*/ tmpLanguage,
-                    /*aGroupName=*/ KNullDesC,
-                    /*aCaptionAndIconInfo=*/ tmpCaptionAndIconInfo,
-                    /*aViewDataList=*/ viewDataList);
-            localizableAppInfoList.AppendL(tmpLocAppInfo);
-            CleanupStack::Pop(tmpLocAppInfo);
-            CleanupStack::Pop(tmpCaptionAndIconInfo);
-        }
-        aEnv->ReleaseIntArrayElements(aLanguages, languages, 0);
+        TLanguage tmpLanguage = (TLanguage)languages[i];
+        HBufC *tmpCaption =
+            CreateHBufCFromJavaStringLC(
+                aEnv, (jstring)aEnv->GetObjectArrayElement(aAppNames, i));
+        captionsArray.AppendL(tmpCaption);
+        CleanupStack::Pop(tmpCaption);
+        //LOG1(EJavaInstaller, EInfo,
+        //     "RegisterApplicationL: language %d", tmpLanguage);
+        //LOG_TDESC_L(EJavaInstaller, EInfo,
+        //            "RegisterApplicationL: caption %S", tmpCaption->Des());
+        CCaptionAndIconInfo *tmpCaptionAndIconInfo =
+            CCaptionAndIconInfo::NewLC(
+                /*aCaption=*/ *tmpCaption,
+                /*aIconFileName=*/ KNullDesC,
+                /*aNumOfAppIcons=*/ 0);
+        CLocalizableAppInfo *tmpLocAppInfo =
+            CLocalizableAppInfo::NewLC(
+                /*aShortCaption=*/ KNullDesC,
+                /*aApplicationLanguage=*/ tmpLanguage,
+                /*aGroupName=*/ KNullDesC,
+                /*aCaptionAndIconInfo=*/ tmpCaptionAndIconInfo,
+                /*aViewDataList=*/ viewDataList);
+        localizableAppInfoList.AppendL(tmpLocAppInfo);
+        CleanupStack::Pop(tmpLocAppInfo);
+        CleanupStack::Pop(tmpCaptionAndIconInfo);
     }
-    else
-    {
-        WLOG2(EJavaInstaller,
-              "RegisterApplicationL: localisation not made because language " \
-              "count does not match to caption count (%d != %d)",
-              langCount, captionCount);
-    }
+    aEnv->ReleaseIntArrayElements(aLanguages, languages, 0);
 
     // Create application registration data objects.
     TApplicationCharacteristics appCharacteristics;
@@ -674,13 +632,6 @@
     CleanupStack::PopAndDestroy(caption);
     __UHEAP_MARKEND;
 }
-#else
-void RegisterApplicationL(
-    JNIEnv *, RSoftwareComponentRegistry *, jint, jint, jstring,
-    jstring, jstring, jstring, jint, jintArray, jobjectArray)
-{
-}
-#endif // RD_JAVA_USIF_APP_REG
 
 /*
  * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
@@ -710,19 +661,13 @@
     JNIEnv *aEnv, RSoftwareComponentRegistry *aScr, jint aComponentId,
     jstring aName, jstring aVendor, jint aLanguage)
 {
-    if (NULL != aName)
-    {
-        HBufC *name = CreateHBufCFromJavaStringLC(aEnv, aName);
-        aScr->SetComponentNameL(aComponentId, *name, (TLanguage)aLanguage);
-        CleanupStack::PopAndDestroy(name);
-    }
+    HBufC *name = CreateHBufCFromJavaStringLC(aEnv, aName);
+    aScr->SetComponentNameL(aComponentId, *name, (TLanguage)aLanguage);
+    CleanupStack::PopAndDestroy(name);
 
-    if (NULL != aVendor)
-    {
-        HBufC *vendor = CreateHBufCFromJavaStringLC(aEnv, aVendor);
-        aScr->SetVendorNameL(aComponentId, *vendor, (TLanguage)aLanguage);
-        CleanupStack::PopAndDestroy(vendor);
-    }
+    HBufC *vendor = CreateHBufCFromJavaStringLC(aEnv, aVendor);
+    aScr->SetVendorNameL(aComponentId, *vendor, (TLanguage)aLanguage);
+    CleanupStack::PopAndDestroy(vendor);
 }
 
 /*
@@ -827,7 +772,6 @@
  * Method:    _getComponentIdForApp
  * Signature: (IILcom/nokia/mj/impl/installer/applicationregistrator/ComponentId;)I
  */
-#ifdef RD_JAVA_USIF_APP_REG
 JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1getComponentIdForApp
 (JNIEnv *aEnv, jclass, jint aSessionHandle, jint aAppUid, jobject aComponentId)
 {
@@ -847,13 +791,6 @@
     }
     return err;
 }
-#else
-JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1getComponentIdForApp
-(JNIEnv *, jclass, jint, jint, jobject)
-{
-    return KErrNone;
-}
-#endif // RD_JAVA_USIF_APP_REG
 
 /**
  * See JNI method __1getuid.
@@ -866,20 +803,8 @@
     CleanupClosePushL(*pScr);
     TInt uid = 0;
     CPropertyEntry *property = pScr->GetComponentPropertyL(aCid, KUid());
-    if (NULL != property)
-    {
-        if (property->PropertyType() == CPropertyEntry::EIntProperty)
-        {
-            uid = ((CIntPropertyEntry*)property)->IntValue();
-        }
-        else
-        {
-            ELOG2(EJavaInstaller,
-                  "GetUidL: Incorrect property type %d for cid %d",
-                  property->PropertyType(), aCid);
-        }
-        delete property;
-    }
+    uid = ((CIntPropertyEntry*)property)->IntValue();
+    delete property;
     // Close and delete the temporary RSoftwareComponentRegistry.
     CleanupStack::PopAndDestroy(pScr);
     delete pScr; // For some reason PopAndDestroy does not delete this.
@@ -916,23 +841,16 @@
     HBufC *globalId = CreateHBufCFromJavaStringLC(aEnv, aGlobalId);
     CComponentEntry *componentEntry =
         aScr->GetComponentL(*globalId, Usif::KSoftwareTypeJava, aLanguage);
-    if (NULL == componentEntry)
-    {
-        //LOG_TDESC_L(EJavaInstaller, EInfo,
-        //            "Component not found for GlobalId %s", globalId->Des());
-        CleanupStack::PopAndDestroy(globalId);
-        return;
-    }
     CleanupStack::PopAndDestroy(globalId);
 
     // Log component entry.
     TComponentId componentId = componentEntry->ComponentId();
-    LOG_TDESC_L(EJavaInstaller, EInfo, "GlobalId: %s", componentEntry->GlobalId());
+    LOG_TDESC_L(EJavaInstaller, EInfo, "GlobalId: %S", componentEntry->GlobalId());
     LOG1(EJavaInstaller, EInfo, "ComponentId: %d", componentId);
-    LOG_TDESC_L(EJavaInstaller, EInfo, "SoftwareType: %s", componentEntry->SoftwareType());
-    LOG_TDESC_L(EJavaInstaller, EInfo, "Name: %s", componentEntry->Name());
-    LOG_TDESC_L(EJavaInstaller, EInfo, "Vendor: %s", componentEntry->Vendor());
-    LOG_TDESC_L(EJavaInstaller, EInfo, "Version: %s", componentEntry->Version());
+    LOG_TDESC_L(EJavaInstaller, EInfo, "SoftwareType: %S", componentEntry->SoftwareType());
+    LOG_TDESC_L(EJavaInstaller, EInfo, "Name: %S", componentEntry->Name());
+    LOG_TDESC_L(EJavaInstaller, EInfo, "Vendor: %S", componentEntry->Vendor());
+    LOG_TDESC_L(EJavaInstaller, EInfo, "Version: %S", componentEntry->Version());
     LOG1(EJavaInstaller, EInfo, "ComponentSize: %d", componentEntry->ComponentSize());
     LOG1(EJavaInstaller, EInfo, "ScomoState: %d", componentEntry->ScomoState());
     LOG1(EJavaInstaller, EInfo, "IsDrmProtected: %d", componentEntry->IsDrmProtected());
@@ -960,42 +878,37 @@
         switch (propertyEntry->PropertyType())
         {
         case CPropertyEntry::EBinaryProperty:
-            LOG_TDESC_L(EJavaInstaller, EInfo, "BinaryProperty: %s",
+            LOG_TDESC_L(EJavaInstaller, EInfo, "BinaryProperty: %S",
                         propertyEntry->PropertyName());
             break;
         case CPropertyEntry::EIntProperty:
-            LOG_TDESC_L(EJavaInstaller, EInfo, "IntProperty: %s",
+            LOG_TDESC_L(EJavaInstaller, EInfo, "IntProperty: %S",
                         propertyEntry->PropertyName());
             LOG2(EJavaInstaller, EInfo, "  = 0x%x (%d)",
                  ((CIntPropertyEntry*)propertyEntry)->IntValue(),
                  ((CIntPropertyEntry*)propertyEntry)->IntValue());
             break;
         case CPropertyEntry::ELocalizedProperty:
-            LOG_TDESC_L(EJavaInstaller, EInfo, "LocalizedProperty: %s",
+            LOG_TDESC_L(EJavaInstaller, EInfo, "LocalizedProperty: %S",
                         propertyEntry->PropertyName());
-            LOG_TDESC_L(EJavaInstaller, EInfo, " = %s",
+            LOG_TDESC_L(EJavaInstaller, EInfo, " = %S",
                         ((CLocalizablePropertyEntry*)propertyEntry)->StrValue());
             break;
         }
     }
     CleanupStack::PopAndDestroy(&properties);
 
-#ifdef RD_JAVA_USIF_APP_REG
     // Log uids of applications associated to component.
     RArray<TUid> appUids;
     CleanupClosePushL(appUids);
     aScr->GetAppUidsForComponentL(componentId, appUids);
-    if (appUids.Count() == 0)
-    {
-        LOG(EJavaInstaller, EInfo, "No component appUids found from SCR");
-    }
+    LOG1(EJavaInstaller, EInfo, "Number of AppUids found: %d", appUids.Count());
     for (TInt i = 0; i < appUids.Count(); i++)
     {
         LOG2(EJavaInstaller, EInfo, "AppUid [%x] (%d)",
              appUids[i].iUid, appUids[i].iUid);
     }
     CleanupStack::PopAndDestroy(&appUids);
-#endif // RD_JAVA_USIF_APP_REG
 }
 
 /**
@@ -1047,11 +960,51 @@
 JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1getUsifMode
 (JNIEnv *, jclass)
 {
-#ifdef RD_JAVA_USIF_APP_REG
     return 1;
-#else
-    return 0;
-#endif // RD_JAVA_USIF_APP_REG
+}
+
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _getErrorCategory
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1getErrorCategory
+(JNIEnv *, jclass, jint aErrorId)
+{
+    int errorCategory = Usif::EUnexpectedError;
+    switch (aErrorId)
+    {
+    case com_nokia_mj_impl_utils_InstallerErrorMessage_INST_NO_MEM:
+        errorCategory = Usif::ELowDiskSpace;
+        break;
+    case com_nokia_mj_impl_utils_InstallerErrorMessage_INST_NO_NET:
+        errorCategory = Usif::ENetworkUnavailable;
+        break;
+    case com_nokia_mj_impl_utils_InstallerErrorMessage_INST_CORRUPT_PKG:
+        errorCategory = Usif::ECorruptedPackage;
+        break;
+    case com_nokia_mj_impl_utils_InstallerErrorMessage_INST_COMPAT_ERR:
+        errorCategory = Usif::EApplicationNotCompatible;
+        break;
+    case com_nokia_mj_impl_utils_InstallerErrorMessage_INST_AUTHORIZATION_ERR:
+    case com_nokia_mj_impl_utils_InstallerErrorMessage_INST_AUTHENTICATION_ERR:
+        errorCategory = Usif::ESecurityError;
+        break;
+    case com_nokia_mj_impl_utils_InstallerErrorMessage_INST_PUSH_REG_ERR:
+    case com_nokia_mj_impl_utils_InstallerErrorMessage_INST_UNEXPECTED_ERR:
+    case com_nokia_mj_impl_utils_InstallerErrorMessage_UNINST_UNEXPECTED_ERR:
+    case com_nokia_mj_impl_utils_InstallerErrorMessage_OTHER_UNEXPECTED_ERR:
+        errorCategory = Usif::EUnexpectedError;
+        break;
+    case com_nokia_mj_impl_utils_InstallerErrorMessage_INST_CANCEL:
+    case com_nokia_mj_impl_utils_InstallerErrorMessage_UNINST_CANCEL:
+        errorCategory = Usif::EUserCancelled;
+        break;
+    case com_nokia_mj_impl_utils_InstallerErrorMessage_UNINST_NOT_ALLOWED:
+        errorCategory = Usif::EUninstallationBlocked;
+        break;
+    }
+    return errorCategory;
 }
 
 #else // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
@@ -1127,9 +1080,9 @@
  * Signature: (ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;JZZZZLcom/nokia/mj/impl/installer/applicationregistrator/ComponentId;)I
  */
 JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1registerComponent
-(JNIEnv *, jclass, jint, jint, jstring, jstring, jstring, jstring, jstring,
- jobjectArray, jlong, jboolean, jboolean, jboolean, jboolean, jint, jstring,
- jstring, jstring, jobject)
+(JNIEnv *, jclass, jint, jint, jstring, jstring, jstring, jstring,
+ jobjectArray, jlong, jboolean, jboolean, jboolean, jboolean, jint,
+ jstring, jstring, jstring, jstring, jobject)
 {
     return KErrNone;
 }
@@ -1233,4 +1186,15 @@
     return 0;
 }
 
+/*
+ * Class:     com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator
+ * Method:    _getErrorCategory
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_SifRegistrator__1getErrorCategory
+(JNIEnv *, jclass, jint)
+{
+    return 0;
+}
+
 #endif // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
--- a/javamanager/javainstaller/installer/tsrc/build/jiut.bat	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/tsrc/build/jiut.bat	Wed Jun 23 18:07:10 2010 +0300
@@ -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 "Eclipse Public License v1.0"
@@ -16,8 +16,8 @@
 rem Script for running JavaInstaller unit tests from S60 eshell
 rem Start SifServer before running any tests
 sifserver
-rem javainstaller test -mainclass=com.nokia.mj.impl.installer.downloader.NotificationPosterTest
-rem javainstaller test -mainclass=com.nokia.mj.impl.installer.downloader.DownloaderTest
+javainstaller test -mainclass=com.nokia.mj.impl.installer.downloader.NotificationPosterTest
+javainstaller test -mainclass=com.nokia.mj.impl.installer.downloader.DownloaderTest
 javainstaller test -mainclass=com.nokia.mj.impl.installer.storagehandler.OtaStatusHandlerTest
 javainstaller test -mainclass=com.nokia.mj.impl.installer.integrityservice.IntegrityServiceTest
 javainstaller test -mainclass=com.nokia.mj.impl.installer.jadjarmatcher.JadJarMatcherTest
@@ -34,4 +34,7 @@
 javainstaller test -mainclass=com.nokia.mj.impl.installer.utils.AttributeReaderTest
 javainstaller test -mainclass=com.nokia.mj.impl.installer.InstallerResultMessageTest
 javainstaller test -mainclass=com.nokia.mj.impl.installer.GetComponentInfoTest
-rem javainstaller test -mainclass=com.nokia.mj.impl.installer.InstallerEngineTest
+javainstaller test -mainclass=com.nokia.mj.impl.installer.InstallerEngineTest -param1=run1
+javainstaller test -mainclass=com.nokia.mj.impl.installer.InstallerEngineTest -param1=run2
+javainstaller test -mainclass=com.nokia.mj.impl.installer.InstallerEngineTest -param1=run3
+javainstaller test -mainclass=com.nokia.mj.impl.installer.InstallerEngineTest -param1=run4
--- a/javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/GetComponentInfoTest.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/GetComponentInfoTest.java	Wed Jun 23 18:07:10 2010 +0300
@@ -856,15 +856,11 @@
         try
         {
             String value = aMsg.getStringValue(aName);
-            assertTrue("Unexpected value " + aName + "=" + value, false);
-        }
-        catch (IllegalArgumentException iae)
-        {
-            // Expected exception.
+            assertTrue("Unexpected value " + aName + "=" + value, value == null);
         }
         catch (Throwable t)
         {
-            assertTrue("Incorrect exception for string value " + aName +
+            assertTrue("Unexpected exception for string value " + aName +
                        ": " + t, false);
         }
 
--- a/javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/InstallerEngineTest.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/InstallerEngineTest.java	Wed Jun 23 18:07:10 2010 +0300
@@ -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"
@@ -52,6 +52,8 @@
     {
         TestSuite suite = new TestSuite(this.getClass().getName());
 
+        String runIndex = System.getProperty("com.nokia.mj.impl.installer.test.param1");
+
         if (Platform.isLinux())
         {
             // In S60 this would be interactive test, so disable it there.
@@ -64,6 +66,8 @@
             }));
         }
 
+        if (runIndex == null || runIndex.equalsIgnoreCase("run1"))
+        {
         // Run 1
         suite.addTest(new InstallerEngineTest("testMidletMessageOk", new TestMethod()
         {
@@ -104,7 +108,11 @@
                 ((InstallerEngineTest)tc).test3AppsOk();
             }
         }));
+        }
 
+        if (runIndex == null || runIndex.equalsIgnoreCase("run2"))
+        {
+        // Run 2
         suite.addTest(new InstallerEngineTest("testDownloadJadOk", new TestMethod()
         {
             public void run(TestCase tc)
@@ -113,7 +121,6 @@
             }
         }));
 
-        // Run 2
         suite.addTest(new InstallerEngineTest("testDownloadJarOk", new TestMethod()
         {
             public void run(TestCase tc)
@@ -217,7 +224,11 @@
                 ((InstallerEngineTest)tc).testNoJavaBinRoot();
             }
         }));
+        }
 
+        if (runIndex == null || runIndex.equalsIgnoreCase("run3"))
+        {
+        // Run 3
         suite.addTest(new InstallerEngineTest("testBlockUninstall", new TestMethod()
         {
             public void run(TestCase tc)
@@ -241,8 +252,11 @@
                 ((InstallerEngineTest)tc).testApplicationInfo();
             }
         }));
+        }
 
-        // Run 3
+        if (runIndex == null || runIndex.equalsIgnoreCase("run4"))
+        {
+        // Run 4
         suite.addTest(new InstallerEngineTest("testInstallOptions", new TestMethod()
         {
             public void run(TestCase tc)
@@ -258,6 +272,7 @@
                 ((InstallerEngineTest)tc).testInstallAuthAndBig();
             }
         }));
+        }
 
         com.nokia.mj.impl.utils.OmjTestRunner.run(suite);
     }
@@ -313,6 +328,15 @@
     }
 
     /**
+     */
+    public String getTestServer()
+    {
+        String server = System.getProperty("com.nokia.mj.impl.installer.test.server");
+        assertNotNull("-server=<address>:<port> argument required.", server);
+        return server;
+    }
+
+    /**
      * Makes installation, update and uninstallation for given application.
      * Does the following steps:
      * install with cancellation and check that app is not installed,
@@ -413,12 +437,12 @@
         assertNoIsDir();
 
         // List.
-        Log.logOut("InstallerEngineTest.doInstallUninstall: list -v");
-        result = Installer.mainWithResult(new String[] { "list", "-v" });
-        assertResult(result, Installer.ERR_NONE);
-        Log.logOut("InstallerEngineTest.doInstallUninstall: list -otastatus");
-        result = Installer.mainWithResult(new String[] { "list", "-otastatus" });
-        assertResult(result, Installer.ERR_NONE);
+        //Log.logOut("InstallerEngineTest.doInstallUninstall: list -v");
+        //result = Installer.mainWithResult(new String[] { "list", "-v" });
+        //assertResult(result, Installer.ERR_NONE);
+        //Log.logOut("InstallerEngineTest.doInstallUninstall: list -otastatus");
+        //result = Installer.mainWithResult(new String[] { "list", "-otastatus" });
+        //assertResult(result, Installer.ERR_NONE);
 
         // Update with cancellation.
         Log.logOut("InstallerEngineTest.doInstallUninstall: update with cancellation " + aFilename);
@@ -573,38 +597,38 @@
     public void testDownloadJadOk()
     {
         Log.logOut("InstallerEngineTest.testDownloadJadOk begins");
-        SuiteInfo suite = new SuiteInfo("JBenchmark2", "Kishonti LP");
-        doInstallUninstall(suite, "http://195.134.231.83:7070/omjserver/resources/omj/T00000900_JBenchmark2_gcf.jsp", true, iDefaultOptions);
+        SuiteInfo suite = new SuiteInfo("HelloWorld", "Nokia");
+        doInstallUninstall(suite, "http://" + getTestServer() + "/installertest/HelloWorld_ota.jad", true, iDefaultOptions);
     }
 
     public void testDownloadJarOk()
     {
         Log.logOut("InstallerEngineTest.testDownloadJarOk begins");
-        SuiteInfo suite = new SuiteInfo("JBenchmark2", "Kishonti LP");
-        doInstallUninstall(suite, "http://195.134.231.83:7070/omjserver/resources/omj/JBenchmark2.jar", false, iDefaultOptions);
+        SuiteInfo suite = new SuiteInfo("HelloWorld", "Nokia");
+        doInstallUninstall(suite, "http://" + getTestServer() + "/installertest/HelloWorld.jar", false, iDefaultOptions);
     }
 
     public void testDownloadJadHttpRedirectOk()
     {
         Log.logOut("InstallerEngineTest.testDownloadJadHttpRedirectOk begins");
-        SuiteInfo suite = new SuiteInfo("JBenchmark2", "Kishonti LP");
-        doInstallUninstall(suite, "http://195.134.231.83:7070/RedirectServlet/redirect?name=JBenchmark2.jad&count=5", true, iDefaultOptions);
+        SuiteInfo suite = new SuiteInfo("HelloWorld_redirect", "Nokia");
+        doInstallUninstall(suite, "http://" + getTestServer() + "/installertest/redirect?name=HelloWorld_redirect.jad&count=5", true, iDefaultOptions);
     }
 
     public void testDownloadJarHttpRedirectOk()
     {
         Log.logOut("InstallerEngineTest.testDownloadJarHttpRedirectOk begins");
-        SuiteInfo suite = new SuiteInfo("JBenchmark2", "Kishonti LP");
-        doInstallUninstall(suite, "http://195.134.231.83:7070/RedirectServlet/redirect?name=JBenchmark2.jar", false, iDefaultOptions);
+        SuiteInfo suite = new SuiteInfo("HelloWorld_redirect", "Nokia");
+        doInstallUninstall(suite, "http://" + getTestServer() + "/installertest/redirect?name=HelloWorld_redirect.jar", false, iDefaultOptions);
     }
 
     public void testDownloadJadHttpAuthOk()
     {
         Log.logOut("InstallerEngineTest.testDownloadJadHttpAuthOk begins");
-        SuiteInfo suite = new SuiteInfo("DS_Snow_http_auth", "DS_Effects");
+        SuiteInfo suite = new SuiteInfo("HelloWorld_http_auth", "Nokia");
         iDefaultOptions.addElement("-username=guest");
         iDefaultOptions.addElement("-password=guest");
-        doInstallUninstall(suite, "http://195.134.231.83:7070/httpauth/DS_Snow_http_auth.jad", true, iDefaultOptions);
+        doInstallUninstall(suite, "http://" + getTestServer() + "/installertest/httpauth/HelloWorld_http_auth.jad", true, iDefaultOptions);
     }
 
     public void testDownloadJadHttpAuthNok()
@@ -614,7 +638,7 @@
         {
             "install",
             "-silent",
-            "-jad=http://195.134.231.83:7070/httpauth/DS_Snow_http_auth.jad",
+            "-jad=http://" + getTestServer() + "/installertest/httpauth/HelloWorld_http_auth.jad",
         };
         int result = Installer.mainWithResult(args);
         // Check result code.
@@ -637,7 +661,7 @@
         {
             "install",
             "-silent",
-            "-jad=http://195.134.231.83:7070/RedirectServlet/redirect?name=JBenchmark2.jad&count=6",
+            "-jad=http://" + getTestServer() + "/installertest/redirect?name=HelloWorld_redirect.jad&count=6",
         };
         int result = Installer.mainWithResult(args);
         // Check result code.
@@ -680,7 +704,7 @@
         {
             "install",
             "-silent",
-            "-jad=http://195.134.231.83:7070/omjserver/resources/omj/T00000900_JBenchmark2_8mb_gcf.jsp",
+            "-jad=http://" + getTestServer() + "/installertest/HelloWorld_8mb.jad",
         };
         Log.log("InstallerEngineTest.testDownloadJadCancel: installation starts");
         int result = Installer.mainWithResult(args);
@@ -1109,10 +1133,10 @@
     {
         Log.logOut("InstallerEngineTest.testInstallAuthAndBig begins");
         // Do first installation with doInstallUninstall helper
-        SuiteInfo suite = new SuiteInfo("DS_Snow_http_auth", "DS_Effects");
+        SuiteInfo suite = new SuiteInfo("HelloWorld_http_auth", "Nokia");
         iDefaultOptions.addElement("-username=guest");
         iDefaultOptions.addElement("-password=guest");
-        doInstallUninstall(suite, "http://195.134.231.83:7070/httpauth/DS_Snow_http_auth.jad", true, iDefaultOptions);
+        doInstallUninstall(suite, "http://" + getTestServer() + "/installertest/httpauth/HelloWorld_http_auth.jad", true, iDefaultOptions);
 
         // Then start installation which downloads a large file.
         Log.log("InstallerEngineTest.testInstallAuthAndBig begin to install big app");
@@ -1120,7 +1144,7 @@
         {
             "install",
             "-silent",
-            "-jad=http://195.134.231.83:7070/omjserver/resources/omj/T00000900_JBenchmark2_8mb_gcf.jsp",
+            "-jad=http://" + getTestServer() + "/installertest/HelloWorld_8mb.jad",
         };
         int result = Installer.mainWithResult(args);
         // Check result code.
--- a/javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/applicationregistrator/SifRegistratorTest.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/applicationregistrator/SifRegistratorTest.java	Wed Jun 23 18:07:10 2010 +0300
@@ -203,11 +203,23 @@
         {
             SuiteInfo si = getTestSuite();
             ComponentId cid = getComponentId(si.getGlobalId());
+
             // Check for USIF Phase 2 registration.
             Uid uid = sifReg.getUid(cid.getId());
             assertTrue("Suite uid " + si.getUid() + " does not match" +
                        " to uid " + uid + " from SCR",
                        si.getUid().equals(uid));
+
+            Uid appUid = PlatformUid.createUid("[e0001001]");
+            sifReg.startSession(false);
+            ComponentId cidForApp = sifReg.getComponentId(appUid);
+            sifReg.closeSession();
+            assertTrue("Null component id from SCR for application uid " +
+                       appUid, cidForApp != null);
+            assertTrue("Component id " + cid + " does not match" +
+                       " to uid " + cidForApp + " from SCR",
+                       cid.getId() == cidForApp.getId());
+
             // Check for USIF Phase 1 registration.
             //Vector apps = si.getApplications();
             //for (int i = 0; i < apps.size(); i++)
--- a/javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/customisationproperties/CustomisationPropertiesTest.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/customisationproperties/CustomisationPropertiesTest.java	Wed Jun 23 18:07:10 2010 +0300
@@ -212,18 +212,18 @@
 
         String drive = (String)value.firstElement();
         assertTrue("PossibleInstallationDrives is null", (drive != null));
-        assertTrue("First PossibleInstallationDrive is not C:", drive.equals("C:"));
+        assertTrue("First PossibleInstallationDrive is not C:, it is " + drive, drive.equals("C:"));
         // second possible drive
         drive = (String)value.get(1);
         assertTrue("PossibleInstallationDrives is null", (drive != null));
-        assertTrue("Second PossibleInstallationDrive is not E:", drive.equals("E:"));
+        assertTrue("Second PossibleInstallationDrive is not E:, it is " + drive, drive.equals("E:"));
 
         value = cust.getIntegerProperty(CustomisationProperties.PossibleInstallationDrives);
         assertTrue("PossibleInstallationDrives value is null", (value != null));
         assertTrue("PossibleInstallationDrives value does not contain any integers", (value.size() > 0));
 
         Integer idrive = (Integer)value.get(1);
-        assertTrue("Second PossibleInstallationDrive is E:", idrive.intValue() == 4);
+        assertTrue("Second PossibleInstallationDrive is not E:, it is " + idrive, idrive.intValue() == 4);
     }
 
     public void testTypesOfPossibleInstallationDrives()
--- a/javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/downloader/DownloaderTest.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/downloader/DownloaderTest.java	Wed Jun 23 18:07:10 2010 +0300
@@ -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"
@@ -37,8 +37,8 @@
  */
 public class DownloaderTest extends TestCase implements InstallerMain
 {
-    private static final String TEST_URL = "http://195.134.231.83:7070/java-server/resources/DS_Snow.jar";
-    private static final int TEST_URL_SIZE = 10241; // test data file size
+    private static final String TEST_URL = "/installertest/HelloWorld.jar";
+    private static final int TEST_URL_SIZE = 1511; // test data file size
 
     // Begin j2meunit test framework setup
 
@@ -172,10 +172,15 @@
     public void testBasicDownload(Downloader downloader,
                                   TestDlListener listener)
     {
+        String server = System.getProperty(
+                            "com.nokia.mj.impl.installer.test.server");
+        assertNotNull("-server=<address>:<port> argument required.", server);
+
         try
         {
             String filename = "test.dat";
-            DownloadInfo dlInfo = new DownloadInfo(TEST_URL, filename);
+            DownloadInfo dlInfo = new DownloadInfo("http://" + server
+                                                   + TEST_URL, filename);
             downloader.start(dlInfo);
             downloader.waitForCompletion();
             assertTrue("Result DlInfo is null",
--- a/javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/downloader/NotificationPosterTest.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/downloader/NotificationPosterTest.java	Wed Jun 23 18:07:10 2010 +0300
@@ -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"
@@ -36,7 +36,7 @@
  */
 public class NotificationPosterTest extends TestCase implements InstallerMain
 {
-    private static final String TEST_URL = "http://195.134.231.83:7070/java-server/getresult.jsp?phone=CE0CBA106ADB77A9298A143E5136CD2B&tID=900_success";
+    private static final String TEST_URL = "/installertest/notify?tID=900_success";
 
     // Begin j2meunit test framework setup
 
@@ -361,13 +361,18 @@
         testNotifyPendingFailureLimit(poster);
     }
 
-    private static OtaStatusNotification createNotification(int aIndex)
+    private OtaStatusNotification createNotification(int aIndex)
     {
+        String server = System.getProperty(
+                            "com.nokia.mj.impl.installer.test.server");
+        assertNotNull("-server=<address>:<port> argument required.", server);
+
         OtaStatusNotification notification = new OtaStatusNotification
         (PlatformUid.createUid(Integer.toString(aIndex)),
          System.currentTimeMillis(),
          OtaStatusNotification.TYPE_INSTALL, OtaStatusCode.SUCCESS,
-         TEST_URL + aIndex, System.currentTimeMillis(), 0);
+         "http://" + server + TEST_URL + aIndex, System.currentTimeMillis(),
+         0);
         return notification;
     }
 
--- a/javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/utils/SysUtilTest.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/utils/SysUtilTest.java	Wed Jun 23 18:07:10 2010 +0300
@@ -167,6 +167,41 @@
             }
         }));
 
+        if (Platform.isS60())
+        {
+        suite.addTest(new SysUtilTest("testGetProcessState", new TestMethod()
+        {
+            public void run(TestCase tc)
+            {
+                ((SysUtilTest)tc).testGetProcessState();
+            }
+        }));
+
+        suite.addTest(new SysUtilTest("testDriveGetters", new TestMethod()
+        {
+            public void run(TestCase tc)
+            {
+                ((SysUtilTest)tc).testDriveGetters();
+            }
+        }));
+
+        suite.addTest(new SysUtilTest("testGetScreenSize", new TestMethod()
+        {
+            public void run(TestCase tc)
+            {
+                ((SysUtilTest)tc).testGetScreenSize();
+            }
+        }));
+
+        suite.addTest(new SysUtilTest("testIsoToLang", new TestMethod()
+        {
+            public void run(TestCase tc)
+            {
+                ((SysUtilTest)tc).testIsoToLang();
+            }
+        }));
+        }
+
         com.nokia.mj.impl.utils.OmjTestRunner.run(suite);
     }
 
@@ -198,11 +233,11 @@
     {
         try
         {
-            // Test PS keys defined in ScreensaverInternalPSKeys.h
-            Uid uid = PlatformUid.createUid("0x101F8771");  // KPSUidScreenSaver
-            int key = 0x00000001; // KScreenSaverPreviewMode
+            // Test PS keys defined in hwrmpowerstatesdkpskey.h
+            Uid uid = PlatformUid.createUid("0x10205041");  // KPSUidHWRMPowerState
+            int key = 0x00000003; // KHWRMChargingStatus
             int value = SysUtil.getPropertyValue(uid, key);
-            assertTrue("KScreenSaverPreviewMode(!=0): " + value, value == 0);
+            assertTrue("KHWRMChargingStatus(!=0): " + value, value == 0);
         }
         catch (InstallerException ie)
         {
@@ -215,8 +250,8 @@
     {
         try
         {
-            // Test PS keys defined in ScreensaverInternalPSKeys.h
-            Uid uid = PlatformUid.createUid("0x101F8771");  // KPSUidScreenSaver
+            // Test PS keys defined in hwrmpowerstatesdkpskey.h
+            Uid uid = PlatformUid.createUid("0x10205041");  // KPSUidHWRMPowerState
             int key = 0x00000010; // Undefined key
             int value = SysUtil.getPropertyValue(uid, key);
             assertTrue("Getting undefined property value did not fail", false);
@@ -573,4 +608,51 @@
             // OK, expected exception.
         }
     }
+
+    public void testGetProcessState()
+    {
+        int state = SysUtil.getProcessState(PlatformUid.createUid("[102033e6]"));
+        assertTrue("installer process state is " + state +
+                   ", not " + SysUtil.PROC_STATE_ALIVE,
+                   SysUtil.PROC_STATE_ALIVE == state);
+        state = SysUtil.getProcessState(PlatformUid.createUid("[e0001001]"));
+        assertTrue("nonexisting process state is " + state + ", not 0",
+                   0 == state);
+    }
+
+    public void testDriveGetters()
+    {
+        int defMem = SysUtil.getDefaultPhoneMemory();
+        int defMassStorage = SysUtil.getDefaultMassStorage();
+        Log.log("testDriveGetter: defaultPhoneMemory = " + defMem);
+        Log.log("testDriveGetter: defaultMassStorage = " + defMassStorage);
+    }
+
+    public void testGetScreenSize()
+    {
+        int screenWidth = SysUtil.getScreenWidth();
+        int screenHeight = SysUtil.getScreenHeight();
+        Log.log("testGetScreenSize: screenWidth = " + screenWidth);
+        Log.log("testGetScreenSize: screenHeight = " + screenHeight);
+        assertTrue("screenWidth <= 0", screenWidth > 0);
+        assertTrue("screenHeight <= 0", screenHeight > 0);
+    }
+
+    public void testIsoToLang()
+    {
+        testIsoToLang("unknown", -1); // unknown locale is indicated with -1
+        testIsoToLang("fi", 9); // ELangFinnish, Finnish
+        testIsoToLang("fi_FI", 9); // ELangFinnish, Finnish
+        testIsoToLang("sv", 6); // ELangSwedish, Swedish
+        testIsoToLang("sv_FI", 85); // ELangFinlandSwedish, Finland Swedish
+        testIsoToLang("en", 1); // ELangEnglish, UK English
+        testIsoToLang("en_US", 10); // ELangAmerican, American
+        testIsoToLang("en_AU", 20); // ELangAustralian, Australian English
+    }
+
+    private void testIsoToLang(String aLocale, int aLang)
+    {
+        assertTrue("SysUtil.isoToLang " + aLocale + " != " + aLang,
+                   SysUtil.isoToLang(aLocale) == aLang);
+    }
 }
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000019.jar has changed
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000046.jar has changed
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000058.jar has changed
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000070.jar has changed
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000090.jar has changed
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000150.jar has changed
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000172.jar has changed
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000175.jar has changed
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000182.jar has changed
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000189.jar has changed
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000250.jar has changed
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000305.jar has changed
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000390.jar has changed
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000500.jar has changed
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000582.jar has changed
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000618.jar has changed
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000703.jar has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/3DSpaceShooter.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,18 @@
+
+MIDlet-1: 3DSpaceShooter, /icon.png, Sapce3D
+
+
+MIDlet-Jar-Size: 240229
+    
+	
+MIDlet-Jar-URL: 3DSpaceShooter.jar
+MIDlet-Name: 3DSpaceShooter
+MIDlet-Vendor: Innovative Ideas From Outer Space Ltd.
+
+
+
+
+	                 
+MIDlet-Version: 1.0.4
+Nokia-MIDlet-Original-Display-Size: 176,208
+Nokia-MIDlet-On-Screen-Keypad:	 	navigationkeys	    	
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/800_x_N97_64GB_fr_speed_v5_32_01.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,99 @@
+RepositoryContentType: text/plain
+UserAgent: NokiaN95/J2ME-IMPS
+ShowStatusTextInCL: 0
+SpaceBetweenFriendsNameAndHisIcon: 3
+ShowDomain: 0
+MIDlet-Icon: /img/App.png
+NormalPollRate: 12000
+TCPCIREnabled: 1
+Images: http://download.ko.mysite.fr/koi/j2me/enc/1111/
+SpecialKeys: -12
+Host: koi.ko.mysite.fr
+TCPPingRate: 1560000
+EnableCommunitySelector: 1
+BackgoundImgPos: 0
+ScrollBarWidth: 5
+MIDlet-Vendor: Vodafone
+BillingURL: http://koi.ko.mysite.fr/koi/sq.dll/awo_buy
+UseTemplate: 1
+MaxFriendsNumber: 150
+StopTCPCIR: 1
+MIDlet-Version: 4.5.27
+SelectCommand: 1
+KeepAlive: 1500000
+SMSCIREnabled: 1
+MultiTrans: 5
+DefaultDomain: gmaeam1.com
+EnableBackgroundImage: 0
+MicroEdition-Profile: MIDP-2.0
+TermsAndConditions: 1
+SeamlessLogin: 0
+GlobalMsgLength: 600
+MIDlet-Push-1: sms://:3716, ui.Main, *
+RegisterConnection: 1
+ViewType: 0
+HTTPCIREnabled: 1
+IsTabFontBold: 1
+AboutNaming: PrerryLake_h_N97_fr_speed_v4_5_27
+InitMessage: 1
+MicroEdition-Configuration: CLDC-1.0
+MIDlet-Jar-URL: 800€_x_N97_64GB_fr_speed_v5_32_01.jar
+AnimationRate: 300
+Multitask: 0
+EnableSemitransparentHighlight: 0
+CheckContentType: 1
+MaxMsgNumber: 30
+Port: 80
+LoginURL: http:/koi.ko.mysite.fr/koi/sq.dll/dsw_daas
+UseKeepAlive: 0
+MIDlet-Install-Notify: http://download.ko.mysite.fr/InstallNotify?c=
+SelfUpgrade: 1
+MIDlet-Data-Size: 500
+AnimationEnabled: 1
+TitleUpdateRate: 7000
+EnableRenameFriend: 0
+SystemMessageUserTimeout: 25000
+Help: http://download.ko.mysite.fr/koi/j2me/enc/help/fr/
+UseDeviceTimeForIncomingMsg: 1
+TCPCIRReconnectCount: 3
+DefaultLanguage: de
+MIDlet-1: Messenger,/img/App.png,ui.Main
+MsgListHeightTuner: 8
+MIDlet-Name: Messenger
+FontSize: 0
+WVExtension: /web/wv.dll/msn_imgw
+RefreshChoiceOnStateChange: 0
+MIDlet-Permissions: javax.microedition.io.Connector.http,javax.microedition.io.Connector.https,javax.microedition.io.Connector.socket,javax.microedition.io.Connector.sms,javax.wireless.messaging.sms.receive,javax.microedition.io.PushRegistry,javax.microedition.media.control.VideoControl.getSnapshot,javax.microedition.io.Connector.file.read,javax.microedition.io.Connector.file.write
+MaxConversations: 20
+SubscribePresence: 1
+PersistencyEnabled: 1
+RepositoryAlertMessage: Error loading application data. Please try again later.
+GlobalMaxCharCount: 5000
+EnableEmoticonsSelector: 1
+IdleMode: 1
+SpacerHeight: 5
+TCPCIRReconnectRate: 3000
+MIDlet-Jar-Size: 502719
+BackgroundEnabled: 1
+IsCaseInsensitive: 1
+AlertToneMsg: http://download.ko.mysite.fr/koi/j2me/enc/dingdong.mp3
+NormalNoPollTransition: 1800000
+AlertToneContact: http://download.ko.mysite.fr/koi/j2me/enc/alalal.mp3
+NoPollStateEnabled: 0
+Device: 3
+SupportCustomUTF8: 0
+MIDlet-Info-URL: www.koikoikoi.com
+MsgListWidthTuner: 15
+CommandsType: 1;4;2;4;3;8;5;4;6;2;8;2;9;7;10;4;11;8;23;4;24;3;37;2;68;2;69;7;76;4;80;2;86;6;87;1
+IdleModeTimeOut: 900000
+ShowAboutLogo: 1
+TopMarginFriendName: 2
+ContentLanguage: fr
+FastPollRate: 7000
+NokiaTimeOut: 100
+FastNormalTransition: 20000
+EnableShortProfile: 1
+RepositoryVersion: 1
+MIDlet-Jar-RSA-SHA1: QhSjP7F1q3TGmmNC45cUGclVWB537GtcMLpplIJGe+TyDwJ1Mx5VssNHpp3Qs3C1WHLycvcfOkDT0CscStI0lV/5Xy33z192qEHIT5lkGVz1Rd1nfBHqrIBqv77H7dHW1tdU6RiVajx8jrYYXz+Yh/7U2kskmGXd0bLSYq2cuZZgkiT9YDOLa8OJ1Xn2U4/AYzonM1tjGQvkOniCvwqv0DXDW3GAial5w7hzB4txSopBgWiCO7sEPgkssJIvWQ2dsuLnwb3nU8gsUYWuRqidSI5Dm8mSOEA0zjRoREjTJjkqRZXX3r27rtp+omYh+VNCkXDneiNcaihWpkW5TgMhVg==
+MIDlet-Certificate-1-1: MIIEOTCCAyGgAwIBAgILAQAAAAABFIeLkAEwCQYJKoZIhvcNAQEFBQAwUDELNAkGA1UEBhMCVVsxFzAVBgNVBAoIDlZvZGFmb25lIEdyb3VwMSgwJgYDVQQDEx9Wb2RhZm9uZSAoVHJ1c3RlZCBBcHBsaWNhdGlvbnMpMB4XDTA3MDgyMTA4MzA0NFoXDTEyMDgyMTA4MzA0NFowTzELMAkGA1UEBhMCU0cxFDASBgNVBAoTC05ldXN0YXIgTkdNMSowKAYDVQQDEyFNb2JpbGUgSW5zdGFudCBNZXNzYWdpbmcgMjEuMDguMDcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCFfdEngntebK38dtsdODIkNzMiYsngpTwgnDPqV23m/OtsCX1+1E3+ns9v7EPQVqeTuPYUbUiQRXAYE2NpnUjzNd4bKIXBlk18YpXftMxKv4XRvtVa273O/nbKigtR9IuJx2Pz/x/zWbDpc4ZitRQaRTHy0oA1W+htVI1BBzO8cFC3kf4DTNEXjeYHGF5U7deGp/KuN8qfN7QPJ5gtYyUcwYtrV9imc7P2idLFfYGejm7/s/R3qh9o3bIvqLSHUQbwTQNz7bA7QzpBYkSgaQqzif8+ZYRZuLApjbhpoM5XRFUwQCu6KXx7ZPMKoCKVjof20LWlilUiBrVIXMIwHq0tAgMBAAGjggETMIIBDzAOBgNVHQ8BAf8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwUgYDVR0fBEswSTBHoEWgQ4ZBaHR0cDovL2NybC52b2RhZm9uZS1wa2kuY29tL2NybC52L1ZvZGFmb25lVHJ1c3RlZEFwcGxpY2F0aW9ucy5jcmwwOAYIKwYBBQUHAQEELDAqMCgGCCsGAQUFBzABhhxodHRwOi8vb2NzcC52b2RhZm9uZS1wa2kuY29tMBoGA1UdIAQTMBEwDwYNKoY6AAHv9U8BAQMBAzAfBgNVHSMEGDAWgBQ7En6Wl4emCf8AlmWvsw/TeSSR9DAdBgNVHQ4EFgQUadzkP7g69+F/NQGoOfvOG1PC6YowDQYJKoZIhvcNAQEFBQADggEBAK2Z4qE4EFlXYL3ELnsbV/Ri6igPgdXgSZalaw8IKorw19TX7ERpL2tCiyDqisEJygNLW2iok9Nn3DUsmJTr0CoSZFGZc88hkJ9mlDTCQnNa9Hx9XQhp3Ig0uo1Eoei+12kF9j1kVlQJl6QkOPrbdmBbGpv7NFTM29zkPN/4wt3uUvoLZ/ZlbB4NjufZ6gVL77Bt2+UNwKLM4wF39Dy3zTD6qcJPuitGGSss0X4SYX6AzTtNRM+CtTPkFby10pHmmr4ClSfGtOZnXmbGizOIUh/lgOgv/nG9Q+dRDUGDTkhnDwMs1b0reQ0rGE1jFayCJ6Rmn/03FIN5N1SKfgkSeBE=
+MIDlet-Certificate-1-2: MIIECjCCAvKgAwIBAgIFAwEAAzANBgkqhkiG9w0BAQUF8DBLMQswCQYDVQQGEwJVSzEXNBUGA1UEChMOVm9kYWXvbmUgR3JvdXAxIzAhBgNVBAMTGlZvZGFmb25lIChPcGVyYXRvciBEb21haW4pMB4XDTA1MDYxMzExMDAwMFoXDTIxMTIzMTEyMDAwMFowUDELMAkGA1UEBhMCVUsxFzAVBgNVBAoTDlZvZGFmb25lIEdyb3VwMSgwJgYDVQQDEx9Wb2RhZm9uZSAoVHJ1c3RlZCBBcHBsaWNhdGlvbnMpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvfev7oXJy+WKdRjmc2i+Y8vMI3ey/LggGtOhGhY7w1oH1puYttgAjwPP7Ff2qObaJyfFnX81aCopQWeymGzpJtcIv/Z5sZRayBw9ceNIqI7WrwS3Ht//4uqUIH0p6VtPuRukNAnJewbFGgImowwZI4sizQ5Idqxx14lUoOTw8EaE0ygwXSJefS1w/5vuShyujd22F3wHpQnjo/lf05y14x43Uf+PpfFoVzvKm8q/n4VMtzMwi04vkgPjkflT2yay8WWtEpxU6rw8j32EWM/A2+kd4YbTE50I9/XFmIitHajaPVB3piwsChSt4d89UyIP/a+xGkPMultznEdH23SptQIDAQABo4HwMIHtMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQ7En6Wl4emCf8AlmWvsw/TeSSR9DAZBgNVHSAEEjAQMA4GDCqGOgAB7/VPAQEDATBNBgNVHR8ERjBEMEKgQKA+hjxodHRwOi8vY3JsLnZvZGFmb25lLXBraS5jb20vY3JsLnYvVm9kYWZvbmVPcGVyYXRvckRvbWFpbi5jcmwwHQYDVR0lBBYwFAYIKwYBBQUHAwMGCCsGAQUFBwMJMB8GA1UdIwQYMBaAFEjdPe/gPJzfErEw/ZHhwen7l9wIMA0GCSqGSIb3DQEBBQUAA4IBAQCaehJEHzna6onjE8bCCsi7A5NxcQ2Cx85PYs67yxQZ0wMQq1khzxsOJPB7H4SoXlceNMvIxpgPFm/ZcLNdeyjoYOQccH+aS6GRSerYX3COdbtWA4Gjq/sB6ghoUZ74+VbXD3t9Rhrnt7fOMe1llWOcf/eoMmvOrJOrBPrC3ZxZEwyHAgyqEJDn2Z8KXTMUr41jge3KyhxRehflRcYhdXzwmE+8LOHaN7xLEZauOuafyBEVpjVN5UaaOm/v8mTn0TymV2j9R7D8Nycbz1gVeMrOhNW2GODxjvu5IoEHQh/myul28EecKGx05Xprcodr0a8Q6LKJg+ihJMxMrS3YEylp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/BCExchanger.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,10 @@
+MIDlet-Jar-URL: https://uljava.gjmptw.de/midlets/harmonized/Local%20Connectivity%20(BT%20and%20IrDa)/BCExchanger/BCExchanger.jar
+MIDlet-Install-Notify: https://uljava.gjmptw.de/Index/Index.php/BCExchanger.jad?installed=BCExchanger_harmony
+MIDlet-1: BCExchangerMIDlet, /icon.png, bcexchanger.BCExchangerMIDlet
+MIDlet-Description: Demonstrates the usage of the JSR-82 Bluetooth OBEX API by exchanging business cards between devices.
+MIDlet-Jar-Size: 29967
+MIDlet-Name: BCExchanger
+MIDlet-Vendor: Forum Nokia
+MIDlet-Version: 1.0.0
+MicroEdition-Configuration: CLDC-1.1
+MicroEdition-Profile: MIDP-2.0
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/BCExchanger.jar has changed
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/BCExchanger.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/DevCertTestMIDlet.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,14 @@
+MIDlet-1: DevCertTestMIDlet, , com.nokia.midp.test.devcerttests.DevCertTestMIDlet
+MIDlet-Jar-Size: 3152
+MIDlet-Jar-URL: DevCertTestMIDlet.jar
+MIDlet-Name: DevCertTestMIDlet
+MIDlet-Permissions: javax.microedition.pim.ContactList.read,javax.microedition.pim.ContactList.write,javax.microedition.io.Connector.http
+MIDlet-Permissions-Opt: javax.microedition.io.Connector.https
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MicroEdition-Configuration: CLDC-1.0
+MicroEdition-Profile: MIDP-2.0
+httpUrl: http://www.google.com
+httpsUrl: https://www.google.com
+MIDlet-Certificate-1-1: MIJs7jCCbFegAwIBAgIJAPNUaScSr5cxMA0GCSqGSIb3DQEBBQUAMHMxCzAJBgNVBAYTAmZpMRIwEAYDVQQIEwlQaXJrYW5tYWExEDAOBgNVBAcTB1RhbXBlcmUxDjAMBgNVBAoTBU5va2lhMQ0wCwYDVQQLEwRKYXZhMR8wHQYDVQQDDBZKUF9EZXZpY2VfTWFudWZhY3R1cmVyMB4XDTA5MDkxNjExNDk1M1oXDTEwMDkxNjExNDk1M1owNTELMAkGA1UEBhMCRkkxEDAOBgNVBAcTB1RhbXBlcmUxFDASBgNVBAMTC0phdmFEZXZDZXJ0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCXZ/GCV/N8foAkCQJfoiwGlwHO+f1lV9zloo0r0zosGtVqItLXKrvXEKylpOVWBygRVVrkl30Y1Cxess4aS1UmZ1rcvwL0jcvwlkZGacJazjtHE4UQuYJz9WRbYOaQxR2SVS/wU2Ptu/mr0ZgqFhgaJ1FzCuBdNaWzx2mGV9az/QIDAQABo4JqxjCCasIwKQYDVR0gBCIwIDAOBgwrBgEEAV4BMQEBAwQwDgYMKwYBBAEqAm4CAgICMA4GA1UdDwEB/wQEAwIHgDAXBgNVHSUEEDAOBgwrBgEEAV4BMQECAgMwgmpqBgwrBgEEAV4BMQECAgcBAf8EgmpVMIJqUQwPMDA0NDAxMDE1MDc2OTU5DA8xNDM3MjU3ODc0MDc3MzAMDzAwNDQwMTEwNDIzNjk4NQwPODUxODA4MzAxNzgwMzcwDA84MzYwMTU2MDMxNDY4MjgMDzM2ODYxNzM4NzAzNzM4MAwPNzY2NjI2NTYyMDM3MzI4DA84NjgwMjIwNjUxODczMTgMDzQ3NTEzNTQ0MzEwMzQwNAwPNDY0NTI4NzEzODY1MDY1DA84NjEyMTU3NzIwMDczODUMDzQwNzQ3NTAzMTI1NjYxOAwPNzQxMDY1MDUxNDE1ODI2DA81MzI1MTM4NTc4MzM1NTMMDzA4ODQ1NDM0Mjg4ODg2NQwPMTY1MTEwMDA3ODE1NTE2DA83NzYwMTU4NDUzNDgyODgMDzIyNTUzNTY4NjA4ODYwNQwPNDUzNTUyMTc2Mzc2MjcyDA8zNTAwNTM1MjQxMzMyMDYMDzg4NzU3ODg4NzM2MTM0NwwPNzgxODA1MjY0ODE0MzQyDA8yNTM4ODg2NzUzNzUxMjgMDzMyODczMzE2Nzc1MDg1OAwPMjA2Mzg1NDYyMTM4MjUyDA82NTA1NTIwNDcyMjIzNDMMDzA2MjQ4NzM2NTAxMzMyNgwPMzM4NjAxODY2NTcwMzcwDA8yNzcwMTgyMTEyODYzMzYMDzA3MDE2MzQ1MzQ3MzExMwwPMDM3MDI1ODcxMzE3ODc3DA81MjMyNDMzODgyMDA0NDIMDzg1NTcwODIzMzAyNjQzMQwPNTQzNDU4MzEzMzc1ODI1DA80MDgwMzUwNTQxODIxNzcMDzcxNjYyMjEzMzMzMjEzNAwPMTAzNzY1NTEwNDcwODQ3DA80NjAxNzgwODEwMTQ0NjYMDzMxMDYxMTQzNzY2NDUyMAwPMDQwMjM1MTMxMDE3NjI0DA8xNTIyMzUzNjA1MDg1NDQMDzc1NjU3Mjc2NDI1ODE3NQwPNjcwNjcyMTIyMzAzMjU3DA83NzUyNjU0NzQ3MjgwMjMMDzQyMTgwMzg1MjE0MjE2NQwPODE0MTcxODU0NjQ4MjcyDA80Mzg2MTIwNDczMDY2MzUMDzY2ODA4ODQ1MjM3NDAxNAwPMjMwMDgyNjEzNDYzNTM2DA8yODA4MTYyMjMyMTExMTYMDzc4MjM3MzE2NzgwMTgwMwwPMDYyNjU3NTgwODMxODMxDA82NzI0Njg2NDc0NTUwNTYMDzgyNTUyODAzMjY0NzQ0MwwPNDU2MzAxNTA4NzEwMDMzDA8xODgzMTg4MjAzNjI0NTcMDzQ4NDM3NjExMDUzNDQyMgwPMjMyMzU0MTQzNDE1NTU4DA84NDc2NzAxNzc3MDI0MTAMDzc4NDIzMTY3MDE3NDY1NQwPNDc2Nzg0NDI1MDE1MTMyDA81MTEzMTU3ODA1NjcxNDMMDzA1MDUxNjgyNDg1Mzc3NQwPNDUxNTA1NjA0MTE3NjQ3DA8wNzc3MzU0MTc0NzcwNzcMDzQ4ODQ3NzYzNTE3MTU1NgwPMTQ4NjM0MzM1MDgzNTgzDA8yMjMxMzE0NzI1Mzc0NzcMDzY1ODQ4ODQ2NzI0MjA1NQwPMzYwMTU2NDYwODU1ODM1DA8zNDc1MTczMjM2NDMwNDYMDzMwNTE3MDA0NDQyNjQ4MQwPMDg4NzMzMjAyMzUzNzQwDA8zNDY2NzY1MjY4MDA1MDMMDzUwODQ1MDEwNjM3MzY1NgwPMjAxNzM2NzEyMDUwNDg3DA80MDMwMDg1ODMwMzE1NTIMDzM4NTUyMDQ2ODA2ODAxMgwPNzIwNDc3Njc4NjM2NDg3DA84MTM4MTc1NDQzNTY3MzAMDzgyNzIyMzc3MzY1NTEzNQwPNjQ3MDEwNTUyMDA3ODY2DA8xODAzMjExMTg4ODY2NzIMDzc0MjEzMzg4MzgxNDIzNQwPNTc1MzU1NzQ4NTMwODgwDA8zMTAzNzAxMTY1NDcyNDMMDzQ0NDQ4NTU1Mzg0NTE3NQwPNzQzNzc1NzA4MjM2NDM3DA8yMzc1MjQxNTg3MTUxMTMMDzI3NzQwNTUzMDE2MzAyMAwPMTgyMzA3MTU2Mzg3MzM2DA8xMDMwMzA2NjIyNjA0NzAMDzE0MTYyMTU3MDI1MzI0NAwPNDY0MDcyMjc2NjQ1ODM3DA80NTUxNzc3NDczMDQ1NTcMDzI2NzYwODgyNjY3ODY0NgwPMzQwNjM1NjMyNTc3NDg0DA8wMTUxNzcwMzI2NjM4MDUMDzgwNzI2ODcwNzY3NjQwNQwPMjA1NzQ2NTE1NTQzMDIzDA82NDU3MzA4MTUxNjcwMzUMDzAzNDEzNjM0Mjc3NTAxNwwPNTc4ODAyODAyNDYzMzYyDA84NDA1MDUzMjE4MjM2MjcMDzA3NzEyNzYxMTEyNjUyNgwPMDE4NzU0NDgwMDM3NDM4DA8wMjEyNTgwNzAzNDE1NzgMDzg2MzAyNjcxNDcwMDYyNAwPMDU2NjQ0MjQ2NjA1MTEzDA8xMjIyMDMxNTcwNTg2MjEMDzgxMDY3NjQ2MjU0MDU1MwwPMTUxMzM1NzUyNTI3NDc0DA8wNjA3MzQyODg0MTgzNTQMDzEyNzYxMjI2NjE0MjUxMAwPODY2MTI0NDU3NzE2NDQxDA8zNDAwNjI0ODY3ODE2NjYMDzA1NzcyMjMwNTE4MzQ4MgwPODMzMzU2NTI3NDI3ODc2DA8zMTA2MjI0NjI0MTM0MzQMDzQ3NDYwODY1MzEyNjA2NAwPMDQzMzIyNzg1MDgxNzM2DA8zNzY0MTAzNzcyODQ2NTIMDzYxNDg3MzQxNDY4MTA3NQwPNjM2NDc1NTgzMDgxNTE4DA8zNzIzODAxMjgzNDAwMzUMDzcxMzEwNzAyNzIwNDcwMQwPNTU2MDA4MTY1MDg4MDMzDA83MjQ4MzQ4MTgyNjY2NTcMDzA2ODA2MTMwNDcyMzg0NgwPMTMzMzY1MjMwODQ1MDUyDA81NDQ2MDI1NjQzNzU0MjgMDzQ4MTM0ODQ3ODAwMjEwMAwPNDExMzA0MTUzMDA0NjcyDA83NTYyMzUxNzc3MDEzNTAMDzIwMTI3NTg3ODMzMTc0NwwPNTg2MTQ4NTYyMzM2NjgzDA84MDQ3Mzc1MjM0NTgzMjYMDzMyODYxNjI3NzQwMjAwOAwPNjU1ODMwNTExNTEwNTA4DA8wNDgwMDc1Nzg2NzIyODUMDzM1ODM2MTM4NDEyMDcwNQwPNTg1MzA2NzU1MjUwMDI3DA81MDU3NjQ3MjQ2MTExNjcMDzQ2NjU2MTc0NTMxMDU3NAwPNDU1MTUwMjI4NjQ3MTc3DA8yNDM1NDY0NTY1MDI4MzAMDzUyMDI4NjUzNDE0MTQ0MQwPMTUzNDA4MDc0NzAzMDE0DA81NjUwNjE1MTEwMjM2MTAMDzQ4MDExNDMwNzIwMTc1MwwPMjQ1Mjc2ODc3MTg3ODY2DA80MDY3MDgxMjM1NzExODQMDzQxMzU2MTA4NTY2MTAxNgwPNDIyMjI2NjEwMDcyMzgwDA8yMTEwNDE3MjU1MjM2MzYMDzU3ODM1NDE2MjQ3MzIzMwwPMDU4MTExMDQ3NzQxMjEwDA82NDUyMTAyMDAxNzI2NDgMDzA0MzEzMTc1MDE0NDA4MgwPODc3NTIxODg2NjE3NzU4DA80NjYxNTgyNTA2MTUzNjgMDzg3NTY4MzA4NjE2MjExMQwPMDQ4NjQzNjM1NzEwODUwDA8wNzg1NzY2NTYzODE4MzUMDzE4NTQzNTU4NTE3MjU3NAwPNDMxNjYxMjc4NTUwNDU0DA8yNTgwNzQ4NjU3MjM1MzAMDzM0MDc4ODYzODA2NzQ2NQwPNjE4NDIzNjMwMTM0NzczDA8yNjgwODQyNzQ0NzAzMjAMDzI4MDgxNDMxMjA2NzM1NQwPNDEyNjUxMTA4MzAxMTYzDA80NTE4ODIxODc4NTcyMjAMDzQ3NTYwODc2ODE0NzY2NgwPMDU3MDAzMjcxMTUyODI3DA8yNjAwMDYzODg2MjExNjYMDzM1MDg3NDQxMDUyMTMwOAwPODM1MDAwMzUzNTcxMTQwDA81MTU3MjAzMDYxMjg3NTYMDzA1ODgzNzY0ODQwNDg1NQwPNDA4NDg2NjQ0NDMzNDM2DA82NTg0ODM0MTIxMjM2NzcMDzU4ODA0NzA1NTM0MDYzOAwPNTA3NDMzMTMwMDY3MDY1DA8yNjQwNjcxNzc3NDc4NTgMDzQ4NTEwMTM4MTY1NjE1MAwPMzEwNzYzMzY2MjIxNDU1DA83NzIzMjMyMTEyMTQyMjQMDzU0ODg4MTU0Mzg4MTY0NwwPNDc2NTYyNTE3NzIzMTE2DA8wMTAwMTQ0NjEyODE4MDYMDzUwNzM1NzA3MDM4MDUyNwwPNTg3NDQ3ODIyMTExNTA2DA81MzY2NTExMjI2ODc0NzIMDzIxNDc0NTAwNjU0NTcyOAwPMjg2MTY2NzUxMTA2MzA4DA8xNjg3NzA1NDQ1MTIyMTcMDzM1MjU3MzcwMzQxMzU0MwwPMzAxNDEwODc4NDI2MjE1DA8zNDY2ODQxODUwNjgxMjMMDzUzMzA2NTMyMzEzNjI0NQwPNjA1MDE3ODUyNzU1NDM1DA80NzcxMzg3NTc0MjM2NjgMDzY2NzA4Mjc1NDUwNTUyMgwPODczMjQ1MTM4MTAwNDAwDA81NTc1MDI0ODczMjQ1NzEMDzI1MTEwNDAzMTcyNjI1NAwPNjI4MTA0NTEyMTU0MDAxDA80NzQzMDM1MTExMjI1NDUMDzQ4NDY4ODc1MDg2MTI4MgwPNTMxNjY0ODAxMjA3NjY0DA80NDc3NjA0MDUzMjM1NDcMDzgxODA2NjQ0MjgyMzQxMQwPNDg0NzQ1NzUzNTcxNTAyDA83MDM1NDE4Mjg3NjUwNzgMDzA0NDAwODczMTEyNTY0NAwPNTM0NTAzNjE4NTA3MDczDA83MDQ0NzE4NTE4MzQ1NDYMDzM0ODEwNjMzMTUyMDg0MgwPNzY0MDY3NTYyMjM1MjA0DA80NzQwMzEyNTI1ODE3NDUMDzU2NzQzNzQ4MzY2MjQ0NgwPNTIyNzM0NTg4MTY2NjE4DA8zNDU1NTQ0NzA0ODgwMjIMDzAzMjMzMjAyMzYyNjQzMAwPNjUwMDg0NDc1NTU1ODYyDA82ODE0ODA1NTM3NzM0NzcMDzM0NzMyMDI1NjE3NDg3MgwPMTA0NTIxNjY2Njg2NjI4DA81Njc2NDg1MTM3MjMzNzMMDzU4NzUxNzg4NDA2MzAzNAwPMjI1NTI3MDAxMTYyNDU1DA8zNTc2MjQzNDc1Nzc0NTAMDzY3NjQyNjQzODc2NzI0MAwPNDg2ODM0MTAwODA4NzU3DA8xNTg1NjY0NDM3MDA2ODUMDzY0NDY2ODE4MDU0NzY0MwwPMDQyMzU3MTQ3MTgyNjY0DA80NTA3NTQzODQyMzA2MzEMDzA1ODA3Mjc4MjIyODI4MwwPNTY1NjE1NjEwMzQxNzYwDA84NzIzNzIyODc0ODIzNTIMDzYzMDE2NzY0ODE1Njg4NgwPNjEwNDAzMzg2MDUzMTY4DA8zODA1ODQyMTE0ODEwNjUMDzExMzg0NTM0NDY3MjI1NgwPMjY2NDY1MzEzNTUzMjg4DA80MDExNTc2NzMyODAyMDcMDzc2NzI3NTQ2NjM0MzA3MgwPNDczMjY2NDY3MTU3NjA3DA8wMjY2NTQ2MzA1MzEyMjUMDzYxMzU2NjgxNjExMzg0MgwPNzE1MTE2MjE2NDI1NzcxDA8wMjY4MzcyMTQ2MDMyMzMMDzE2NjM2MzY1MzE3ODUwNAwPNjgyNDAwNjExMzQ0NTM3DA80MDE3NDM0MzMwNDI1NDYMDzY0MDc0MDMyNDg4MDgzNQwPNDU2MTQ0ODM1MTg2MTYyDA8xODI0NTYyNjI0NTcwMjQMDzQwMzEzNjc4ODY1NzI0NgwPNzUyMjE3NjI3NTQxMTIxDA8zMTcyMTQxNTgyMTYxMzgMDzM2MDI3ODA3MjA3MTA0OAwPMDU4MjA4MDgzMjg4NzIwDA80MTgxNDgwMDUyNzc2NTgMDzM0MTg1ODQyMjgwODYzNwwPNTU1MzIxMDI3MjMyNTE3DA83MjYyNjY3NTQ2Mjc2MzUMDzQwODc2NTg0NDExMzQ1NAwPMzAzMzc2ODIyODg0MTc4DA80MDE3MDI0NTMyMDYyNzQMDzIxMTcwNDc2NTE3MTIzNAwPMTg0NzEwMDY3NzgyMjAzDA8yNjIwMDAyMDQ1MjI1NjQMDzg4NDI0Nzg4NDI3Mzg4MAwPMTIzODAyMTI0Njc1NDA4DA8zMTczMDYyMjY4ODIwODQMDzQxMzc2NzQ4MzEyMjQ2MwwPMjc3MDU0NDI0MDQ3MzgyDA8xMTYwODA4NzU2NjE0NzEMDzE2MzY3MTIzNzg4NzIyMwwPODc0ODI1NjYxMTczNTU2DA80MjU1MTg0NjA2NTI2NzIMDzA1NzMyNzU0NTgxNTE2MAwPNDIwMzU0MzA3MzI2MzQwDA83NjQzMjYxMTc0MTQxMzcMDzQxNDEzODIyNzQ1MTc3OAwPNDE0MjE4MjQ3MzI4NzEzDA81NTAwNzE0MjIyMTE1MTAMDzE2MjcxODUwNzQ1NjYyMQwPNzE0NDc3MjI4MjAzMzE0DA80NzgwODAwMDAwNTg0MzcMDzI1NjQ4MTY1ODQzMzQ0MAwPNjYyODU0MzU2NjY4MzQ1DA8yNDE2ODY2NzY1NzI1NzgMDzUwMzIxNDE1MDU1MTU1MgwPNjAwNDU0MTI1MDU4MTc3DA83MjYxNjQ2NzY3MjMyMTgMDzUyNjMxMDMwMjMyNDA4MgwPNjgwNTEwMzE1NzI3ODgyDA80MjY4NzgzODE1MTcxMjgMDzQ3MzQ3NzI2MzM1NjAyNwwPNDgxODE4MDg3NTMxNjE4DA82NTIzMTY3NjY1MDg1MzIMDzM0NjgxNTI1NTcxNjc4MgwPNTcyNTY1ODQ4ODM2MzA2DA81MzMzNjQ3MzAyNjM3MzcMDzAwNTI1MjQ2ODEyODA2MAwPNzYxODIzNjM0NjA2NTQ0DA8yMDY4NDA1MzQ1MDE2MjUMDzgyNjg3MDExMTA4NzQ1MAwPNzcwNjUzNDE4MjE3NDU4DA83NjM0MzY4MTI4NDg3MjgMDzA2MjYzMjQyNjM1NTI0MAwPNTUzMDY1MzQ2NTU0MjQ2DA8zMDE3NjQyMjQ3MzA2MDEMDzM3MTUxMTM2MjQxMjA3MwwPMDgyMDg3MTc0MDA2NjA4DA8zMTg1NzQwNjA4NjA1MTgMDzQ4MjQ1MjIxMTUwNzIxMQwPNTQwNTAwNTQ2NzcyMDI2DA8xNjczNTAwMDQ2NzAzNDYMDzQzNTExMzIyMjE2NTExNgwPNjY3ODMzMTY0MTM0MTYwDA81MTI2MzYxNDEyNjIyNjcMDzcxMjA2ODA3NzUyMzMzNQwPNjY4MDMxMDc1MzU1NzU2DA82NTM3ODgxMzI1MDUxNjgMDzg2NjIyNTgxNzI3ODMzNgwPMjg2NTg3NDc2NjM0NzMzDA80NTQ2MTQ0MzU2MzY2NjIMDzQxMzU3ODEzMjMyNzgyMAwPNjMxMzQ1MzA2Nzc1NTQ0DA81ODA0NDczNDUzMjgzNTgMDzY1NTI1NTU4NzYxMzQ4NwwPMjUwMjAzODUyMTM3Mjg0DA81Mjg3NDYzNjg1MjAwNDgMDzIxNjE1NzQzODM0ODA3NgwPMjEzMzAzMTE1MzEwNzM0DA8zNzUwNzg0NDgwNDcwODAMDzM3Nzc1MTE3MzExMDc3NQwPODE0MDAyNjIxMjIyNDUyDA81NzY0MzM2NjAyNjMyNTAMDzIzNDAyMTI0MDExODA1NgwPODg3NjE1Nzg3NzEyMTAzDA84NTUzNTYxODA3NDE2NjgMDzc3NjA4NzgwNzgyMjE3MwwPNjU3MTg1NjcxMjIwMTI4DA8wNTU2NDAyNTQ4NzU3MTEMDzcyMDMyMDE0MjI3NjU1MAwPNjE2NTgzMDcxODIyNTc0DA81MTEwNDQ0MzEwNjg0MTAMDzgzMDg1NTM2MTAwMTQ1NwwPODAwMjA0NDAzMzAxMDI2DA8wNDM0NjIxNjg3NTE3NzUMDzI2MjYyMTc4NzgxNjQzMgwPNTc1NTU1MTQ2MTIwODY4DA8zNDEzODI1MTYwMjI0MzUMDzE2NTgzNzE2NDM2ODAyMgwPNzY3Njg0NzI2MTE3NDA1DA8yNjM1MzU4NDExNTEzNzAMDzAyMzAyMDE3NjM4MTI2NwwPNTg1MTI2MjgyMzgwMDQ3DA81MzgxNDI2MTgyMDM2MzQMDzczNDM1NjA1NTEwODIwNwwPNjA2NTA3MzE1MTE2NjE3DA8xMTgyMjA2MzYxNjEzODUMDzQ2NjY4MjE1NzIzNjg4MQwPNDUwNTc3MzI0Nzc4NzQ3DA80NjE1MzAwNTIxMDAzMjUMDzM1MTc4NjY1MzQ2NTYyOAwPNjIwMDE0NDM4NzMzNTM0DA8yODQ1MjA2NTE4NjM3MjAMDzUwODA1NTQwMzM3MDEzMgwPMzIzMjI2NzM3NzY4MTY1DA8wMTQyNDcyMTM2NDA0ODEMDzI0MDYxNzgzMDc4MjU3NQwPNDc2Mzc2NTY4NTQ4MDcwDA8yMzY4MzI4ODMwMTYzMDcMDzIzODYzODI3NjIzNzA2OAwPNTA3NzYxNDc1NDQ4MzUwDA83MjgxMDAwMzAzNzY3NzgMDzU2NjMxNDU3MDU1NTA2MAwPODY4NzExNjIzMTc0MzMwDA84MTQxMDgxNzU2NTI3MjMMDzIyMTc0MjQzMjY1NzM2MQwPNjA3NjgxMzYxNTgxMDU1DA83MzMwMDE0MDE2NzQ4MzgMDzY0MDQwMDUwMzA2MjI1NwwPMTI3NDI0MjQ0NTc4MzMwDA8xMDcwNjM1MTc3NzIwMjUMDzQ1MDUyODE3MzU1Mzg4NwwPNzE1NTExNDYyMDE2NzczDA8zNjQ4NzcxMzAzODExMjgMDzEzNDAwMTQ3MDI0MTE2MAwPODAzNjQ2NTE1NTIzMTUwDA8wODcxNDI3ODc1MTA3NjAMDzM0MjI3ODcxMjM3MjEwNgwPMzc0MDA3ODMwNjcxNzU2DA83NDY1MzE1MDAzMDU4NjcMDzEyNjM2MjQ4MzUzMzA1OAwPMjMzMjIwMDI3MTE1NTE1DA80MTQzNjMwMzc3NzA1NjYMDzM1NTE1MjEyNDAwMDg2MgwPODQwNzczNDU1Nzg1MTgwDA80NTc2NDQyMDExMjIzNDYMDzEzMzg3ODMyMjgyODU4MQwPNzM0NDQ3NTMyNTAzNTIwDA8zMTAwNDQyODYyNzczMTEMDzI4MTY3MDY2MTIyMzE0OAwPNTAyMDI2ODE1NzE4NDI3DA8wMzA3Njg1ODE1ODI2NDEMDzI4MjQ4MDYxNDU1NzMxMwwPNDU3Njc0NTU0MzI0NDA1DA84MTc0MTc2ODI4NTcwODEMDzMwNDE0ODI1MjEyMDY2NQwPNTEzMzExNDMzNzA1Njc2DA83NzUzNDI0Njg0MTI3ODEMDzM0NzgyNTczODc3NzA0OAwPNzIzODQ3NDYzMDQwNTI4DA8zNTI0MzA3MDc2MDYxNTIMDzc3ODgzNDU4MTI0NzQxMQwPMzQwNjIyMjMxMDg1MjM4DA83MzQyODIwMzU1NjA4MjEMDzgxMzgxMjY2NTI4NzQwMQwPMjI4MDI4NTExODUwMzI1DA8yNzgwNzE0ODE4MDIzODAMDzM4ODg0NTU0NTcwMzIzMgwPMDgwMDE0MzUxNDM1NTEzDA8wNzQzODUxNjcwNTUwMDcMDzQ2MzQxODM0MTUyNzAwMgwPODAzMDcyMTM2NDI0ODg3DA80NjAxMjMwNjgzNTIyMTcMDzMxNzAwNjU1MDE0Njg1MwwPMTcwMzIyODAxMTY2NTgwDA83MTM2NDU4MjI2Mjg4ODMMDzA3NTA0ODc2NzgyNjg3OAwPMDQ2MjA2ODYyNDY4NTgzDA8wMjc3ODM2MjgzMzgyNDYMDzIzMTY3MjA0NzAzNjc1NQwPMTUzMzIxMTQ1MzAwODQwDA83MTIyNTMyODQyNTExNTMMDzYzMDMyNjcyMjU3MzQzNwwPNzY0MTIwMjEyNTc2NzUwDA82MzUyMjczNzYxMTU2ODYMDzI3NDc2NDYzMzc3MTcyMAwPMzM0ODIzMjM0NTY2MjE4DA8yODYwNTg1NDAyNzM4NjQMDzA3NTg2MDMxODE3ODIyNgwPMTE3MzY3MzIzNTg0NjgwDA80MjI2ODg0MDc2NTE0MjQMDzQyODgxNjA2MjE0MzI0NQwPNjEyMDY3NTU1NzUxMjMzDA8yMTcyODM3MDg4NDY4NDYMDzc4MzgwMDI2NzcyMzE0MwwPNTc3NzY1MTI2MDI3ODU2DA8wODAwMDM3ODIzMjA3MDcMDzM3MzM3NTA1MzY1MDQzMAwPMzg1MjI0MDY0MDU3MzUzDA84ODQ4MjMxMzg0MDA4NzAMDzA3NzQ0NjYwNDEwMjMwNgwPNzM4MjgwMjM1NzYxNjg4DA83NzM2ODAxODU1NjIzMzMMDzU3MDY1MjYwMDQyNTMzMQwPMjQyNjQxNTcwMjg3MTMwDA8wNTc0NjczNDc3NDc1NjUMDzczODIzNjU3MzgwNDU0MAwPMDU1MzIxMzE3ODgzNDgzDA8zNTEzMjc1MDMwMzQwNDYMDzA2MjMxNTQ4NjY3NzI1NwwPMDc0MDEwNDMwMTI2MTY0DA83MDQ4MDE1NDI1ODI1NDQMDzE2Mjc3MjQyNTg2MTgzOAwPNTY4ODgyNzI1NzY3MTcxDA8wNzgyNTQ1NDE2NDM2NDYMDzY3MzE3NzI3ODM4MTgyNwwPNzEwNzU0Mzg0Mzg3MDg1DA8yMzEyNjg1NjA0NzIzNTYMDzIzMDYyNjgzODQxNTg2OAwPODcxMjIyMzI4MDY4NTQwDA80NTg3ODUxMTIyMzY4MjAMDzQxMjQyMzYyNTE1MDYyMAwPMjUwODUzNzExMjAzNDQ3DA82MDExNTcwMzg3NzUzMjcMDzM2NTQ2NDM3MjE2Nzg4NAwPMTU2MjAyMDgyMjQyMTQzDA84MjYwMDQwMzc3NTcyODAMDzIxNTQ1MDIzMjA4NjE1NAwPNTY3MDE4NTI3MDc2NjI1DA8yNDUyMjc0NjUxNjYzMDQMDzc4ODI4MTAyMDQ0MDQ1MQwPNDc2ODQ3MDI4ODg0MTYwDA83NzE0NDY1MjY1NTA3MzUMDzc1NDIyMzg1NTYzNjAxNwwPMTQ0NjE1NTA4MzQwMjA4DA83MjcxNjUwODMwNzgwMDUMDzEyNjQ1MzIyMjMwNjY3NwwPMjU3NTExNzY3ODQwMjgwDA8yNTg4MTA3MzYzNTAwNjAMDzE1Mjg1MjM0ODcxNjU0MgwPMzE0NDE1NzcyODc1NzA0DA83NjE3NzU3MDUwNjg4MzgMDzA0MzU2NzE4NjI0ODI4OAwPMDMzNTc0MjI3NzE3Mzc0DA81MDIyMDY4NjM1NTY0MzcMDzgxODM3ODMzNzE2NDQzMwwPMzExNDI4ODQyNTQxNDEwDA83ODYxNzQyNTE0MDc1NDMMDzM1NDg2ODQxNTAwNzQyNAwPNzg4Njg0Njc4Nzc4NTc0DA8wODc3MjAyMDUyMjA2NzQMDzIzNzQyMTcxODA2NTU2NAwPNjQzNjIwNzU1Mjc0MzM1DA81MTg0MDMyMDY0NzIxNzgMDzA1NzIzMzQ3MjUwNDQyNQwPNTgxMzI2NDY1MjY3NjYxDA8yNzc3ODM1NzM1MDc3NTUMDzg4NTAwMjA0ODc3MDAxMAwPNDczNzIzNjcxMjgzMzE3DA8yMTQzMTgxMjcwODE4MTAMDzA4NDU2ODg2NTAwMjcxMAwPNDc2NjE1MTg4NjAzNjMxDA83MDcwMDcxNzQ1ODM3MTAMDzYxMTUyNjcwMTEzNzEwMwwPMjEyMTczNzM1MDI3ODA2DA8wODgyMzgzMzEzMjA1NDUMDzU1NjEzODEyMjYyNjU4NgwPNTU4NDQyNzQ1ODI4NDI4DA8wNDQwMDIxNDUzMTAwNDMMDzU4MjQ1NzM0Mzc3MTY0NgwPMDg3NTM3NTY4NTMyNTQ4DA81MDI0NjU3NjA4ODg0NDcMDzE1MTUwMzYyMjE2NjM4NwwPMzQ0NzQxMjI2NDU3MTIyDA8yODIzMDU3ODI0NjY2MzQMDzYyNDMwNjE1NTAxMTU2MAwPMzA2NTE2NDUyNjI3NzUyDA81NDMxODc4MTg0Mjc1NDgMDzQwMTE4NzA2NTgxMDcxMgwPODc4MTgzNjE3NDUyMDE3DA8xNTI0NzgzMjY3NjUyNTUMDzEwNDIzNjgyMDY3NzEyMgwPMjM2MDM4MDczNTU3ODU1DA84NjAwMDI2NTczODQ1MzcMDzcxMjQ2NjAzMzAxMzI0NgwPNjU4NDcyMzM0NzgyNDUyDA82Mzg3ODY0MjMzMzg1NDIMDzUyODA4NzA0NjYxNzQxNAwPMjM4NjMwMTM2NzY1ODczDA80NjM1NTc0MTM2Nzg1MjUMDzAxMTQzODU3NzQxMTUxMgwPODYwNzQwMTg0Mjg0MDc1DA8xNzQyNTgzMDEwMzU0MDMMDzc0NzYyNjI3NDg2MzA2MwwPMTcxMDY2NTMwNTg1NjEzDA8zMDYyNDU0MTcwMzUyNDUMDzQ2ODUwMTA2MjEwNzUxNwwPODQ3Mzc1NjUxNzcwNTMxDA8zMDM2NjM3MzY4MzAxNjYMDzc3MDQ2MjY0MTMwNzg4MAwPMDcxNTUxNTMxNDYzMzIwDA81NzAxNTgyMjMyODcwMzgMDzE4NzA4NDUyNTUyNjM4MAwPMjY2NTE1MzAxODgzNTc2DA8yNDc2ODY4NjcxMzYzNjEMDzcxODM2ODAyMTIzNjQwMAwPMDIyNzUzMjcwMDAyODg1DA82MDMxMTgxNjA2NzY2ODQMDzY1Nzg2Njc1NDU2NTM2OAwPMDgyMjE1MjQyMDcyMzEwDA8wMDYwMDM1NDQyMDA1MzcMDzMwNzU2NTUxMzEzNzYxMAwPNTY0MjIyMTA3MjI1MzE1DA82ODQyODIxODg0NTYzNzIMDzQ4NzY1MDYwMTQ4NDMwMAwPNTU4MDYyMjgwMzE4NzQ1DA82NDM0ODMzNjE0NjI0MzIMDzY4MTY4MDExODUwNzg2NAwPMjU3MDMwMjQxNTA0ODY4DA82ODg0MDQ2NDU0NDEyMjMMDzMyMjQ4ODIyMzI1MTA1NAwPMTQ1MzcxODMyMDUxMDQ0DA8yNjQ2MDYzMDMzNjAxMDEMDzg4NDgyMzQ0ODM0ODgwNAwPMTQxMzgzODEyNDU0NTIwDA8wNjA2MTU3NzUwNTM2MjUMDzc3NDQwNjAzMzQ1NjI0NgwPMTQ4MzM3MzE2MTQwNTA0DA81MDU0MzI3NDU3MzY1ODMMDzQwMjEzNzU1MTI0NzY2MgwPNzQwNjI1NDg4NDcwNjYxDA80NDIxMjc2MjQ4ODc2MTgMDzA4NDgxNDgxODMyMTg1MgwPMTg1MDg2MjEwNTY3ODE2DA8xMjUwMjQxMzUwNTcxNzEMDzQwMzg2ODQ2NzMyNjQ0NgwPMjY1MTgyNzQyNjM1ODU4DA80ODczODUxNDczNjA4NTcMDzIwMzU2MjQzMTQ3NzQ1NgwPMzA3NzA2NTg3MTY2ODU0DA80NzQ3NTI3MzE3MzEzNjUMDzQzNjQwNzgxNTgwNTI1OAwPNjYxNjI0MTQ2NDI4NDMxDA80MTI2MjE0NjU2MTMyNTgMDzQ1ODc1NTI2NDY1MDM3MAwPMjcxODczNDE3MTU0NTMwDA83NjM0NTMyMzE2NTA0MTMMDzU3ODYxMzM2MjM1NDI3NQwPMDcyMjc1MzUyNjcyMDU0DA83NzM0NjE1MTQ1NzQyMzQMDzI3MDQ4Njg2MjIyNzI3MAwPNjE3NTYxNDA2NzcyNjQ0DA83NDc3MDc3NjIyMzg1NjEMDzA3NDYwMzA4NzE0NzA0MgwPODU1Njg1NDA1MjQ0NTQ0DA80NTM0NzMyODM1NDU3NzgMDzQ4NTU2Mzc0NTIxNTI0MAwPODEyMDg4MTM2NTY3NDA3DA8xMTU2NzEyMDgzODcwNzUMDzgxMTI0MjE0ODczMDA1MAwPODIyNzU4MTEwNjYxMzUwDA8xNzcxNjU0NTIxNzIyMDEMDzczODM3MjIxMDYyNDc1NgwPMzUzNzY4NjE1NzY3NDM0DA84NTg4NzMwMzU0MTA4NTYMDzcxMDYwMTc1MzczNzMwNAwPMTU4ODAzMTA2NjU4MTIzDA84NTc3MDY4MzQwNzc3MjAMDzI2ODI2Nzc1NjQ2Mzg2NgwPODgxMzUyNjE0NzU4MDgwDA80ODc2MzQwNDE3NTg3NDgMDzQ2MzAxODU2MjQwNzEwNAwPNzg2NTA1ODQ3MzY0NDM2DA8wNzg4MTE3MzEwNTUwNTEMDzQwMjYxNjQyNDAzNzg3NQwPMjMzMDMxNTMzMDE3NDA2DA8xNzMxNTE4NjYzNzc2ODIMDzE1MTc0MzE1MzExNjc0NwwPNTIyNjE2NzM1MzMwMTMzDA82NTQ3MjAwODc2NjA1MTgMDzQ3NTgwMDM1MTIyNzMwNwwPNzExMjYxNTgwMjAxMjQzDA80ODYwODMwMjAyNjQ4NjAMDzE1NjIyMTAzNTIxMDc3NAwPNjEyNjMyNTgxMDQyMDY2DA84MDU2NjM3MzUwMTQ0MDMMDzc2MTQ1MzcwODU0MzI2NgwPMTI4NjE1NDg1NzI0NDIxDA81MjExNDY3NDU1Mzg2NTMMDzAwODM1MzAxNzE2NDgwNgwPNTgxNDQyMTIzMTAyODU0DA8zNjIxMTYxNTcxNjAyMTAMDzMwMzg3MzUxNTAzODc0NQwPNDU4NDU3NzQ2MjIxNjQ0DA81NTIyMjA0NDAxMDY1MzcMDzgxNDI3NDcwNTI4MDMzNAwPMDQ4NjA1NjI2NjU3MDg3DA82NjMwNTUyNzc1MTg0NDIMDzg3NTAxNDA3MTc2NzYwMwwPMzI3ODUyMTgyNzc0NTQ1DA8wNDQ4NzU0MjM2NTE4MTcMDzI4MTExNTcxNDMwNjAzNQwPNDgxNTY1MzU3NTE3NjgwDA8wMTEyMzE3NDI3NTQzMDgMDzIyMTg0MjY4MTUzNTEwMAwPMDYyNzQyMDMzODgwNzUzDA81ODUxMzAzMDUwNzEwNjcMDzM1MTI4Nzg1MDA1NjcwNQwPMjcyODEwODQ1MzI4MDYyDA8zNTg1MzQ4MTAzMzgyMjMMDzQzMDM1NjY2MjAyMzIxNAwPMzY1NjM1NDY4ODM1NjM2DA81MDA0MzY3NjMwMzQ2NTQMDzAyMTE0MDg0MDQwMDYwOAwPMzEzMTMzNjg0ODM1NDgyDA81MTA0NjI3MTgyMjU3NzQMDzc3NTE2MjMzMTY4MTIwNwwPNjQ2MTU0NDQzNzU1ODM4DA8wODUzNzAzMTAzODI0NTUMDzU3Nzc2ODM1NDc2ODg3NwwPMjQ4ODQyNzIzNDU2Mjc0DA8yMDU4NjY2NjE4ODA2MjYMDzE3NTI4ODQxMzU3MjE2MAwPNTA0MzQyMTU1NjIyMzcxDA81ODY2MDE4NzY4MjY1NjYMDzEzMjUxODYyNTgxMTUxMwwPNDIzMDc4NDIzNjcyMzUyDA8xMTQ0NzczMTI1ODY2NDEMDzU2NDU4NTM0MTgyNDgyOAwPMjU0MTE4NzY1NjQzNjI0DA81NjA1MjAxNDUwNTUwNzAMDzg4ODQyODI0NTcwODIwNgwPNDM1NzY2MTE0MTc3NTQxDA8zNjY4MDQwODQ3Njc0MzMMDzE2NTgzODY2NTU2NDU0OAwPNzA1NjgzMTg4NzU1MTczDA84Njc3MzEwODMwNDAwMDIMDzA0MTg2MTg2MTQ3NDA4MwwPODIxODQ1NDAzNDA3MTUzDA81MzExNTQ4NTcxNDMzNjEMDzA0MTgwMTUwNDQ1MTAxNgwPMDAzNDUyNDc2MDYyNzc2DA82ODE1MjMwMTAwODYwODYMDzMyNTAzMTUyNDM1NTY1MgwPMTczMTI2NDAyODQ3MzAzDA8yMDMzNzc2MTU0ODM0NjEMDzUzMDIzODA3MDQ3NTQwNwwPNjYwNDUxODIwNTMwNDE4DA83Mzc0NzQ1NTQ2NjQyNzgMDzAyNjAzNjc2ODgzMzMzMgwPNjA1NDIxNjg2MDYzODAxDA8wMTYwNzI3MjUyNTIyNDQMDzg3MDYzMDQ3MjMwNTQzNAwPMDMyODAwMzQ3MzE0MTgzDA8wNDg0NzY3Njc2NDY4MTIMDzM1MDMxMjEwMDE2MDA0NgwPMTU3MzM0NTg3NTQzNjUwDA8zMjExMTExNjQxODQ0MDUMDzI3NTU3MDA1MzI1MjA2NAwPMjU3NjMwMTAyNDg1NjE3DA82NDU3NDYzNTgxMDYwNzAMDzM3NzgzMjIxMjM3NjQ2MAwPMjE2MTc2MTE0MTUyNjM1DA80NjgyNDMwNTQ4NTM4MTMMDzc4MTM2MDEzNTI1NTU2NQwPODcwNDEzMTcwMjg1NzU2DA83MTE3NDQ0NDE2MzQwNzEMDzEzNjE0MDAwNDU2MDIxNgwPNDA4MjQ4MjEyNDg4MTUwDA8yMjY1MDU3NTE1MjgyODgMDzY0NzU4MzcwNTAzMjYyNwwPNjUzMjQ1NDMwMzg4MDUzDA8wMTQ4NjUwMDMwNDUxMjAMDzIwNDA2MDA0MjY0NDAzNAwPMDM0MjM4MTUzMTg4MjQ0DA8yMjg1MjQyNjcyMTU4NjAMDzQ0MzE4MDgwNDI2ODUxMAwPMzM0ODA1NzUxMzg4MjU3DA81ODAyNDA1NzY2MDY4ODcMDzg0MzAwMDQ1ODY4NTA1MAwPNTY4Nzc4NjY3ODExMjcyDA8zMTUxMTcxNTIxMzQ2NjEMDzg0NTQ3NDMxMjQyMTYxNwwPNDYxMDIzNjQyMDgzODMyDA8yMTQ3MDM2MTg0NjM2NTIMDzM0NTQyNTIyMDU1MjQ3NwwPODMwMDUzODczMTA2NjcyDA8wMDUyMjEwMjc4NTE2NDgMDzE1MjY0Nzc1MTE1MTM2NAwPNzI2NDQxNjM2MDYwNzMzDA82ODU3MTgzMTIwNTA1MzEMDzI2NDM1MDIzODI0NjI4MAwPNTA0NDU0MzYwMTMyNDUyDA84Mzg0Mzc1NDI1NzA2MjQMDzQyNzQ2MDQ2NTE1NDAwMwwPMDQzODExMjEzNTM3NzYxDA84MTE4NDc3MzA4NjE0NjgMDzUxNTI1Mzc0ODEzMTQwOAwPMDQ1NDU0MDg4NDYyMTUwDA82MzE2Nzc4MTYwNTE2MjUMDzU4MzI4MjcwMTEyMTY0NAwPMzgzNTg0NzQ3NTM0MDE2DA8xMDIwNDY0MjUwMjU0MjQMDzU3MDA2NjIxNDQ4NTE1NwwPNDU4ODY4MTg1NjI4NDA4DA81ODUyNTg4NjYzNDY3NzgMDzUyNzQwNTYxODY2NDc0MAwPMjc0MjY4MTczODA3MTE3DA83NzY2MzcwNDY2NDA3NTQMDzUzNTEzMzMzMTM2NDA1MwwPMTA1MDYzMDAxMjIxNjUwDA81ODMzMTY2MjA2NDc3NzcMDzQzMzM3NDYzMDMyMTU2NAwPNDcxMjA0MzgzODAxODg3DA81NjUwNTIxMjU1MzUxMDYMDzM2NTMxODEzNzA2NzMwNgwPMjQzMjg4NzgzMjY3NzI3DA8zNzQxMDg2MjYxMDAxMjQMDzc4MjA4NDIyNzUwMDM3MQwPMzU0NzU3MjYzNjAzMzg1DA83NDM3MTU2MzAwODAwODYMDzM4MzIzNzc3NzMzMTE3NwwPMzU2MjIyMzUwMDc2MTE3DA84MDIwMzQxNjcwMjU1NzcMDzU1ODE1NTI1MjM0NDQzMwwPODE4ODcxMTQ0MDQxNDY3DA8yODQzNDI1NjAyMjg1NzcMDzA0NTQyMDcxNjEzODAwMAwPNzQ4MzgxMDQyMzIxMzgxDA8zNzE1MjA4NjI3MzMyODgMDzMxMjgzMjQwNjYxMzA1NQwPODA1ODgzMDUzNDIzMzUzDA8zODEzNzQ0NzI1MDQ4MjYMDzU2Mzc0ODE0NDI3MjU0NgwPNjE2MTA3Nzg1MTcwMjg1DA8wODQ4NjY2MzI1MTEyODAMDzMxNjEyNzE4NjUxNzgzMwwPMTAwMjQ2MTE1MDU0NzgzDA84NzQ3MTgwNzEzMzc0NDcMDzA1MzQ3NzgwMTEyNDEzNQwPNzcwNjM0MjQ1MzM4MTM0DA82MTQ2NzUyMjY1MzcwNDYMDzU1NjA4MTM4MDMzMTQ0NgwPNTgyMzI1NzU1MjU0MjM2DA8zMzAyMTI1NDcyNjQ0MTMMDzE1NDg3MDE0ODcwNzMyMQwPNTI3Njc3ODIyNTUxNjE1DA82ODY0MDgzNDE2MTQzNTAMDzQyNTAyNzM4NjAxMTc4OAwPMDg0MDExNDg4NzQ4ODY1DA81NTgxMjUyNjg0MzYwNzYMDzE0NzEyODE3NjczNzUwNgwPMzEwNzAzMjI2MTQwODE3DA8yNjA2NjAwODQ0NzQ2MjYMDzEyMjMxNjgzNjUwODE4MQwPNTAzMjA2ODI0MTc1NDY1DA8xMDY3MzIzNDE1NTg0ODcMDzgyMzI4NDcxMjIwMjg0NgwPNTIwMjUxMTIyMTU0MDM3DA80NzE2NTIyMTMxMTgyMTEMDzYwNzAzMjU4MzAxNTM4NQwPNzM4NjU2NjUwMzYyNTQwDA81NjQyNzUwMTg0MTI4MzUMDzU4MDIwNDM4NDg2NzM1MQwPMzYxNjA2NTgxNDU4NzczDA84MTAwNTg0NjA0MDY3MzgMDzA1ODA0MDAyMzMxMjE0MgwPNjg0NDY0MzQzNzg0MjQ3DA8xNjU1NTgxNjIzODQwNzEMDzU0ODA1MDgzMTY0NDczNQwPODU1NjY2NTI4ODM2NTUyDA82NjE0NjcyNjMwNDYwNDgMDzYwMzUzNTMxODEyNjAxOAwPMDE0MjM2MjU1MDM2NzEzDA84NDQ1MjQyNzYzNDc1MTQMDzY3MDc4MzY3MjYyMzYxMAwPMjY4MjU1NjgzMDcyNDc3DA8xNzUyMTY1MzgyODg4MDEMDzg2NjQxMTI0MDc1MzM4MgwPNDg1Mzc4MDgyNTQ4NTY3DA84ODU3Nzc2NTcxNzc1MzAMDzgxNzQyMjcwMjQwNDYyMwwPMzI2MzcxMzYwODcxNDAwDA8yNDcyNDg1MDA0MDY4MzcMDzA2MDE1NzIwNTQwMTIzMgwPNjgxNDMwNDEyMTA4MDE3DA82ODQwNzM0Mzg4MjgxNTgMDzU0MTI4MzQ3ODQyMTE4OAwPNjM2NDI1ODYyNTgxODg0DA84NzM4NjQ4MTc2MDA3NDcMDzM2MTg4MTcyNjQwMTUwNAwPMTM4NTY3ODI4ODAwNjEzDA8wNDE2NDI1MDM2MjUzNzUMDzUxODEzMTQwODg3MDgxMgwPMjcxNTM4ODc2NTEzNzM4DA8xODY4Mjc2MzU0MTEyODEMDzUyMzU4MjQ0ODU4MDUwOAwPMzg1MTg1MTg2ODE1NTMxDA84MjU4MzUzMTc2NDMwNDIMDzU4MzAzNTY0NTgwMzg2NwwPODQ1NTMxMzQ3MTg4ODMxDA84MDUyNzYyODA0MzI0ODIMDzQyMzcwMjAxMDQ4NjUyOAwPMjEwODIwMDA1ODU4MTQ4DA83MzQ3MTA3MjMzNTAwNTYMDzc1NjA2NDYyNTA3NDQzNwwPMjcwMjY1MDMyMTQzMDcyDA8wNjY2NDcxNTQ4MjA2NzQMDzU2NTAxNTE3MzQ3NTMxNQwPNjQ1MjQ3NDEyNTM3NTUwDA81MDY3MjAwODY2NTY4MjgMDzc2MTEwNTQ3NTUxMDYyMgwPNjY4NjMyODg2NzMxNTA4DA82NDE2NzI1ODQxNDUzNjAMDzY2NjcxMjIxODQwNzQ2NQwPNTg0MTIyMTM3MDAxMzIxDA84NDgyMzc1NTQzODgwMjcMDzc1NTg4NzI3MzYxMzI4NgwPMjY1MjI0NDAyNDM2ODExDA83MzMyNjMwMzg3NzAxMzUMDzE4Mjc1MDExMDE0Njc3MwwPNTgwNTUzMzA2MDgxMjA1DA80NzQ2MzMwNTIyMzUzNTYMDzg4NTgxMDYyMjIxNjQzMQwPMjQ1Mzc4ODQ2MzE0MjgwDA8zMzEwODIzNjg2MTM3MDYMDzA4MzQzMTA0NjYyNzE0OAwPMTc3NzgwNTQ2MjQyNzI1DA84NTIyNjYyMDU3MjI0NzYMDzM2NTgxMjg3ODMyMzQ1MQwPNzAzNDA3MTU1MzEzMDcyDA84NzgyODIxMjQwMTAwNjMMDzI1MjU4ODA0Mjc2NDYwNQwPMDIzODAyNjg2NzUyNjI1DA82NDQyMDI4MDUxMjA2ODEMDzE1NzAxMjU1ODU4NjU2MQwPMDM4ODAzNDUyNTU1MTI4DA82Mzc1MjMzNTUxNjUwMTAMDzQ2MjQxNjg3NTI2MjI3MQwPMDEzNjUzODAzODc0MjI0DA8wMTUyNzE0NDI0MzQ4MDcMDzI3NTc4NjcxNjc3MzYwMgwPODA2NDM0MTQ0MzEzMDczDA81NjMzMDEzNTY3NTIwMjMMDzcyMTc3NDI4NzAwMjIzNgwPMTg4ODQzNjEwMzQ2MDEyDA8zNTMyMTE1ODYxNTA2MDMMDzQxMDQyMDA0MzcxNTg2NAwPNTAzODY0NDIxMTg4MDEzDA83NTUwNDI3ODE4MTA2MTQMDzAxODQ4NzI0NjYyMzQwMgwPMDg2MDUxMzIwNDI4MTM1DA84ODcyMDc1NDU1NjA3NDMMDzg4NDQwNTIxMjExNzA2OAwPMDg2MjY4NDY0Mzg3NjA2DA8zODIwMzY2MzQ4NDEyNDYMDzI0NzI1MDExMTI2NTQ2NAwPNDA0ODQzNTIxNjg3NzAwDA8zNjg3MDEwNjcxNDM0ODMMDzgwODA3MjY0NDI2MTE4MwwPNTYzNTEzMDgwNTIzODI3DA82ODExMjczODg0NzY1NzUMDzY3MjI3MTcwMzQxNTcyMAwPMTA3NzcxNzAyMjU1NDY4DA8yMzc1MTQxNzY0MjMwMjYMDzQ4ODgxMzM2MjcyNjMwMgwPMzYwMDAyNTUyNzYwMzE4DA8yMTA0MzgxMDAwNzM0ODYMDzUzNjU2NDY2MDIyNTEwMwwPNDU3NjcxMjM0MDUwNjYxDA84Njg2NjY3Nzc3MDAyNjUMDzI2NzExNTEwMzQ0MjY4NgwPODc2MjYwMzUwNDExNzE2DA8wNjY2MjUxNTExNDMyMTcMDzIzNTI3MTMyMzM0MzUwOAwPMjg1MTgxNjI2NTU2NDAyDA82MDA0NzAwNzE2NzcxMzYMDzE3NDc3Njg0MDA1MTc3MgwPODY4ODczODUyNDI4NjgyDA81NjE2ODQ3ODYyNjczODYMDzMzNTI4MDA0NzMxNjg4MgwPMDM4Mzg3ODMzMzY1NjU4DA8wMzc1MDMxMjc3NTU3NzcMDzc4NzA2NTAwNzE1MDI0NAwPMzcyMjUxMzEyNzYwNjI3DA8wMTcxMjIxMTc0Mzc3MjIMDzM3ODMwMjA0NDU0MDc3NQwPNDgyNzY2NDYyNTYxNzE3DA8xMDY4MDY4MTE3MTg2NjgMDzEyODM3NzQ4NDA3MDE2MgwPMzE1ODUwNDYzMDY1MzIxDA84MjAxNTEwMzQxNjcyNTcMDzY3NzQ0NTQ1NjAzNTcxNAwPNTY0MTQwMjY2Mzc4NzM2DA84ODc3NTc4MzU1NTMxMTQMDzQzMTUyNTcxODI0MjYxNAwPMTAxNTIyNjEzMTIwNTg4DA83MzUyNTczODcyMzIwMzQMDzAyMzQ4NTg2MDQyNzE2OAwPMjUyNDUwNDgzNzU4NjU0DA83MzQ4MjE4MTQzNzcwNjUMDzg4MDgzMTA3ODU3Mjg1MwwPNzUyMDE1MDgxMTQxNTcwDA8zNzc4ODYxMTU4NzMzNTcMDzEwNTgzODcxNDI4NjY0MQwPMjg3NzEzMzE4ODE4NzEyDA8wMzUwODg3NDU4MDI1MTAMDzc2NTU4NTMxMzM0MzI4MAwPNzg1NzAzNjExMjczNjgzDA80MjQ2ODcxMDc0NTM4NTcMDzQ3MTc2MTQ3NzUyMjQwOAwPMTIxODY4NzM3NzY2MTAxDA8zNzg2NzAwMTY1MTQ2NjQMDzg4MDE1MDY2ODIyNzA2MwwPMzQ3NjM2MzI1NzI2MDYxDA83NzUzMTY0ODQ0MzU3ODAMDzU3MjMxODI1ODY2NTcyMAwPNzQzODI2MzIxODg0NjE1DA84ODU4MjQ1NjQ0ODczNDYMDzc1NjA0NjYwODU3NDE2OAwPMjIzNTI2Nzg0MDI0ODM2DA82NjQzMDA3NzQxODA1ODYMDzYwNDAxMDcyNTUwNDQ2NQwPNzY0MDE4Nzg3NjAyNTUxDA8xNDI1MzMyNTQyODczMjAMDzEzNDU3ODYxMTgzODU0MAwPNzM3NDU1MDcxMzEwMDU1DA8zMDMwMDg4MTI0MjU3MzMMDzc0ODU3MzU3MDIwNjcwMAwPNDIxNTAxMjA2MjU0MTE2DA80ODMzNjg0Njc1NDgwNjQMDzUyMTIyMzU4ODYwNzAzMgwPNTUyNjg3NTAxODI2MTY1DA80MTM2MjQwMjUwNzYyNDUMDzU2NjI3NzYwNjMwNzUzMgwPNzgwNTc4MzMzMjgwODA2DA84ODIxNjMwODc1MzIwMjUMDzI1ODI0NTc4NjU3NTcyNQwPNjMwNjIxNzEzMzQxNDU4DA83MjQxMjA1NTU2MzY2ODgMDzUwNzE4MDUwODU1NzA1NwwPNDQzMTY1MTc4ODA2ODMyDA84NDYzNTE2NTc1MDgzMTgMDzM0MDEyNTIwMDQ4ODY2NgwPNzg4MjcwODE2MDEwNjQ4DA82ODEyMjczMDQ2MzE2NTcMDzU0ODYxMDEzODMxNDgyMAwPNDI4NjA0Mzg2MTc2MTIyDA8wNDU2ODQ2MzU1NzcyNTgMDzU3MTEzNTMyMjg4NzIzNAwPNTQ2MzMzMjYzMzU3ODc4DA8zMDgyNzY2NTY0NzM0MDUMDzU0ODQ3MTMzNTM2NTYxOAwPNjY3NjM0MjIyMDE0MTQzDA8yNTMwNTcwMDI2ODY2MDcMDzc0NDUxNDgzNDc3NTA0NAwPNzMxODY2MzA0MDgxNTc1DA82MjU3NjcxNDgwNTc2MjcMDzY4NjQ2NzI4NDI4Mjc3MwwPNDAzMDUwMDM4NTQwMjAzDA8xNTQ3NDYzNzIyNzY1ODcMDzEzMTY1NTc3Nzg2MTE0NgwPMzY4Njc2MDMwMjQyMDMyDA8zMDY2MjM4MzYzNDY1MzMMDzUzNDgxMDc2NzI4MjI2NQwPNjYwMDEyNDA0MjI1NDU0DA8zMTg0MDc1ODYwNzgwMzYMDzMzMjQzMzc1MDg0NDUxMgwPNTA1MjMyMTE0NjgyMDA0DA8xMjYyNjcyNDM2NzQ0NTIMDzQ3NDQzNDYyNjAwMDA4NgwPNTY1MzI1NjMzNjcyNTQyDA8zMjc3MjMwNjUxNDcyMTgMDzcxNjQ2NzEzMDg2Mzg1MwwPMDQ1MDI3ODgzMzQ0NDYwDA8wNDQ3Mjg1MTA0MDE2MzUMDzU4ODgxNDYwNDg1Mjc1MwwPNDgzMzY0ODIzMzYyNjUwDA82NDMzMTUzMTcwMDgxNjQMDzAzNzQwNjEzNjM3Njc1MwwPODYzMjg2MjQ0MzgwMzQzDA80NjMyNzUzODMxNDMwMzcMDzM2NTQ3MzU2MDc0NjMyMgwPODc4MzM2NjY3NzI3NTQ3DA8zMDU2NDYzMzcwNjczNzEMDzM3MDA4MzE1MjY4NjE1NwwPODg4NTM1NzY3ODg3MzAwDA8zMzYwNzUyMTIxMjI3NjIMDzUwMDgzNTM0MTExMTQwNAwPMDQzNjg4NDg4Njc3MTE3DA82NDY0MzIyODM2MTAyNzQMDzE3MTIyMjA3ODIyNDgwMAwPMjUzMDEyMjg0NTg2MjUyDA80MzYyODIxMTg0NzU3MDQMDzgzMDQxNDU4NDM2MjQzMAwPNzY2ODIzNjYzMTI1MDI4DA8xMjAzODEyNjI3ODE3MTEMDzAxNjM1Nzg2NTg3MTQ3MQwPMDMyNzM3Nzg2MjgyMzY4DA8wMjYzMzAwMzcxNDUzMjEMDzgwODcyMzU1ODQ0MTgxMgwPNDI4MjMzMzI1MjQ1MDgyDA8xODgwMzAyMTczODA4MjcMDzI1MjYwMzI0NzcxNjg0MgwPMDE4MzM1MjA4NDAyMDczDA8zODgzNDQxMzMwNjU4ODgMDzAxODUxMjAwMTE1MTY2MQwPMDgzMjgzMTM2NjY1NjcyDA84NjMzODU3ODU0MTIwODgMDzgxNzg0MjQ2MjUxNTA3MQwPNTM2ODA1ODIyNzgxODU1DA8xNDA0NjYzNzY3MzQyMjQMDzMxNDUxMjgwODQzNjEzNgwPNzUzNjY3NTAxMjgzNTE1DA8zMjQ4MzM1MTMyMzEyMDcMDzc0NTMwMTY4NjI1MTg2NwwPMjE2NjMwNzM3NjEzNjM2DA81NzgxODUxNjY2Nzg1NzUMDzc0MjI0MDQ1NjI2MzU3NQwPODA2NDUyMDQyMzI1NDg2DA81NTAwMTExMDgyNzg4MjMMDzQxNTIwNzM3MjM4NDc1NAwPNjIwNTA4NTUxNTMyNDEwDA80NTM4NTYwNzA1NjgyNDAMDzE1NzY1MDIwNDM2NjUyOAwPMjcwNDUyNjc3Mjc1MDc1DA8wMTgyNzE2NTIwMDU1MjMMDzU2Nzg0NjA0NDI0MDEyNQwPNDYwNTgxMDUwNDg1MjM3DA80NjM1NTQwNzgxNjMxMzYMDzQ3ODAwMTAyNTAxMzU4NAwPNDc3NzUwMzEyMDg4NzYwDA84MDU1MzQwMTYwNzUyMDEMDzg1Mjg2MTcxNjQyNzExOAwPNzU2NjA3MzEyMzcwNTg2DA81NTQ3MTQ4NTAwNTQ2NTAMDzEzMzI2ODQ2MzMwMDMwNQwPMjYyNTU0MTYyNTU3NTMyDA80Mjg3NjI4NTc2NDE0MDMMDzg1MzQ1MzEyMTgzNDY0MAwPNDAzMTgyMjU4MDU0NDQ2DA84MzYzODAwNTczODY4MjgMDzIzNDAwODQxMzIzMDIzMQwPNDg4MzE1NzA2MDQ0ODAyDA82MzY4MjI3ODQzMTczNjUMDzg2ODg1MTU3NTA1Njg3NgwPNjY0NDAzMzA4NDIxNzMwDA8zMzI4MTQyNjA0NDExNTEMDzYyNTY3NjcyMjI4MjM1NwwPNTc1NzYwNDAyNjE2NzQyDA8xODQ1NTg4MzE4MzI4MzYMDzg3MDIxMDMxNjM0MjczMwwPNjg1NzQyMDg1MjYwNDExDA83NTY4ODU3NjUzMjczMzYMDzA0NjU3MzQ4MzU2MzYwOAwPNjE3MDQyMTU1ODEwMDgyDA84NTU4NDU4NzIxMjExNTgMDzc1MzYzNzI4MDgyNDIyNwwPNTM3MzAzNzU0MzYzMTI3DA81MzYyNjU4NjQ0MzcwMjIMDzc3MjcxODU4ODcxNDI0MwwPMDUwNjY2MDAwNTgyMzE3DA81MjE1NDY3MDYwMzYzMTAMDzczODQ1ODcyNzU1NTY1MgwPMTE1NTUwNzYxNjcwNzQ4DA82NzcwMDcyNjgwMTQzNTEMDzI4ODU3NTgzNTA1NzI1NwwPMzcxNjIzMjQyMjgwNzQ3DA8zNTU2Njg2NDAwMzgwNzQMDzQxNzExMzQ4ODQ0MDc1NAwPNzY2MzAwMjU4MTI2NzcyDA8xODU1ODE0NDUwMTM2NzMMDzg1ODIzMDY1NjYxNzY2NQwPMzIyNjQ2NzA3Njc3NjU3DA83ODg4ODU2MTAxODczNzIMDzc2MDgyNDcyMDI4NzcxNwwPNTc4Mjc0MTMzNDM3MTgwDA8yNDEyMzMzNDE4NzEyNTIMDzcyMjg3MjQ4MzY4MjA1MwwPNTQ0MDQyNDIzMzU2NDQ3DA83MjI2MDg3NTUwNjQ4MTEMDzM1NTE2NDU4NTcxMzcyNQwPNTE1NDI4NTQwNTQ0NzU0DA8yODUyNzU4NTE3MDc4NDcMDzY0Njc0NjUwMTEwNzQ2MAwPMDA3MDczMTQ1NjU1NTgwDA8wNTIzMTc1ODA0MDQ2NjQMDzUwNTAwMTY3NTg2MjU2MAwPMzEwMzQ4ODA0NDQxNzM1DA8wNzE0NzI1NzA4MTYyNTAMDzYzMjA4Mjg0NDY4MzE3NQwPNjUxNjY2MTgzNDY3MDI4DA8zNDgxMjA0ODI1NzM2NDgMDzE3MjUwODIxMDUxMTg2NgwPMzg2MTI2NTYxMzM3NzMzDA81NjAxMzU2MDYwMjE2ODcMDzI4MjY2NzgzNDUwMTI1MgwPMDIzMjY4NzIxODYxNDEwDA8xNDE4NjgyODg1MTQyNjgMDzcwNjMyMDQ4MDYyNTQ2NQwPNTA0NDMwNzE1MTA4NzQxDA8xNTQ4MTAwMjU4NDMzNTAMDzgxMTY4NjYyMTEwNTY0NwwPODY4NDM0MzU4MDY0MTA2DA82MzE2ODQ2MjMzMDA3NjgMDzgxODc0MzgxMDc2NjY3OAwPMTE0MzQyNDI0NTYwMzE2DA8wODU0MDQ3NjM4NTc4NjEMDzM1MTAyMjcyMjE4NzI0NgwPNzc2Njc4MzE3NDMyNDAwDA82MzIwNDE4Mjc2NzEyMzEMDzc2NDA3MjEzODMxNjEyMAwPNjMxNTUxODMzMTc2NjA2DA8yMzIwNDA4NzQ1NDc1MzcMDzI2NTA2MjExMjEyNjEyOAwPMjc0NDM1MDgyNzIzODYyDA80MDI0NjA0MjAwMzIyNzgMDzgwODg0MTI0ODExODYwMwwPMzAxMDM0NDE0NjUwNjcxDA8wNTc4NTM0ODc1NTg2MDIMDzc2MDYxNTMxNjU4MzAxNgwPNzgxMTgyNDIxNzUwNTA4DA8yMTEzNzY3MDczNDExNjYMDzc0MzM0NzQxNDgxNzI4NwwPMjg4NjE3NTM4MDQ0MjY2DA80MDMwODExMjE0MzE2MDEMDzc3NDU1MDgxNDQwMjYzNwwPNjc2NDQ2NDEyMjUzMzUxDA80NjE4ODQwNDgyMjI0MTMMDzQ2ODcwNDc1MDEyMzM1MwwPNTA4MzM0Njc3NjI1ODYyDA82NTY2MzEzNjQzMDE3MzIMDzcxMzI2NTgyNTUyMDIwMgwPNjIzMTQ2ODM0Mjg3NzI0DA8zODIwNTg3Mjc2Njg4NjcMDzA3MjcwNjYwNzc1MTUyMAwPNDg1NzY3NDI2NDU0MDE4DA84NTI0MDAzNTE2NDY1MjIMDzIyODEwNTgzMDY0MTM3NgwPMDAzNDczMTIzNTYwODcyDA8yMDA1ODA0Njg1NzY0NDIMDzc2MDg3MTc2NzUzNDUyNAwPNzg2MDI4Mzg2NTAyNDE4DA8xMzY4NTAwMTg1NDA4MzMMDzIyMzY1MzA3Nzg0MjQ1OAwPMTI4NzM4MDg3MjcxMzQyDA8xMjA4Mzc2MjQwMjQ0MzIMDzA3NTE3NTgxMzA2MDc0NAwPNjM4NTY0MTAyNTEyMzMzDA8wMjE4MjcyMzA3NDQ3MzUMDzAzMjAyNTQzMjc1ODUwMgwPMDY3Nzc1MTc1MDAzMjMwDA8wNzc1NDc0ODgwMTg0NzIMDzc0NjcwNjczNTAwMzMyMQwPODQ4MzgwODA0MjAxNDExDA8zMTQ4NTYwNTI0MzQ4NjAMDzI4ODAzNDUyNDI4MjQ0NQwPMDIyNTI4NTExNzg2NDQwDA82MDQwNjgxMDg1NzA1MjMMDzY1NTYyMjY3ODcwNTE2MgwPNTY0NDIxMDIyNTI3NzQzDA8wMjE1MjE3MDI1MDI4ODQMDzYzNzgwMTY1NTA0MDc2NwwPMzA3MTE4NDExMTc2NTU3DA8wMDYxNzI3NTM0NDQxMjAMDzU1MzgxNzI4Nzg4MDA3OAwPMzI2MjU2NjQ0MTIyNDc3DA8zNTgyNjQ0NDI2NzQ1NzcMDzQyMTg3MDg3MjMyNDIwNQwPNTE3NTMzMzE4ODY1NTE1DA81MDQ1Mjc3NjI1ODQ3NzAMDzcxNDAyNDQxMjEyNzgzOAwPNTIzMTYxODE4Mzg1NTEwDA8wMDI3Nzg2MzEyMDQ0ODQMDzMzNTUxMDcxMTYxODAwOAwPNDU1MDYwODMzMzMyMjM4DA80NTM4NzExNjE1MDg1MDMMDzQ0MzQ3MjUxNzM4MDU2NwwPNjIwMDM1MDg1MzU0NDcxDA81NjE4NjMzNTE2MjU0MDUMDzE1Mzc4NjYwMDgxNDM2NAwPNzgwMDgyNjEzODc2MzgzDA81Njc0Nzg1NTg0ODczMjcMDzM1NTIwNDg4NTMwMTM3NAwPNDA4MDAwNzU3MDQzODYxDA81NjgxNjQ1ODcyMzIwMTgMDzQ4MTUzMjMxODUyNzM0MAwPMzE0NDI0NjY4Mjc4NDg2DA81NDc3NzIwODcwMDU4NjMMDzMzMjExMTUwODMzODI2MgwPNDU3MjI4MzM3NjAzNzAwDA80ODQyODAzODQyNjg1NTYMDzEzMjMxMjQ3Nzc3ODQ2NAwPNjI3NjQyMDY2NTA0MzUzDA82NTAwNjEyMTIxNjY2MzcMDzE1MTA3ODY0MTc3NDUwMAwPNDEwODIyNDIwNzcyMDg0DA83NjEyMjY3ODYxODU4MjcMDzcxMDMyNTE1MjcwNDIxNAwPODY2NjU4MzA4MjEwMjcyDA80MjI3ODc4NDg1NTg3NDcMDzgzNzcxNDQ4MTI2MTg1NwwPNjM1ODY2MTA1MTIxMTcxDA83NDU2MDExNTM2MzAzNzUMDzg1MjUyNjE3MjM1MDUyOAwPNjI1MDM3NzY2MTc1MDc0DA84NzAyNDIyMjMyMjAyMzUMDzQ0MzQwMDMxNTYyNTY0NAwPODUzNDUyNzgyODAwMzcxDA8xMDM1MTY3NTY0NDgzNTYMDzQyMzUxMzYwNjcwMjUzOAwPMTcyMTAxNDg2MjcyNDUxDA80MzIzNDI0NDg3NjUwMDUMDzc1NjI4MDAxNDU1ODQxNAwPMTE1NjU2ODE2NzAwMDM0DA8wMjc4MjQ0MDc3MzU4NTIMDzM1NzYxNTgxMDYyNTA4MAwPMTIwNTQ4NjUzNTgwNTgxDA80MTI2MDg3NzAzMjI4NzMMDzYwMzgwNjQ4NjIxNTY0NQwPODQxNzE1NjIyMzQ4NjczDA82ODI0MjQ0MDIzNjUwMzcMDzQ0NzQwNTU0ODI1NjI3MgwPMTEwNDQwMTMwMjIyODM0DA8xNTQ0NDMzNzU1NjgzMTYMDzI3MTExNDU4MTYwNjM3OAwPNDIyNjU0MzI0MzM2NjA3DA83NjQ0MTQ1MDcyNDg0NDYMDzE3MzU3NzgxMjE1NDQ2MwwPNzcwNjAwMzAxMzgwNzAxDA80NTM0MzYzNjQwNzIwMjEMDzgzNzIyNTQ1NTUyMjAyMgwPNjAyMzQ2MjIwMjUyODA3DA84MzAyMDExMDQwNjA2MjIMDzUyODQ4NTgzMzg2MDI4MwwPMTc1NDc2NTA0NDQxMDQwDA83MTM1NDE2Njc3NDE2NzYMDzIwODU2NDcwMzYyNDU3NwwPMDA4NDcwMDIxMjg4MDU3DA8zMDAwMDA1ODIwODQ4NzYMDzE4MzI0NzEwNDIwNTQxNQwPMzEzODY2NTA3NTM0NjI1DA8zNzcwMDcyMDgxMjgzMTMMDzIyNzQ2ODIyMjE0MDIzMAwPODE2MjU3MDEyMDI0MjE3DA83NjAyMDMwMDY4MTM3MTEMDzQxMjgyNTE0NTQzMzIzOAwPMzI2MzU2MTE4Njg2NjQ3DA82NTM2NDIwMTcwMzI0MzMMDzEwODQ3MjYzMDAxODc1MAwPNzM3MDI3ODI4NDUzNzQzDA8xODQ4NzI1MjI1NDg1NzIMDzgxNTQ3NTA1MzYxNDEzNwwPNzUyMTg2ODY3MzYzMzMwDA82NTM0MzgyNjU0MTQyODUMDzIwMjQyMjI1MTA1NzQ1MQwPNzE1MzQ1MDI2MDY0MTIwDA8xNTcwNjc0MzM4MzA1NjUMDzcxNDcyNjIzODQ4MTA2NwwPMjg0NjM4NTY3MjM1MDYwDA8yNzQ3NjAzNDc3NTMwMzEMDzIyMTYzNjgwNTE3NDAzNQwPNjgzMjI2MTEzMTUxODA1DA82NTgwMzE2NDIyMzU0NzQMDzYyNjQwNzYyODAyMjAzMwwPMjIxMzgxNDgzMTMyMzI3DA8xNjU2NzEwNTI3ODI1NDgMDzY1ODgyMTU2ODU2ODY2NAwPMzY3MTU3NDUxMjIxNzU3DA8zNzMzMzUyNTE0MDgzODYMDzcwNDYwNjYwNTEyNzA3MwwPMjgzODg0ODU2ODI1MzA3DA8wODQzNzIyMzgwMTYxNzMMDzM3ODAyODExNzgyMjE3MgwPMzU3MjQ1MDI3MDQ1MDM2DA82NDUxNzAzNjg2NDQ3NzUMDzE1MDQyNTY0MDAxMTUwMQwPODYyMDMzNDQwNDgxNDcwDA82NzE4MDgwMTU1MDUxNDUMDzQ0NDI1NjQ3MjA1MTQ1MQwPNTU0MjM1MzI1NTg2MTIzDA84MzQ1NDUwODgyMjA3MjEMDzc4NjU1MjIxODYwODIxNQwPMzgyMDU1NjIyNTE0ODMwDA81MDMyNTMzMzExNDcyNjcMDzAxNDc2ODA4MzA0MDgzMQwPNTE0MzY4ODgxNDQxNTI0DA84ODMyMTUzMDMyNTQxMjUMDzAyNDQyNzE2MTIyMjg0MQwPNjI1NTYyMTQ3NDc2NDA2DA84NzM4NTA2MTgxNzc3MTMMDzIyNjM2NzU0MDczNjAxMQwPMzYzNjA4NDQ0Njg4MDEyDA80NzMzNzYzNTAwNzc2ODUMDzY3NTA1ODUxMDY3NDgwOAwPNTc1MDM1NDYxMzg2NDEyDA80NjU4Mjg0Mzg0NjY4MTgMDzIwNjE2NTg4NjU1NTczMAwPMjUzNjQxNDQzMTEyMjA0DA8xODE1MTE0MDI3NTA4MzMMDzU2NDYxNDQ1MTAxNTM3MgwPMDEyODQ2MzI2NjM2MjUxDA8zNjUzMDg2ODgwNTY3MjYMDzg4Njg2NjA2ODEzNDQ1MwwPNjM4ODMwMzEyNDA4MzgwDA81NTUzNzA4MDc2NTI0MDcMDzE2NDY0MTI3NzE1MjM2MwwPMzg3MTA2NTg4NDQ2NjEwDA8xNTIxMTc4ODY2NjI1MjYMDzU0MTU3ODIyMzQ1MjEwNAwPMDQ3MTMwODYwMzU0NDA2DA84MzQ2NDA3NTI4MDQ1NTcMDzExMDc4NjcxNDQ0NjI1NwwPMzUwMjEyMzAzNjgwMTQ0DA8xODc4ODI4ODQ3NDIyNzYMDzg1MzU1NDg4NTg0NTMxMgwPMTQ2NzY3MjI0Njc1MTY1DA84MTY1MjEwMjU0MjIwMTUMDzM1Nzg2NzMzNTczMTc1OAwPNzQwMjUwNTgyMDI3MzM0DA84MDcwNzA0NzUyNDA3MTQMDzcyMDA0MDI1MTgwMzczNwwPMDMyMjI4NzU1ODA3NDcwDA8zNDY0NTQyNzA1NDIxNTEMDzQ0MTMxODAyNzA4NzMzMAwPNjg2NjEyMDgyNjEwODg3DA8wMzUwNTY4NDQwNjA4NzMMDzUzMTc1NTQ4NDg4MTQ2MwwPNTc0ODA4NDUyMzU0MjU0DA8zODQyMDUwMjU1MTUwNTEMDzgxNTU1NDAwMjg4ODgyMwwPNjg0MDMzMDYwMTc4MzYzDA8yNTE3NDc3MjU2MTEwMTIMDzUzODQ0NDcwNDgzMjUwNAwPMDY2MzUyNTQzNjQwNTI2DA8xNjY0NzU1MTAzNjAwMjIMDzMwODE3ODA0NjI3MDQ2NgwPNTEyODQwMTI2MzUzMjYzDA82NTU3NjY3NzE0NDU2NDYMDzIyNDc3NjQ4MDE3NTc1NQwPNDc2MTAwMjYyMDMwNzQzDA8xMjE1NTExMDc3MjYxNDcMDzExNDc2NTMyMDU0MDEyNQwPNzY1Mjc2Njg0MTE1MjQ1DA80NDc1Nzg1NDgwMzEwODAMDzQ0MzgyMDY0ODQ0MDYwNgwPMDg3MDAwMDgzNjIyMDMwDA8yNjg4NDM3MzYxNDM2MDUMDzgzMjMxNTM4MTQ3MzE0NgwPMzI2Njg1MjI4MjYzNDM3DA81ODgxODAxMzUwNTEwNTAMDzQ0NTEzNDYwMDUxMDA1OAwPMzI3NzQxNjUxNjU3MTU1DA80MTYwMTgyNTQwMjg1NDUMDzQ3MDE2MDE3MTE0Mzc3OAwPNzYwNjAxMjU3NzgwNjgwDA80NjE1MzQ4NDU1NTU3NjcMDzU2MjIzMzYxMzAxMTcyNgwPMTQzNzE2ODMxMTg4MjI0DA8wNDM3ODQ3MzU2NDYzMzEMDzg1MDU3MzQ4ODEyMTYwMAwPMzEzMTA3MjIwMjM0MjMxDA83NTczMDcyNjE2NTMzODIMDzE2MTEwODYyNjY1Nzg2NAwPNTUyNzUxMzAyNDA3ODg1DA8yNDA2MTg2MDc1NjEwMzgMDzA0NTA2MzcwNzQyODQ0MgwPODUzNzA1NTIwNTYwNzY2DA8yNTI4NTI3NDU2NTQ4NDUMDzMyNzE3ODIxMjMwMjc1NAwPMjMxMzA4MTE0MzU3MjE3DA8zNDQ3NDU3ODY4MzIxNzQMDzI0NzM0NDc3MTI4ODE4NwwPMzM2ODEzODAxMTUxMzg3DA8xMTU4MjU1MDAxMzg2MjIMDzQxMTcxNDQ4MjAwMjAyNQwPMjQ0NDU1MjYyNjA4NjIyDA8wMDUzNDgzMzg3MjI1NzYMDzY1NzM2NzExMTc4NjYyMQwPMDE2MDU0MTIxODY3NDcwDA8xNDU2ODcwNDY4MDEzMjAMDzIwNTg1MjYyODE1NzA4NwwPNTIyNDY4MjQxMTQ2MTU1DA8zMzY2MjMyNTY4MzczMjUMDzAxMTMzNzg3Nzc0ODU3MgwPMTE0ODU4MDEzMjE4NTIzDA84Nzg1MDc0MjYwMDgwMTIMDzQ2MzM2NDE4NzE1NjYyMQwPNTcwMzMyMDYxMzI1MDUzDA83Nzg1MzA4ODQ2NTMyNjgMDzMzNjgxMjIxNDQ0Mjg3NwwPNjIxODI1MjYxMzMxODQzDA8yNTc1NzU3MTc3MzI1MDIMDzYyNDQ4MjU3NTI4NTAyMAwPMzQ4NDA1NjU2MTUyMjI3DA83NjY3MDAxMzU1MTQ1NzIMDzYzODM0NDE1MjUzMTcyNgwPNjAzMjEwODA1NzIyNzU1DA84NzAxNjcxMTM2ODU3MzYMDzYyMjI4NjQ0NjIyNTM4NgwPODcwNTgyNzYyNTg1MzUzDA8wNDMzNTg2MzAzMjU2ODcMDzc1ODI2NTA4NDQzNTA0MQwPMDM4MjM4NzI3ODUwNTQ2DA83MjYxMzQyMDgzMzYyMTEMDzU2ODM3NTIxMjU1MDgxMwwPNzM0MDQyMzExNDMwNzQ2DA83MDU3NDIwNTcyODU3MDQMDzg4NTA3NzAxNDYxMDc0MQwPODExNDI3NTA4NDgxMTIyDA80MzM2MzQ0NjQxNDU3NjQMDzc0MDAxMzY3NTc4MzE2MwwPODg1MzUwMzI2MTcwMDc4DA84NDQwMzY3MDI4MzYxMzQMDzc0ODA4NzY4NjA2NTcxMAwPODA3NDg3MTU2NzcyNjg3DA82NDY4NzIzNzU1MDU2NjcMDzI4NTE2Nzc0NTgyMDY1MwwPNDY2ODczNDUxODI0MzE4DA81NDg2NzIzMzA3MDgxODQMDzcyNjQ1NjgwMzI2MDI3NwwPMzE1MDM4ODAyMDY1NDgzDA83NjEzMjczNjM2NjM4ODEMDzQ2NjUzMzYyMzg1MjcwNAwPMTQ4ODE4MTQ4ODcxODE1DA82ODQzMDIzNDc2ODU4MDYMDzUzNjEyODQzMzMwMDgzNwwPNDAxMzQ4Njc0ODg3NzE0DA84NjQ1NzU4MDI4MTg4ODYMDzc2NTQ3NzIwMzIzMDEwMQwPMDA4MTI2MjA1Mzc2NzA0DA8wNjM4NjAwNTI4MjY0MTQMDzY4MDg0MTc0Mzc3MTQ2MwwPNDUyMzg3ODU4NjEzNzA4DA80MjYyMjA2NTMwNTIwNTMMDzc3NzM1NDE1ODQzMzg1NQwPODcyNDc2ODQyMzY4NjI3DA82NTQ3NDQ3NjMwNTMyNzUMDzg0NjU2MjMxMTYxNjYwOAwPNzEzMTUzNzM3MTE1MDMwDA8yMDQ2Nzg2MjczMTEzNjUMDzU4MTYwNDcxNzIwNjY0MQwPMTYxODIzMDIzMTUzNjEyDA83MTgwMDM4MDEwMzc4NjAMDzA2ODQyNDc0NTQwNjIzMQwPMzU0NzQyMzc2NDQ4MDU4DA8wODc4MzUyMjc4MTc3MTcMDzQ4ODYzNDEyNjExNjMxNAwPMDA0NDAxMDE1MDc2OTc1DA8wMDQ0MDEwMTE0Mzg0MDEMDzAwNDQwMTAxMTQxOTc0MAwPNjUxODAxNjc4NjQ1MDA0DA8zNjgyMDMwMDY0MDIzMjgMDzAwMDAwNTA2MTY2NTYwMAwPMzczNjczMTAyMjE1ODY3DA81NTAwNjE2NjQzNDcxNzAMDzI3MjgzODQ4NDUzNjcxNgwPMTUyMTM4MDIxNTg0MTAxDA8yMDMxMTA1NjM2MzM3MTgMDzQzNDI3MDYyNzMzODEwOAwPMzY4MTUxODcyMjE0Mzg0DA80NzI3MjI4NzExNTg4ODQMDzYxMzMxMjMwNjQ2MTA1MAwPODgxODgxNzEwNjI2NzI0DA8xNTIxNTE3MjA2MzEyMTcMDzA0MzUwNzIyNzU1NjQyNQwPMTY3ODAxMzIwNjIwMDQ4DA83MDQwMzU4MzEyNTQzMjIMDzQ3Mzg4MDM2MDg3ODE2MgwPMTE3NTQxODEwMDM2NTg1DA83NDIxMjQyMDUxNzYxMzIMDzEzMzg4MTI4NDM1MTUxMQwPNDE1ODcyMjUwNDg4MjYwDA8yMzUwNjIzNjcyODMzMzYMDzQyMTU3Mzc4MjMxMzcxNwwPODU2MjIxNjM2NTQyODM4DA82Mzc1NDI2MTI3MDUxMTcMDzg4ODU2NDAyODYzMTA3MQwPNzg4NDc3MjM1Njg0MjEzDA8zMzA0MjQxMjQ0ODM0MTgMDzI3NTQzNzExMTQ0NzIzNgwPNTMwNjQwNjM3ODIzMjQyDA8xMjExNDIzMjE1ODI0NDUMDzMxNDY2MzMzNjQxMDUzMgwPNzI1NzE2NDI4NDIzNTIwDA8zNjM4NTYyMDI0MjYxMTQMDzIzNTUxNTY2MzI0NDMwMwwPNjI4NzYxMjE4MDA4MjY4DA8xMzg0MDcxNzM0ODY3MTYMDzYzNjYxMzI2MTM3NjU4MgwPNTg3MTE2MjcyMDcxMTEwDA8yNDA1NDAzMDQzMjc3NDgMDzM0MTYxNDI2MDMxMDI3NAwPNDQwNTc4NzE0NDM1NjI0DA82MTc3NzY0MTYwNzUwMTMMDzA1NDE1MTAzNzI3NzYxNgwPNjMzNDU2MzM0NTQ0NjE2DA8wNjU3NzY1NTE4NDQzODIMDzIxMzMzMTU4NTY2ODE1NgwPNTgxNTAwMjY2ODY3NTIwDA81NDMzNDI4NDYwNzc0MzcMDzAzNjM3NTcyNzgwNjc1MAwPMDcyMzQ2ODg0NTU3MDg0DA8yMjcyNzYzNzIzODcyODYMDzEwNDg3NjUwNzUxNTU4MAwPODIxMDY1MTIzNjM4MjU1DA83MjMwNzc1ODA2MTE1MzEMDzI2MDYxNjMzNDIwNzU0NAwPMzU2NTY0NjM4MDYxNzQxDA8yNDY4NzMzNTA3MjgyODAMDzIyNTgwMjIwODI0NzcxMwwPNDQ4MTQ3MzEzNzAwODM0DA82MTYwMzg4NTgzODYxMDMMDzc4NjcyODgzODg2MjA3NQwPNjgwMTczNTYxNzgwMjg0DA81NjA4MzA4NDcyMDgxMDAMDzYyMjM0ODI0NjIzNTY3NAwPNDA3NDc4Mzg0MTExMzQxDA8xNDgxMDI1NzU3MzA3MjEMDzY1MDY1ODI2MTQ1MzE3MQwPMDgyMzU0MjIwNzQ2NzU3DA82MjQ4MjY2NDc4MTE1ODIMDzI3MjI2MTI3Mjc0NDA0NAwPNTIwMjIwNzgwMTc2MTY2DA81MDE1MzI4MDE0MDgxMjUMDzI1NDMwMzcwMDQyODgyOAwPNjc0NDc4ODY4MzQ4MjgxDA80NjMzMTY3NDU1MjcyNzUMDzQ3MTE4NTQ1MDIwMzEyMgwPNjM1NDgwMjg2MTEzNjUyDA82MTM0MzE4MjI4NTI3NzMMDzIyMTYzNDczNDg2MTA4NgwPNjE4NjU3NDcxNzUyMTE0DA8zMjg1MjU1MTIzMTgwNzAMDzQ2MTAzMTQ0NDAzMDMyNAwPNTc2ODU4NDI3MjE0MTg2DA82NjU0MDAwNjgwMjgxMzEMDzMwNTcyMzIxODQ0MTgxMwwPNTQ1MTg0NDYwMDg4NTQ2DA82ODExMDczNDM4Njg3MzgwDQYJKoZIhvcNAQEFBQADgYEAQq6zHN8SP8w71Yyq+cwwNQ2VZ4UMPRw/9JkW8ZUJWC4gae2lOfeyyjtN3akXaT+p+vETtfoPuCpPjvzPYoN1RZieyJnpSVzUrNw/lM6kSP5DjGg5K/WKWYad0VkQg56Kynp2YVX4yKUhBydd7iBeSGP900LAHRWCR++xq+r98mI=
+MIDlet-Jar-RSA-SHA1: PRpjLFh81oAjHdPSZ/9lTe64ICSSHOk/MQMdRSqwsoGMSPID91mBRFEYOIQ/5nocEscacSi81o089Y0gMpEIP8V/EWBD7WDP6xqjC0gSyac+QjZm1Bu7Pzav+JC5J3KEkKOGy4wgQKJx02bArR/P9LhYAe7T6LVVFbfFyw2lhJA=
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/EmptyLines.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,15 @@
+ 
+
+
+    
+	
+	 
+	    
+                
+                    
+                        
+                        
+         	
+ 
+
+ 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/FL_Rocks.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,6 @@
+MIDlet-Version: 1.0
+MIDlet-Vendor: Standing Still Limited
+MIDlet-Jar-URL: http://195.114.231.97:7001/dls/delivery/ds/01AAvJ1WX3jmZsurMwoC/1/FL_Rocks.dm
+MIDlet-Install-Notify: http://195.114.231.97:7001/dls/delivery/ds/01AAvJ1WX3jmZsurMwoC/2/FL_Rocks/status
+MIDlet-Name: Rocks
+MIDlet-Jar-Size: 28196
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/NDRM.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,10 @@
+MIDlet-Jar-URL: NDRM.jar
+MIDlet-Install-Notify: http://uljava.gjmptw.de:8080/Index/Index/NDRM.jad?nstalled=NDRM_harmony
+MIDlet-Name: DRMonitor
+MIDlet-Vendor: m-internet.com Limited
+MIDlet-Version: 1.0
+MIDlet-Jar-Size: 24472
+MIDlet-Icon: /icon.png
+MIDlet-1: NDRM, /icon.png, ndrm.NDRMMIDlet
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/PlatformReqHTTP.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,11 @@
+MIDlet-1: PlatformReqHTTP, , com.nokia.midp.test.securitytests.PlatformReqHTTP
+MIDlet-Jar-Size: 2272
+MIDlet-Jar-URL: PlatformReqHTTP.jar
+MIDlet-Name: PlatformReqHTTP
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MicroEdition-Configuration: CLDC-1.0
+MicroEdition-Profile: MIDP-2.0
+URL: http://tcktest3.extra.wirelessfuture.com:8080/axis/servlet/marika.GetServlet
+MIDlet-Certificate-1-1: MIICPDCCAaUCBD+zblMwDQYJKoZIhvcNAQEEBQAwZTELMAkGA1UEBhMCZmkxEDAOBgNVBAgTB1Vua25vd24xEDAOBgNVBAcTB1RhbXBlcmUxDjAMBgNVBAoTBU5va2lhMQwwCgYDVQQLEwNKQ0YxFDASBgNVBAMTC01hcmlrYSBGYWJlMB4XDTAzMTExMzExNDMxNVoXDTEzMTExMDExNDMxNVowZTELMAkGA1UEBhMCZmkxEDAOBgNVBAgTB1Vua25vd24xEDAOBgNVBAcTB1RhbXBlcmUxDjAMBgNVBAoTBU5va2lhMQwwCgYDVQQLEwNKQ0YxFDASBgNVBAMTC01hcmlrYSBGYWJlMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDsUJbYMb9GlP99Ax9n6m2AIAg+b2zC0u6h7OuLP+ls9OpI0sLtE1uBABCePloS0uKwmjtsdFc1zLyA/bpbi644xDw3PMIEhppeuKbLrog5uMk5wD1bFk5kJXYwYEorWVrFpLDmqFwEMig2a+Uhf7eTq1Ze/JgMHoUDXRo0eVsnFwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBACuTqh37N34NnVzziuj66gmiE3rt7fKDTUCiqoHGfv7dpr4M0e8+y6FvtXtUXEajxX/DZbZuy0E9mZqmXsYyP2DDKbCg4cBJ23uOCffuYYVQFSnv4RQFVrQr4jMUHgX7wT5Ox4Ee8xcpsvWWfOgTY4zyEznOBUj6Uw4Xj7F+1yk8
+MIDlet-Jar-RSA-SHA1: UfQMdprNMMmJOk9INrJXe+Y06tnuL+zOJz4gJNEKnLPOzb6UwR2zczNddwfdBxENKbhw2RVp3GBQD2OZjB6UEU4kiw2S956RMlk5OVfqwXB5wvYPCePX6/8qgKSUmsBjNiEpXBGE2UT7MqbRApxmsf/OaDnzzd9Tlr9jUw+YU3w=
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/SimpleRMS8.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,9 @@
+Manifest-Version: 1.0
+MicroEdition-Configuration: CLDC-1.0
+MIDlet-Name: SimpleRMS
+Created-By: 1.5.0_12 (Sun Microsystems Inc.)
+MIDlet-Vendor: Unknown
+MIDlet-1: SimpleRMS, SimpleRMS.png, SimpleRMS
+MIDlet-Version: 1.0
+MicroEdition-Profile: MIDP-2.0
+
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/SimpleRMS8.jar has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/SunShines3D_DEMO_nokia_N900_EN_IGP_ATandT_901.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,24 @@
+IGP-BS: MP3D=MP3D_BS;SCDA=SCDA_BS;ASP3=ASP3_BS;PSDK=PSDK_BS;
+IGP-CATEGORIES: WN=WN;BS=BS;PROMO=0;OP=OP;
+IGP-DEMOS: DEMOPG=DEL;
+IGP-PROMOS: MB3D=MB3D;PB07=PB07;BBRK=BBRK;
+IGP-VERSION: 2.5.0
+IGP-WN: RBPF=RBPF_WN;MMN=MMN_WN;BRBO=BRBO_WN;ASCR=ASCR_WN;
+MIDLET-FULLVERSION-URL: http://advers.bestgamfts.com/redir/?from=D725&game=MD3D&op=GONG&game_type=DM&lg=EN
+MIDlet-1: Sun Shines 3D Demo, /icon.png, HightS3D
+MIDlet-Data-Size: 8192
+MIDlet-Description: Sun Shines 3D, Emulated sun shine in full 3D!
+MIDlet-Icon: /icon.png
+MIDlet-Jar-Size: 754864
+MIDlet-Jar-URL: SunShines3D_DEMO_nokia_N900_EN_IGP_ATandT_901.jar
+MIDlet-Name: Sun Shines 3D Demo
+MIDlet-Vendor: Celedons Two
+MIDlet-Version: 1.0.4
+Nokia-MIDlet-Block-Uninstall: true
+Nokia-MIDlet-Category: Applications
+Nokia-MIDlet-UID-1: 0x20012293
+Nokia-Scalable-Icon: /icon.svg
+Nokia-Scalable-Icon-MIDlet-1: /icon.svg
+URL-OPERATOR: http://bestgamfts.hereis.com/redir/?from=D725&op=GONG&game_type=DM&lg=EN&ver=2.5.0
+URL-PT: 0
+URL-TEMPLATE-GAME: http://bestgamfts.hereis.com/redir/?from=D725&op=GONG&game=XXXX&game_type=DM&lg=EN&emb=1&ver=2.5.0
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/SunShines3D_DEMO_nokia_N900_EN_IGP_ATandT_901.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/TestMidlet.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,14 @@
+MIDlet-1: TestMidlet, TestMidlet.png, TestMidlet
+MIDlet-Jar-Size: 3674
+MIDlet-Jar-URL: TestMidlet.jar
+MIDlet-Name: TestMidlet
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MicroEdition-Configuration: CLDC-1.0
+MicroEdition-Profile: MIDP-2.0
+: Empty attribute name
+ : White space only attribute name
+ 	: White space only attribute name 2
+a<>: separators in attribute name
+bo: control characters in attribute name
+c:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/TestMidlet2.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,3 @@
+a<>: separators in attribute name
+bo: control characters in attribute name
+c:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/TestMidlet3.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,9 @@
+MIDlet-1: TestMidlet, TestMidlet.png, TestMidlet
+MIDlet-Jar-Size: 3674
+MIDlet-Jar-URL: TestMidlet.jar
+MIDlet-Name: TestMidlet
+MIDlet-Vendor: Nokia
+MicroEdition-Configuration: CLDC-1.0
+MicroEdition-Profile: MIDP-2.0
+o: attribute name starts with CTL characters
+MIDlet-Version: 1.0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/calc2_en_de_es_ES_fr_it_tr_TR_nl_NL_pt_PT.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,32 @@
+MIDlet-1: Calculator, i.png,common.control.CalculatorMIDlet
+MIDlet-Name: Calculator
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.5
+MIDlet-Jar-Size: 123
+Nokia-MIDlet-Category: Application
+Nokia-UI-Enhancement: CanvasHasBackground
+MIDlet-Data-Size: 150
+Vertical-Move-Delta: 10
+Vertical-Move-Period: 2
+Inline-Editing-Supported: true
+Nokia-Platform: Nokia*
+Nokia-MIDlet-Category: Games
+Nokia-MIDlet-Name-en: Calculator
+Nokia-MIDlet-Name-de: Rechner
+Nokia-MIDlet-Name-es-ES: Calculadora
+Nokia-MIDlet-Name-fr: Calculatrice
+Nokia-MIDlet-Name-it: Calcolatrice
+Nokia-MIDlet-Name-tr-TR: Hesaplamalar
+Nokia-MIDlet-Name-nl-NL: Rekenmachine
+Nokia-MIDlet-Name-pt-PT: Calculadora
+Nokia-MIDlet-1-en: Calculator
+Nokia-MIDlet-1-de: Rechner
+Nokia-MIDlet-1-es-ES: Calculadora
+Nokia-MIDlet-1-fr: Calculatrice
+Nokia-MIDlet-1-it: Calcolatrice
+Nokia-MIDlet-1-tr-TR: Hesaplamalar
+Nokia-MIDlet-1-nl-NL: Rekenmachine
+Nokia-MIDlet-1-pt-PT: Calculadora
+MIDlet-Jar-Size: 84713
+MIDlet-Jar-URL: calc2_en_de_es_ES_fr_it_tr_TR_nl_NL_pt_PT.jar
+Nokia-MIDlet-Category: Best-Sellers
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/calc2_en_de_es_ES_fr_it_tr_TR_nl_NL_pt_PT.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/ceac00.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,12 @@
+MIDlet-Name: ASCII
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MIDlet-Jar-URL: http://195.134.231.83:7070/java-server/resources/man_jam/ceac00/bin/CEAC00.jar
+MIDlet-Jar-Size: 1494
+MicroEdition-Profile: MIDP-2.0
+MicroEdition-Configuration: CLDC-1.0
+MIDlet-1: ASCII,,USASCII.CEAC00_01
+MIDlet-Install-Notify: http://195.134.231.83:7070/java-server/getresult.jsp?phone=9F732D83F3B6AF98EB6577EA92366D95&tID=ceac00
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/cecn02.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,12 @@
+MIDlet-Name: ùÓùÔùÕ
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MIDlet-Jar-URL: http://195.134.231.83:7070/java-server/resources/man_jam/cecn02/bin/CECN02.jar
+MIDlet-Jar-Size: 1417
+MicroEdition-Profile: MIDP-2.0
+MicroEdition-Configuration: CLDC-1.0
+MIDlet-1: ùÓùÔùÕ, ,Big5.CECN02_01
+MIDlet-Install-Notify: http://195.134.231.83:7070/java-server/getresult.jsp?phone=C9EABB544D0A47788C684D71A5A1C8C9&tID=cecn02
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/cecn06.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,12 @@
+MIDlet-Name: ‚X‚Y‚Z‚[
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MIDlet-Jar-URL: http://195.134.231.83:7070/java-server/resources/man_jam/cecn06/bin/CECN06.jar
+MIDlet-Jar-Size: 1415
+MicroEdition-Profile: MIDP-2.0
+MicroEdition-Configuration: CLDC-1.0
+MIDlet-1: ‚X‚Y‚Z‚[,,GBK.CECN06_01
+MIDlet-Install-Notify: http://195.134.231.83:7070/java-server/getresult.jsp?phone=79CD95B6352F8388513D6DDB699817CF&tID=cecn06
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/ceis00.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,19 @@
+MIDlet-Name: ÷ùø
+
+MIDlet-Vendor: Nokia
+
+MIDlet-Version: 1.0
+
+MIDlet-Jar-URL: http://195.134.231.83:7070/java-server/resources/man_jam/ceis00/bin/CEIS00.jar
+
+MIDlet-Jar-Size: 1450
+
+MIDlet-1: ÷ùø, , ISO8859_1.CEIS00_01
+
+MicroEdition-Configuration: CLDC-1.0
+
+MicroEdition-Profile: MIDP-2.0
+
+MIDlet-Install-Notify: http://195.134.231.83:7070/java-server/getresult.jsp?phone=1D11AB7B2A1E2BC200165EB4CF554232&tID=ceis00
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/ceis09.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,11 @@
+MIDlet-Name: ¢£¤
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MIDlet-Jar-URL: http://195.134.231.83:7070/java-server/resources/man_jam/ceis09/bin/CEIS09.jar
+MIDlet-Jar-Size: 1457
+MicroEdition-Profile: MIDP-2.0
+MicroEdition-Configuration: CLDC-1.0
+MIDlet-1: ¢£¤, ,ISO8859_15.CEIS09_01
+MIDlet-Install-Notify: http://195.134.231.83:7070/java-server/getresult.jsp?phone=7F914DE931B9D04E5F731F1ADCD163F6&tID=ceis09
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/ceis14.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,12 @@
+MIDlet-Name: ??»
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MIDlet-Jar-URL: http://195.134.231.83:7070/java-server/resources/man_jam/ceis14/bin/CEIS14.jar
+MIDlet-Jar-Size: 1456
+MIDlet-1: ??», ,ISO8859_16.CEIS14_01
+MicroEdition-Configuration: CLDC-1.0
+MicroEdition-Profile: MIDP-2.0
+MIDlet-Install-Notify: http://195.134.231.83:7070/java-server/getresult.jsp?phone=336AA79A2E085DC20583865B841DBE6B&tID=ceis14
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/cejp04.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,4 @@
+MIDlet"DNa"De:"D"D@!"D"D"D"D"D"D"DMIDlet"DVe"Ddo"D"D"DNoki"D"D"DMIDlet"DVe"D"Dio"D"D"D1."D"D"DMIDlet"DJa"D"DURL:"DCEJP04"Dja"D"D"DMIDlet"DJa"D"DSi"De:"D1439"D"DMIDlet"D1:"D"D@!"D"D"D"D"D"D"D"DJISX0208"DCEJP04_0"D"D"DMicr"DEditio"D"DCo"Dfigu"Datio"D"D"DCLDC"D1."D"D"DMicr"DEditio"D"DPr"Dfile"D"DMIDP"D2."D"D"D
+MIDlet-Install-Notify: http://195.134.231.83:7070/java-server/getresult.jsp?phone=CF0B99F53572032690A4D26E0CB83D02&tID=cejp04
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/ceko01.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,11 @@
+MIDlet-Name: ÍÎÏÐ
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MIDlet-Jar-URL: http://195.134.231.83:7070/java-server/resources/man_jam/ceko01/bin/CEKO01.jar
+MIDlet-Jar-Size: 1429
+MIDlet-1: ÍÎÏÐ, ,KOI8_R.CEKO01_01
+MicroEdition-Configuration: CLDC-1.0
+MicroEdition-Profile: MIDP-2.0
+MIDlet-Install-Notify: http://195.134.231.83:7070/java-server/getresult.jsp?phone=64E5A88BE41622497EDF05039C15F26C&tID=ceko01
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/cems01.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,12 @@
+MIDlet-Name: ýþ€
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MIDlet-Jar-URL: http://195.134.231.83:7070/java-server/resources/man_jam/cems01/bin/CEMS01.jar
+MIDlet-Jar-Size: 1465
+MicroEdition-Profile: MIDP-2.0
+MicroEdition-Configuration: CLDC-1.0
+MIDlet-1: ýþ€, ,windows_1250.CEMS01_01
+MIDlet-Install-Notify: http://195.134.231.83:7070/java-server/getresult.jsp?phone=3F627BEFBC6E8A0FB9510BA4EB42AE6F&tID=cems01
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/cems11.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,12 @@
+MIDlet-Name: ýþÿ
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MIDlet-Jar-URL: http://195.134.231.83:7070/java-server/resources/man_jam/cems11/bin/CEMS11.jar
+MIDlet-Jar-Size: 1467
+MicroEdition-Profile: MIDP-2.0
+MicroEdition-Configuration: CLDC-1.0
+MIDlet-1: ýþÿ, ,windows_1256.CEMS11_01
+MIDlet-Install-Notify: http://195.134.231.83:7070/java-server/getresult.jsp?phone=3EBDFC736561D6876CF9ED93D3BF1B36&tID=cems11
+
+
+
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/ceut03.jad has changed
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/ceut04.jad has changed
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/ceut08.jad has changed
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/ceut09.jad has changed
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/einstein_EN_FR_IT_DE_ES_N97_v2942.jar has changed
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/javahelper.mif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/mine_en_fr_de_it_es_ES_pt_PT.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,33 @@
+MIDlet-Name: HecticMine
+MIDlet-1: HecticMine,/images/icon.png,com.nokia.mid.appl.mine.common.MineMIDlet
+Nokia-MIDlet-Category: Game
+MIDlet-Icon: /images/icon.png
+MIDlet-Vendor: Nokia
+MIDlet-Version: 3.0.4
+MIDlet-Description: HecticMine
+Period-Speed-ms: 100
+Vertical-Text-Offset: -2
+Nokia-Platform: Nokia*
+Nokia-MIDlet-Name-en: 
+Nokia-MIDlet-Name-fr: Hectic Mine
+Nokia-MIDlet-Name-de: Hectic Mine
+Nokia-MIDlet-Name-it: Hectic Mine
+Nokia-MIDlet-Name-es-ES: Hectic Mine
+Nokia-MIDlet-Name-pt-PT: Hectic Mine
+MIDlet-Jar-Size: 233616
+MIDlet-Jar-URL: mine_en_fr_de_it_es-ES_pt-PT.jar
+MIDlet-Certificate-1-1: MIIDhDCCAmygAwIBAgIEQhnyeTANBgkqhkiG9w0BAQUFADAzMQ4wDAYDVQQKEwVOb2tpYTEhMB8
+ GA1UEAxMYTm9raWEgQ29udGVudCBTaWduaW5nIENBMB4XDTA1MDIyMTE0Mzg0OVoXDTE2MDEwMjExMDUwNFowKDEOMAwGA1UEC
+ hMFTm9raWExFjAUBgNVBAMTDU5va2lhIENvbnRlbnQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAK2PV8KLVSZ9OePe4k
+ 78GeQ0MiujbMd1wU9/xqhUFPst50drxhKzH+fMxvXgQOJ7viReolqWyq+ZmKpikGa+6SdqHysnVBhAqo9SLMNjlMfoOXVJ/lvM
+ gOk9k5oyVhBqFonw/FDDHmINC6w9o83e3gRq1C1m2T368yHbZtKifiVdAgMBAAGjggEtMIIBKTAOBgNVHQ8BAf8EBAMCB4AwEw
+ YDVR0lBAwwCgYIKwYBBQUHAwMwggEABgNVHSAEgfgwgfUwgfIGCysGAQQBXgExAQMBMIHiMIHRBggrBgEFBQcCAjCBxBqBwVJl
+ bGlhbmNlIG9uIHRoaXMgY2VydGlmaWNhdGUgYnkgYW55IHBhcnR5IGFzc3VtZXMgYWNjZXB0YW5jZSBvZiB0aGUgc3RhbmRhcm
+ QgdGVybXMgYW5kIGNvbmRpdGlvbnMgYW5kIGxpbWl0YXRpb25zIG9mIHVzZSwgYXMgZGV0YWlsZWQgaW4gdGhlIENlcnRpZmlj
+ YXRlIFByYWN0aWNlIFN0YXRlbWVudCBhdmFpbGFibGUgZnJvbSBOb2tpYS4wDAYIKwYBBQUHAgEWADANBgkqhkiG9w0BAQUFAA
+ OCAQEAvXtgKSffVjD52zHgUEFBBmXFq3QjgWNh8+cQTD23wnPYgfA4GBomMmznLiV3X03SOOI42DUUenQ9baPb78iU8AngF6xd
+ oOpFYlNtVka9YdD9mA0jtkoe4YEmykxPabSKDS50xVYgQG+5Y9H8nO9EyIiviP6drFmpRv635mf8Trlao63XIx4geoCMb9v8vS
+ dfs0louKB9DrjwFki/uHAQvRcVYnFNtAwHdri22UMx+GMppuY4/oPVvQqxgzfP+1AX/w2lgG7pi3lbVVUB4MLhG36kZIk8/J7B
+ lmATAL1/G5t19HR3+9doz5H94y3WQG7ClWN1eoQtjLlvLfZO/iu20g==
+MIDlet-Jar-RSA-SHA1: ncuy0soEPUB4OPGHNyLn1ldXU2FvKvs0bUKGn/aPQefKI15aOlrczlapIWreUukE3ArQImU/xwxWh0
+ Q8LROEULJKXRIYyoGCCblM6o6EPYn+YT+CDd/HV8JlHS6OO+sAV//9vWuo9orIwSwdKN8wGl0g1JmPl8LF8V5/MjSmyh8=
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/utf8bom.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,8 @@
+MIDlet-Name: ışÿ
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MIDlet-Jar-URL: utf8bom.jar
+MIDlet-Jar-Size: 1417
+MicroEdition-Profile: MIDP-2.0
+MicroEdition-Configuration: CLDC-1.0
+MIDlet-1: ışÿ, ,UTF8BOM.UTF8BOM
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testserver/build/build.xml	Wed Jun 23 18:07:10 2010 +0300
@@ -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: 
+#
+-->
+<project name="InstallerTestServer" default="dist" basedir="..">
+    <property name="catalina.home" value="C:/apps/apache-tomcat-6.0.26"/>
+    <property name="build" value="${basedir}/build"/>
+    <property name="java.build" value="${build}/javabuild"/>
+    <property name="classes" value="${java.build}/WEB-INF/classes"/>
+    <property name="src" value="${basedir}/javasrc"/>
+    <property name="web" value="${basedir}/content"/>
+
+    <path id="compile.classpath">
+        <fileset dir="${catalina.home}/bin">
+            <include name="*.jar"/>
+        </fileset>
+        <pathelement location="${catalina.home}/lib"/>
+        <fileset dir="${catalina.home}/lib">
+            <include name="*.jar"/>
+        </fileset>
+    </path>
+
+    <target name="compile">
+        <mkdir dir="${classes}"/>
+        <javac source="1.5" target="1.5" destdir="${classes}" srcdir="${src}">
+            <classpath refid="compile.classpath"/>
+        </javac>
+    </target>
+
+    <target name="dist" depends="compile">
+        <jar jarfile="${build}/installertest.war" basedir="${java.build}"
+            manifest="${web}/META-INF/MANIFEST.MF"/>
+        <jar jarfile="${build}/installertest.war" basedir="${web}"
+            update="true"/>
+    </target>
+
+    <target name="clean">
+        <delete dir="${java.build}"/>
+        <delete file="${build}/installertest.war"/>
+    </target>
+</project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testserver/build/readme.txt	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,41 @@
+Building
+--------
+
+Requirements:
+    * Apache Ant.
+    * Apache Tomcat. (Tested with 6.0.26)
+
+Change "catalina.home" property in build.xml file to match your Tomcat
+installation directory. Default is as follows:
+
+    <property name="catalina.home" value="C:/apps/apache-tomcat-6.0.26"/>
+
+To compile the project and to create .war archive just use either of following
+commands:
+
+    ant
+    ant dist
+
+To compile only use:
+
+    ant compile
+
+And to clean all build artifacts use:
+
+    ant clean
+
+Deployment
+----------
+
+After build is complete, "installertest.war" file is created into the "build"
+directory. Deploy it to Tomcat instance as any other .war file. For HTTP
+authentication tests it is assumed that user named "guest" with password
+"guest" and with role "guest" exits.
+
+Running the tests
+-----------------
+
+Before running tests add option "-server=server_ip_address:port" to
+NotificationPosterTest, DownloaderTest and InstallerEngineTest
+test suites in jiut.bat (for S60) or in build.xml (for Linux)
+in "javainstaller\installer\tsrc\build" directory.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testserver/content/HelloWorld.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,8 @@
+MIDlet-1: HelloWorld, , helloworld.HelloWorld
+MIDlet-Jar-Size: 1511
+MIDlet-Jar-URL: HelloWorld.jar
+MIDlet-Name: HelloWorld
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MicroEdition-Configuration: CLDC-1.0
+MicroEdition-Profile: MIDP-2.0
\ No newline at end of file
Binary file javamanager/javainstaller/installer/tsrc/testserver/content/HelloWorld.jar has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testserver/content/HelloWorld_8mb.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,10 @@
+MIDlet-1: HelloWorld, , helloworld.HelloWorld
+MIDlet-Jar-Size: 7867927
+MIDlet-Jar-URL: HelloWorld_8mb.jar
+MIDlet-Name: HelloWorld_8mb
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MicroEdition-Configuration: CLDC-1.0
+MicroEdition-Profile: MIDP-2.0
+MIDlet-Install-Notify: http://<SERVER><CONTEXT>/notify?tID=900_success
+MIDlet-Delete-Notify: http://<SERVER><CONTEXT>/notify?tID=912_deletion
Binary file javamanager/javainstaller/installer/tsrc/testserver/content/HelloWorld_8mb.jar has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testserver/content/HelloWorld_ota.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,10 @@
+MIDlet-1: HelloWorld, , helloworld.HelloWorld
+MIDlet-Jar-Size: 1511
+MIDlet-Jar-URL: HelloWorld.jar
+MIDlet-Name: HelloWorld
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MicroEdition-Configuration: CLDC-1.0
+MicroEdition-Profile: MIDP-2.0
+MIDlet-Install-Notify: http://<SERVER><CONTEXT>/notify?tID=900_success
+MIDlet-Delete-Notify: http://<SERVER><CONTEXT>/notify?tID=912_deletion
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testserver/content/HelloWorld_redirect.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,9 @@
+MIDlet-1: HelloWorld, , helloworld.HelloWorld
+MIDlet-Jar-Size: 1719
+MIDlet-Jar-URL: http://<SERVER><CONTEXT>/redirect?name=HelloWorld_redirect.jar
+MIDlet-Name: HelloWorld_redirect
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MicroEdition-Configuration: CLDC-1.0
+MicroEdition-Profile: MIDP-2.0
+MIDlet-Install-Notify: http://<SERVER><CONTEXT>/notify?tID=900_success
Binary file javamanager/javainstaller/installer/tsrc/testserver/content/HelloWorld_redirect.jar has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testserver/content/META-INF/MANIFEST.MF	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path: 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testserver/content/META-INF/context.xml	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+#
+# 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: 
+#
+-->
+<Context docBase="installertest" path="/installertest">
+</Context>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testserver/content/WEB-INF/web.xml	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+#
+# 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:
+#
+-->
+<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
+  <display-name>installertest</display-name>
+
+  <servlet>
+    <description></description>
+    <display-name>redirect</display-name>
+    <servlet-name>redirect</servlet-name>
+    <servlet-class>com.nokia.mj.impl.installer.testserver.RedirectServlet</servlet-class>
+  </servlet>
+  <servlet-mapping>
+    <servlet-name>redirect</servlet-name>
+    <url-pattern>/redirect</url-pattern>
+  </servlet-mapping>
+
+  <servlet>
+    <description></description>
+    <display-name>jad</display-name>
+    <servlet-name>jad</servlet-name>
+    <servlet-class>com.nokia.mj.impl.installer.testserver.JadServlet</servlet-class>
+  </servlet>
+  <servlet-mapping>
+    <servlet-name>jad</servlet-name>
+    <url-pattern>*.jad</url-pattern>
+  </servlet-mapping>
+
+  <servlet>
+    <description></description>
+    <display-name>notify</display-name>
+    <servlet-name>notify</servlet-name>
+    <servlet-class>com.nokia.mj.impl.installer.testserver.NotifyServlet</servlet-class>
+  </servlet>
+  <servlet-mapping>
+    <servlet-name>notify</servlet-name>
+    <url-pattern>/notify</url-pattern>
+  </servlet-mapping>
+
+  <security-constraint>
+    <web-resource-collection>
+      <web-resource-name></web-resource-name>
+      <url-pattern>/httpauth/*</url-pattern>
+    </web-resource-collection>
+    <auth-constraint>
+      <role-name>guest</role-name>
+    </auth-constraint>
+  </security-constraint>
+  <login-config>
+    <auth-method>BASIC</auth-method>
+    <realm-name>httpauth</realm-name>
+  </login-config>
+
+  <security-role>
+    <role-name>guest</role-name>
+  </security-role>
+
+</web-app>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testserver/content/httpauth/HelloWorld_http_auth.jad	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,8 @@
+MIDlet-1: HelloWorld, , helloworld.HelloWorld
+MIDlet-Jar-Size: 1721
+MIDlet-Jar-URL: HelloWorld_http_auth.jar
+MIDlet-Name: HelloWorld_http_auth
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MicroEdition-Configuration: CLDC-1.0
+MicroEdition-Profile: MIDP-2.0
\ No newline at end of file
Binary file javamanager/javainstaller/installer/tsrc/testserver/content/httpauth/HelloWorld_http_auth.jar has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testserver/javasrc/com/nokia/mj/impl/installer/testserver/JadServlet.java	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,104 @@
+/*
+* 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:
+*
+*/
+
+package com.nokia.mj.impl.installer.testserver;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * Servlet implementation class JadServlet
+ */
+public class JadServlet extends HttpServlet
+{
+    private static final long serialVersionUID = 1L;
+
+    protected void processRequest(HttpServletRequest request,
+                                  HttpServletResponse response)
+    throws ServletException, IOException
+    {
+        ServletContext context = getServletContext();
+        String localPath = context.getRealPath(request.getServletPath());
+
+        response.setContentType("text/vnd.sun.j2me.app-descriptor");
+
+        BufferedReader in = null;
+        ServletOutputStream out = null;
+
+        try
+        {
+            in = new BufferedReader(new FileReader(localPath));
+            out = response.getOutputStream();
+
+            String line = in.readLine();
+            while (line != null)
+            {
+                if (line.startsWith("MIDlet-Jar-URL:")
+                        || line.startsWith("MIDlet-Install-Notify:")
+                        || line.startsWith("MIDlet-Delete-Notify:"))
+                {
+                    line = line.replaceAll("<SERVER>", request.getServerName()
+                                           + ":" + request.getServerPort());
+                    line = line.replaceAll("<CONTEXT>",
+                                           request.getContextPath());
+                }
+                out.println(line);
+                line = in.readLine();
+            }
+        }
+        catch (FileNotFoundException e)
+        {
+            response.sendError(HttpServletResponse.SC_NOT_FOUND,
+                               request.getServletPath());
+        }
+        finally
+        {
+            if (out != null)
+            {
+                out.close();
+            }
+            if (in != null)
+            {
+                in.close();
+            }
+        }
+    }
+
+    protected void doGet(HttpServletRequest request,
+                         HttpServletResponse response)
+    throws ServletException, IOException
+    {
+        processRequest(request, response);
+    }
+
+    protected void doPost(HttpServletRequest request,
+                          HttpServletResponse response)
+    throws ServletException, IOException
+    {
+        processRequest(request, response);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testserver/javasrc/com/nokia/mj/impl/installer/testserver/NotifyServlet.java	Wed Jun 23 18:07:10 2010 +0300
@@ -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:
+*
+*/
+
+package com.nokia.mj.impl.installer.testserver;
+
+import java.io.IOException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * Servlet implementation class NotifyServlet
+ */
+public class NotifyServlet extends HttpServlet
+{
+    private static final long serialVersionUID = 1L;
+
+    protected void processRequest(HttpServletRequest request,
+                                  HttpServletResponse response)
+    throws ServletException, IOException
+    {
+        response.setStatus(HttpServletResponse.SC_OK);
+    }
+
+    protected void doGet(HttpServletRequest request,
+                         HttpServletResponse response)
+    throws ServletException, IOException
+    {
+        processRequest(request, response);
+    }
+
+    protected void doPost(HttpServletRequest request,
+                          HttpServletResponse response)
+    throws ServletException, IOException
+    {
+        processRequest(request, response);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testserver/javasrc/com/nokia/mj/impl/installer/testserver/RedirectServlet.java	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,84 @@
+/*
+* 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:
+*
+*/
+
+package com.nokia.mj.impl.installer.testserver;
+
+import java.io.IOException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * Servlet implementation class RedirectServlet
+ */
+public class RedirectServlet extends HttpServlet
+{
+    private static final long serialVersionUID = 1L;
+
+    protected void processRequest(HttpServletRequest request,
+                                  HttpServletResponse response)
+    throws ServletException, IOException
+    {
+        int redirectCount = 1;
+        String redirectUrl = "http://" + request.getServerName() + ":"
+                             + request.getServerPort()
+                             + request.getContextPath();
+
+        String countParam = request.getParameter("count");
+        String nameParam = request.getParameter("name");
+
+        if (countParam != null)
+        {
+            try
+            {
+                redirectCount = Integer.parseInt(countParam);
+            }
+            catch (NumberFormatException nfe)
+            {
+            }
+        }
+
+        if (redirectCount > 1)
+        {
+            redirectUrl += request.getServletPath() + "?count="
+                           + (redirectCount - 1) + "&name=";
+        }
+        else
+        {
+            redirectUrl += "/";
+        }
+
+        redirectUrl += nameParam;
+        response.sendRedirect(redirectUrl);
+    }
+
+    protected void doGet(HttpServletRequest request,
+                         HttpServletResponse response)
+    throws ServletException, IOException
+    {
+        processRequest(request, response);
+    }
+
+    protected void doPost(HttpServletRequest request,
+                          HttpServletResponse response)
+    throws ServletException, IOException
+    {
+        processRequest(request, response);
+    }
+
+}
--- a/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/InstallerUi.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/InstallerUi.java	Wed Jun 23 18:07:10 2010 +0300
@@ -385,6 +385,13 @@
     }
 
     /**
+     * Executes given Runnable synchronously in the UI thread. 
+     */
+    public void syncExec(Runnable aRunnable)
+    {
+    }
+
+    /**
      * Writes an info log entry to JavaInstaller log.
      *
      * @param aMsg message to be logged
--- a/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/InstallerUiFactory.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/InstallerUiFactory.java	Wed Jun 23 18:07:10 2010 +0300
@@ -50,9 +50,9 @@
             installerUi = (InstallerUi)clazz.newInstance();
             installerUi.init(aMode, aListener);
         }
-        catch (Exception ex)
+        catch (Throwable t)
         {
-            logError("Instantiating " + className + " failed", ex);
+            logError("Instantiating " + className + " failed", t);
         }
         return installerUi;
     }
--- a/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt/InstallerUiEswt.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt/InstallerUiEswt.java	Wed Jun 23 18:07:10 2010 +0300
@@ -126,7 +126,6 @@
         // Create a hashtable for icons.
         iImageTable = new Hashtable();
         // Create a new thread to be the UI main thread.
-        iUiThreadExists = true;
         UIThreadSupport.startInUIThread(new Runnable()
         {
             public void run()
@@ -145,6 +144,7 @@
     private void uiMain()
     {
         log("uiMain: thread started");
+        iUiThreadExists = true;
         try
         {
             // Create the necessary views.
@@ -994,6 +994,14 @@
     }
 
     /**
+     * Executes given Runnable synchronously in the UI thread.
+     */
+    public void syncExec(Runnable aRunnable)
+    {
+        iParent.getDisplay().syncExec(aRunnable);
+    }
+
+    /**
      * Returns string title basing on mode of this InstallerUi.
      */
     protected String getTitle()
--- a/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/InstallerUiEswt.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/InstallerUiEswt.java	Wed Jun 23 18:07:10 2010 +0300
@@ -62,6 +62,8 @@
  */
 public class InstallerUiEswt extends InstallerUi
 {
+    /** Disable UI temporarily. */
+    private static final boolean DISABLE_UI = true;
     /** Default shell style. */
     private static final int SHELL_STYLE =
         SWT.BORDER | SWT.APPLICATION_MODAL | SWT.ON_TOP;
@@ -135,7 +137,6 @@
         // Create a hashtable for icons.
         iImageTable = new Hashtable();
         // Create a new thread to be the UI main thread.
-        iUiThreadExists = true;
         UIThreadSupport.startInUIThread(new Runnable()
         {
             public void run()
@@ -154,6 +155,7 @@
     private void uiMain()
     {
         log("uiMain: thread started");
+        iUiThreadExists = true;
         try
         {
             // Create the necessary views.
@@ -463,7 +465,7 @@
     public void updateProgress(int aProgress)
     {
         super.updateProgress(aProgress);
-        if (true) return; // Disable UI temporarily.
+        if (DISABLE_UI) return; // Disable UI temporarily.
         if (!isUiReady())
         {
             return;
@@ -510,7 +512,7 @@
     public void ended()
     {
         super.ended();
-        if (true) return; // Disable UI temporarily.
+        if (DISABLE_UI) return; // Disable UI temporarily.
         if (!isUiReady())
         {
             return;
@@ -555,7 +557,7 @@
     public void started(DownloadInfo aDownloadInfo)
     {
         super.started(aDownloadInfo);
-        if (true) return; // Disable UI temporarily.
+        if (DISABLE_UI) return; // Disable UI temporarily.
         if (!isUiReady())
         {
             return;
@@ -582,7 +584,7 @@
     public void updateProgress(DownloadInfo aDownloadInfo)
     {
         super.updateProgress(aDownloadInfo);
-        if (true) return; // Disable UI temporarily.
+        if (DISABLE_UI) return; // Disable UI temporarily.
         if (!isUiReady())
         {
             return;
@@ -632,7 +634,7 @@
     public void ended(DownloadInfo aDownloadInfo)
     {
         super.ended(aDownloadInfo);
-        if (true) return; // Disable UI temporarily.
+        if (DISABLE_UI) return; // Disable UI temporarily.
         if (!isUiReady())
         {
             return;
@@ -659,7 +661,7 @@
     public void setOcspIndicator(boolean aOn)
     {
         super.setOcspIndicator(aOn);
-        if (true) return; // Disable UI temporarily.
+        if (DISABLE_UI) return; // Disable UI temporarily.
         waitForUi();
         if (!isUiReady())
         {
@@ -760,7 +762,7 @@
     public void error(InstallerExceptionBase aInstallerException)
     {
         super.error(aInstallerException);
-        if (true) return; // Disable UI temporarily.
+        if (DISABLE_UI) return; // Disable UI temporarily.
 
         waitForUi();
         if (!isUiReady()) {
@@ -857,7 +859,7 @@
      */
     public boolean confirm(String aAppName, ConfirmData aConfirmData)
     {
-        if (true) return true; // Disable UI temporarily.
+        if (DISABLE_UI) return true; // Disable UI temporarily.
         waitForUi();
         if (!isUiReady()) {
             return true;
@@ -896,7 +898,7 @@
      */
     public String[] getUsernamePassword(String aUrl)
     {
-        if (true) return new String[] { "", "" }; // Disable UI temporarily.
+        if (DISABLE_UI) return new String[] { "", "" }; // Disable UI temporarily.
         waitForUi();
         if (!isUiReady())
         {
@@ -952,7 +954,7 @@
      */
     public boolean launchAppQuery(LaunchAppInfo aLaunchAppInfo)
     {
-        if (true) return false; // Disable UI temporarily.
+        if (DISABLE_UI) return false; // Disable UI temporarily.
         waitForUi();
         if (!isUiReady() || iConfirmationsCanceled || getInstallInfo() == null)
         {
@@ -974,19 +976,31 @@
             });
         }
         boolean result = iLaunchAppQueryView.launchAppQuery(aLaunchAppInfo);
-        iParent.getDisplay().syncExec(new Runnable()
+        iLaunchAppQueryView.dispose();
+        iLaunchAppQueryView = null;
+        if (!result)
         {
-            public void run()
+            iParent.getDisplay().syncExec(new Runnable()
             {
-                iParent.dispose();
-            }
-        });
-        iLaunchAppQueryView = null;
+                public void run()
+                {
+                    iParent.dispose();
+                }
+            });
+        }
         log("LaunchAppQuery returns " + result + " for " + aLaunchAppInfo);
         return result;
     }
 
     /**
+     * Executes given Runnable synchronously in the UI thread.
+     */
+    public void syncExec(Runnable aRunnable)
+    {
+        iParent.getDisplay().syncExec(aRunnable);
+    }
+
+    /**
      * Hides or unhides InstallerUi.
      */
     public void hide(boolean aHide)
--- a/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/LaunchAppQueryView.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/LaunchAppQueryView.java	Wed Jun 23 18:07:10 2010 +0300
@@ -18,12 +18,9 @@
 
 package com.nokia.mj.impl.installer.ui.eswt2;
 
-import com.nokia.mj.impl.installer.ui.InstallInfo;
 import com.nokia.mj.impl.installer.ui.LaunchAppInfo;
 
-import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Button;
 
 /**
  * LaunchAppQueryView asks from the user if the installed
@@ -31,9 +28,6 @@
  */
 public class LaunchAppQueryView extends ConfirmationViewBase
 {
-    private LaunchAppInfo iLaunchAppInfo = null;
-    private Button iDefaultButton = null;
-
     /** Constructor */
     protected LaunchAppQueryView()
     {
@@ -58,7 +52,6 @@
             return false;
         }
 
-        iLaunchAppInfo = aLaunchAppInfo;
         // Use confirm() from super class to display the view.
         boolean result = confirm();
         // Return the result to the client.
@@ -81,26 +74,4 @@
     {
         // User selection data is initialized in button listeners.
     }
-
-    /**
-     * Returns SWT style for this view.
-     */
-    protected int getStyle()
-    {
-        return SWT.V_SCROLL;
-    }
-
-    /**
-     * Called after view and commands have been created. Subclasses
-     * can overrride this method to set focus to their own default
-     * commands.
-     */
-    protected void setDefaultCommand()
-    {
-        if (iDefaultButton != null)
-        {
-            iDefaultButton.setFocus();
-            getShell().setDefaultButton(iDefaultButton);
-        }
-    }
 }
--- a/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/ProgressView.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/ProgressView.java	Wed Jun 23 18:07:10 2010 +0300
@@ -169,13 +169,17 @@
         {
             public void run()
             {
+                // Set horizontalSpan to 2 for one button,
+                // and to 1 for one two buttons.
+                int horizontalSpan = 2;
+                GridData gridData = null;
+                /*
                 iHideCommand = new Button(getCommandComposite(), SWT.PUSH);
-                GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
-                gridData.horizontalSpan = 1;
+                gridData = new GridData(GridData.FILL_HORIZONTAL);
+                gridData.horizontalSpan = horizontalSpan;
                 iHideCommand.setLayoutData(gridData);
                 iHideCommand.setText(InstallerUiTexts.get(InstallerUiTexts.HIDE));
-                iHideCommand.addSelectionListener
-                (new SelectionListener()
+                iHideCommand.addSelectionListener(new SelectionListener()
                 {
                     public void widgetDefaultSelected(SelectionEvent aEvent)
                     {
@@ -187,15 +191,15 @@
                     }
                 });
                 addSoftKeyListenerFor(iHideCommand);
+                */
 
                 iCancelCommand = new Button(getCommandComposite(), SWT.PUSH);
                 gridData = new GridData(GridData.FILL_HORIZONTAL);
-                gridData.horizontalSpan = 1;
+                gridData.horizontalSpan = horizontalSpan;
                 iCancelCommand.setLayoutData(gridData);
                 iCancelCommand.setText(
                     InstallerUiTexts.get(InstallerUiTexts.CANCEL));
-                iCancelCommand.addSelectionListener
-                (new SelectionListener()
+                iCancelCommand.addSelectionListener(new SelectionListener()
                 {
                     public void widgetDefaultSelected(SelectionEvent aEvent)
                     {
@@ -234,8 +238,11 @@
             public void run()
             {
                 getShell().setDefaultButton(null);
-                iHideCommand.dispose();
-                iHideCommand = null;
+                if (iHideCommand != null)
+                {
+                    iHideCommand.dispose();
+                    iHideCommand = null;
+                }
                 iCancelCommand.dispose();
                 iCancelCommand = null;
             }
--- a/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/ViewBase.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/ViewBase.java	Wed Jun 23 18:07:10 2010 +0300
@@ -658,7 +658,7 @@
         GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
         gridData.horizontalSpan = aColumns;
         gridData.horizontalAlignment = SWT.CENTER;
-        gridData.verticalAlignment = SWT.CENTER;
+        gridData.verticalAlignment = SWT.TOP;
         label.setLayoutData(gridData);
         return label;
     }
--- a/javamanager/javainstaller/javasifplugin/build/javasifplugin.mmp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/javasifplugin/build/javasifplugin.mmp	Wed Jun 23 18:07:10 2010 +0300
@@ -52,9 +52,6 @@
 USERINCLUDE     ../inc
 USERINCLUDE     ../../../../inc
 
-SYSTEMINCLUDE   ../../../../inc
-SYSTEMINCLUDE   /epoc32/include/mw/usif
-
 // Libraries
 LIBRARY         apgrfx.lib
 LIBRARY         apmime.lib
--- a/javamanager/javainstaller/javasifplugin/inc/javasifplugin.h	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/javasifplugin/inc/javasifplugin.h	Wed Jun 23 18:07:10 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 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"
@@ -222,6 +222,22 @@
     void CopyFilesIfNeededL(TFileName &aFileName);
 
     /**
+     * Uses the information in aArguments to create the correct command line for
+     * Java Installer.
+     *
+     * @param aCommandLine the buffer to be filled with command line arguments
+     * @param aArguments The array of opaque params for the plug-in. An empty
+     *   array may be passed.  The following param is defined for the "SCOMO Install
+     *   Inactive" operation:
+     *   Name: InstallInactive, Type: Int, Value: ETrue
+     *   If a plug-in receives this param, it must install a component normally but the SCOMO
+     *   State should remain EDeactivated.
+     */
+    void BuildInstallCommandLine(
+        TBuf<1536>& aCommandLine,
+        const COpaqueNamedParams& aArguments);
+
+    /**
      * If Java Installer is already running, set error category EInstallerBusy etc
      * to aResults, set aStatus to KErrAlreadyExists and return ETrue
      * @param[in][out] aResults
--- a/javamanager/javainstaller/javasifplugin/inc/resultsserver.h	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/javasifplugin/inc/resultsserver.h	Wed Jun 23 18:07:10 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 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 the License "Eclipse Public License v1.0"
@@ -71,6 +71,8 @@
 private:
     void clearData();
     void setComponentInfoL();
+    void resetDefaultErrorValues();
+    void setCommonErrorInfo(int aResult);
 
 private:
     int iRunning;   // 1 if running, 0 if not running
--- a/javamanager/javainstaller/javasifplugin/src/javasifplugin.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/javasifplugin/src/javasifplugin.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 - 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"
@@ -24,7 +24,7 @@
 #include <e32property.h>
 #include <charconv.h>
 #include <data_caging_path_literals.hrh>
-#include <usiferror.h>
+#include <usif/usiferror.h>
 
 #include "comms.h"
 #include "commsmessage.h"
@@ -318,180 +318,7 @@
         commandLine.Append(_L(" -silent"));
     }
 
-    TBool paramFound = EFalse;
-    TInt  intValue = 0;
-    TDesC desValue = KNullDesC;
-
-    // KSifInParam_Drive -> -drive=install_target_drive (A, B, C, ..., Z)
-    TRAP_IGNORE(paramFound = aArguments.GetIntByNameL(KSifInParam_Drive, intValue));
-    if (paramFound)
-    {
-        // Value 0 is 'A:' drive and  value 25 is 'Z:' drive
-        if ((intValue > -1) && (intValue < 26))
-        {
-            commandLine.Append(_L(" -drive="));
-            TChar drive('A');
-            drive += intValue;
-            commandLine.Append(drive);
-        }
-        else
-        {
-            WLOG1(EJavaInstaller,
-                "CJavaSifPlugin::Install Ignoring illegal KSifInParam_Drive param (value %d)",
-                intValue);
-        }
-    }
-
-    // KSifInParam_PerformOCSP Yes/No/AskUser -> -ocsp=yes|no
-    TRAP_IGNORE(paramFound = aArguments.GetIntByNameL(KSifInParam_PerformOCSP, intValue));
-    if (paramFound)
-    {
-        if (intValue == 0) // Yes
-        {
-            commandLine.Append(_L(" -ocsp=yes"));
-        }
-        else if (intValue == 1) // No
-        {
-            commandLine.Append(_L(" -ocsp=no"));
-        }
-        // AskUser is not supported
-    }
-
-    // KSifInParam_IgnoreOCSPWarnings Yes/No/AskUser -> -ignore_ocsp_warnings=yes|no
-    TRAP_IGNORE(paramFound = aArguments.GetIntByNameL(KSifInParam_IgnoreOCSPWarnings, intValue));
-    if (paramFound)
-    {
-        if (intValue == 0) // Yes
-        {
-            commandLine.Append(_L(" -ignore_ocsp_warnings=yes"));
-        }
-        else if (intValue == 1) // No
-        {
-            commandLine.Append(_L(" -ignore_ocsp_warnings=no"));
-        }
-        // AskUser is not supported
-    }
-
-    // KSifInParam_AllowUpgrade Yes/No/AskUser -> -upgrade=yes|no
-    TRAP_IGNORE(paramFound = aArguments.GetIntByNameL(KSifInParam_AllowUpgrade, intValue));
-    if (paramFound)
-    {
-        if (intValue == 0) // Yes
-        {
-            commandLine.Append(_L(" -upgrade=yes"));
-        }
-        else if (intValue == 1) // No
-        {
-            commandLine.Append(_L(" -upgrade=no"));
-        }
-        // AskUser is not supported
-    }
-
-
-    // TODO: activate this code block when KSifInParam_UpgradeData has been
-    // defined in sifcommon.h
-/*
-    // KSifInParam_UpgradeData Yes/No/AskUser -> -upgrade_data=yes|no
-    TRAP_IGNORE(paramFound = aArguments.GetIntByNameL(KSifInParam_UpgradeData, intValue));
-    if (paramFound)
-    {
-        if (intValue == 0) // Yes
-        {
-            commandLine.Append(_L(" -upgrade_data=yes"));
-        }
-        else if (intValue == 1) // No
-        {
-            commandLine.Append(_L(" -upgrade_data=no"));
-        }
-        // AskUser is not supported
-    }
-*/
-
-    // KSifInParam_AllowUntrusted Yes/No/AskUser -> -untrusted=yes|no
-    TRAP_IGNORE(paramFound = aArguments.GetIntByNameL(KSifInParam_AllowUntrusted, intValue));
-    if (paramFound)
-    {
-        if (intValue == 0) // Yes
-        {
-            commandLine.Append(_L(" -untrusted=yes"));
-        }
-        else if (intValue == 1) // No
-        {
-            commandLine.Append(_L(" -untrusted=no"));
-        }
-        // AskUser is not supported
-    }
-
-    // KSifInParam_AllowOverwrite Yes/No/AskUser -> -overwrite=yes|no
-    TRAP_IGNORE(paramFound = aArguments.GetIntByNameL(KSifInParam_AllowOverwrite, intValue));
-    if (paramFound)
-    {
-        if (intValue == 0) // Yes
-        {
-            commandLine.Append(_L(" -overwrite=yes"));
-        }
-        else if (intValue == 1) // No
-        {
-            commandLine.Append(_L(" -overwrite=no"));
-        }
-        // AskUser is not supported
-    }
-
-    // KSifInParam_AllowDownload Yes/No/AskUser -> -download=yes|no
-    TRAP_IGNORE(paramFound = aArguments.GetIntByNameL(KSifInParam_AllowDownload, intValue));
-    if (paramFound)
-    {
-        if (intValue == 0) // Yes
-        {
-            commandLine.Append(_L(" -download=yes"));
-        }
-        else if (intValue == 1) // No
-        {
-            commandLine.Append(_L(" -download=no"));
-        }
-        // AskUser is not supported
-    }
-
-    // KSifInParam_UserName -> -username=download_username
-    TRAP_IGNORE(desValue = aArguments.StringByNameL(KSifInParam_UserName));
-    if (desValue.Length() > 0)
-    {
-        commandLine.Append(_L(" -username="));
-        commandLine.Append(desValue);
-    }
-
-    // KSifInParam_Password -> -password=download_password
-    TRAP_IGNORE(desValue = aArguments.StringByNameL(KSifInParam_Password));
-    if (desValue.Length() > 0)
-    {
-        commandLine.Append(_L(" -password="));
-        commandLine.Append(desValue);
-    }
-
-    // KSifInParam_SourceUrl -> -sourceurl=original (HTTP) URL of the JAD or JAR file
-    TRAP_IGNORE(desValue = aArguments.StringByNameL(KSifInParam_SourceUrl));
-    if (desValue.Length() > 0)
-    {
-        commandLine.Append(_L(" -sourceurl="));
-        commandLine.Append(desValue);
-    }
-
-    // KSifInParam_IAP -> -iap=IAP_ID (internet access point id)
-    TRAP_IGNORE(paramFound = aArguments.GetIntByNameL(KSifInParam_IAP, intValue));
-    if (paramFound)
-    {
-        commandLine.Append(_L(" -iap="));
-        commandLine.AppendNum(intValue);
-    }
-
-    // KSifInParam_Charset -> -charset=Internet-standard character set name
-    TRAP_IGNORE(desValue = aArguments.StringByNameL(KSifInParam_Charset));
-    if (desValue.Length() > 0)
-    {
-        commandLine.Append(_L(" -charset="));
-        commandLine.Append(desValue);
-    }
-
+    BuildInstallCommandLine(commandLine, aArguments);
 
     // Ask Java Installer to send installation results back
     // as Comms message. 11000 is IPC_ADDRESS_JAVA_SIF_PLUGIN_C Comms endpoint
@@ -836,6 +663,189 @@
     return;
 }
 
+
+void CJavaSifPlugin::BuildInstallCommandLine(
+        TBuf<1536>& aCommandLine,
+        const COpaqueNamedParams& aArguments)
+{
+    TBool paramFound = EFalse;
+    TInt  intValue = 0;
+    TDesC desValue = KNullDesC;
+
+    // KSifInParam_Drive -> -drive=install_target_drive (A, B, C, ..., Z)
+    TRAP_IGNORE(paramFound = aArguments.GetIntByNameL(KSifInParam_Drive, intValue));
+    if (paramFound)
+    {
+        // Value 0 is 'A:' drive and  value 25 is 'Z:' drive
+        if ((intValue > -1) && (intValue < 26))
+        {
+            aCommandLine.Append(_L(" -drive="));
+            TChar drive('A');
+            drive += intValue;
+            aCommandLine.Append(drive);
+        }
+        else
+        {
+            WLOG1(EJavaInstaller,
+                "CJavaSifPlugin::Install Ignoring illegal KSifInParam_Drive param (value %d)",
+                intValue);
+        }
+    }
+
+    // KSifInParam_PerformOCSP Yes/No/AskUser -> -ocsp=yes|no
+    TRAP_IGNORE(paramFound = aArguments.GetIntByNameL(KSifInParam_PerformOCSP, intValue));
+    if (paramFound)
+    {
+        if (intValue == 0) // Yes
+        {
+            aCommandLine.Append(_L(" -ocsp=yes"));
+        }
+        else if (intValue == 1) // No
+        {
+            aCommandLine.Append(_L(" -ocsp=no"));
+        }
+        // AskUser is not supported
+    }
+
+    // KSifInParam_IgnoreOCSPWarnings Yes/No/AskUser -> -ignore_ocsp_warnings=yes|no
+    TRAP_IGNORE(paramFound = aArguments.GetIntByNameL(KSifInParam_IgnoreOCSPWarnings, intValue));
+    if (paramFound)
+    {
+        if (intValue == 0) // Yes
+        {
+            aCommandLine.Append(_L(" -ignore_ocsp_warnings=yes"));
+        }
+        else if (intValue == 1) // No
+        {
+            aCommandLine.Append(_L(" -ignore_ocsp_warnings=no"));
+        }
+        // AskUser is not supported
+    }
+
+    // KSifInParam_AllowUpgrade Yes/No/AskUser -> -upgrade=yes|no
+    TRAP_IGNORE(paramFound = aArguments.GetIntByNameL(KSifInParam_AllowUpgrade, intValue));
+    if (paramFound)
+    {
+        if (intValue == 0) // Yes
+        {
+            aCommandLine.Append(_L(" -upgrade=yes"));
+        }
+        else if (intValue == 1) // No
+        {
+            aCommandLine.Append(_L(" -upgrade=no"));
+        }
+        // AskUser is not supported
+    }
+
+
+    // TODO: activate this code block when KSifInParam_UpgradeData has been
+    // defined in sifcommon.h
+/*
+    // KSifInParam_UpgradeData Yes/No/AskUser -> -upgrade_data=yes|no
+    TRAP_IGNORE(paramFound = aArguments.GetIntByNameL(KSifInParam_UpgradeData, intValue));
+    if (paramFound)
+    {
+        if (intValue == 0) // Yes
+        {
+            aCommandLine.Append(_L(" -upgrade_data=yes"));
+        }
+        else if (intValue == 1) // No
+        {
+            aCommandLine.Append(_L(" -upgrade_data=no"));
+        }
+        // AskUser is not supported
+    }
+*/
+
+    // KSifInParam_AllowUntrusted Yes/No/AskUser -> -untrusted=yes|no
+    TRAP_IGNORE(paramFound = aArguments.GetIntByNameL(KSifInParam_AllowUntrusted, intValue));
+    if (paramFound)
+    {
+        if (intValue == 0) // Yes
+        {
+            aCommandLine.Append(_L(" -untrusted=yes"));
+        }
+        else if (intValue == 1) // No
+        {
+            aCommandLine.Append(_L(" -untrusted=no"));
+        }
+        // AskUser is not supported
+    }
+
+    // KSifInParam_AllowOverwrite Yes/No/AskUser -> -overwrite=yes|no
+    TRAP_IGNORE(paramFound = aArguments.GetIntByNameL(KSifInParam_AllowOverwrite, intValue));
+    if (paramFound)
+    {
+        if (intValue == 0) // Yes
+        {
+            aCommandLine.Append(_L(" -overwrite=yes"));
+        }
+        else if (intValue == 1) // No
+        {
+            aCommandLine.Append(_L(" -overwrite=no"));
+        }
+        // AskUser is not supported
+    }
+
+    // KSifInParam_AllowDownload Yes/No/AskUser -> -download=yes|no
+    TRAP_IGNORE(paramFound = aArguments.GetIntByNameL(KSifInParam_AllowDownload, intValue));
+    if (paramFound)
+    {
+        if (intValue == 0) // Yes
+        {
+            aCommandLine.Append(_L(" -download=yes"));
+        }
+        else if (intValue == 1) // No
+        {
+            aCommandLine.Append(_L(" -download=no"));
+        }
+        // AskUser is not supported
+    }
+
+    // KSifInParam_UserName -> -username=download_username
+    TRAP_IGNORE(desValue = aArguments.StringByNameL(KSifInParam_UserName));
+    if (desValue.Length() > 0)
+    {
+        aCommandLine.Append(_L(" -username="));
+        aCommandLine.Append(desValue);
+    }
+
+    // KSifInParam_Password -> -password=download_password
+    TRAP_IGNORE(desValue = aArguments.StringByNameL(KSifInParam_Password));
+    if (desValue.Length() > 0)
+    {
+        aCommandLine.Append(_L(" -password="));
+        aCommandLine.Append(desValue);
+    }
+
+    // KSifInParam_SourceUrl -> -sourceurl=original (HTTP) URL of the JAD or JAR file
+    TRAP_IGNORE(desValue = aArguments.StringByNameL(KSifInParam_SourceUrl));
+    if (desValue.Length() > 0)
+    {
+        aCommandLine.Append(_L(" -sourceurl="));
+        aCommandLine.Append(desValue);
+    }
+
+    // KSifInParam_IAP -> -iap=IAP_ID (internet access point id)
+    TRAP_IGNORE(paramFound = aArguments.GetIntByNameL(KSifInParam_IAP, intValue));
+    if (paramFound)
+    {
+        aCommandLine.Append(_L(" -iap="));
+        aCommandLine.AppendNum(intValue);
+    }
+
+    // KSifInParam_Charset -> -charset=Internet-standard character set name
+    TRAP_IGNORE(desValue = aArguments.StringByNameL(KSifInParam_Charset));
+    if (desValue.Length() > 0)
+    {
+        aCommandLine.Append(_L(" -charset="));
+        aCommandLine.Append(desValue);
+    }
+
+    return;
+}
+
+
 TBool CJavaSifPlugin::ExitIfJavaInstallerRunning(
     COpaqueNamedParams& aResults,
     TRequestStatus& aStatus)
--- a/javamanager/javainstaller/javasifplugin/src/resultsserver.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javainstaller/javasifplugin/src/resultsserver.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009-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 the License "Eclipse Public License v1.0"
@@ -11,15 +11,18 @@
 *
 * Contributors:
 *
-* Description:  Comms server,
-*    part of Java platform 2.0 javarestoreconverter process
+* Description:  Comms server, part of Java Sif plugin.
+*               When started  in 'commsresult' mode from Java Sif plugin
+*               Java Installer sends the results of the operation
+*               it executes (install, uninstall or component info)
+*               to this server.
 *
 */
 
 
 #include <iostream>
 #include <unistd.h>
-#include <usiferror.h>
+#include <usif/usiferror.h>
 
 #include "comms.h"
 #include "javasymbianoslayer.h"
@@ -69,8 +72,10 @@
             "ResultsServer::start iResults.AddIntL ExtendedErrCode err %d", err);
     }
 
-    // TODO: return also localized error message from usif
+    // TODO: return also localized error message (KSifOutParam_ErrMessage and 
+    // perhaps also KSifOutParam_ErrMessageDetails) from usif
     // common localization file after the localized strings are available
+    
 
     iRunning = 1;
     iComms.registerDefaultListener(this);
@@ -145,58 +150,8 @@
 
             if (KErrNone != result)
             {
-                // return common error information
-                TRAP(err, iResults.AddIntL(KSifOutParam_ErrCode, result));
-                if (KErrNone != err)
-                {
-                    ELOG1(EJavaInstaller,
-                        "ResultsServer::processMessage iResults.AddIntL ErrCode err %d", err);
-                }
-
-                TRAP(err, iResults.AddIntL(
-                    KSifOutParam_ErrCategory, iIntPairs[L"error-category"]));
-                if (KErrNone != err)
-                {
-                    ELOG1(EJavaInstaller,
-                        "ResultsServer::processMessage iResults.AddIntL ErrCategory err %d",
-                        err);
-                }
-
-                HBufC *message = wstringToBuf(iStringPairs[L"error-message"]);
-                if (message == NULL)
-                {
-                    ELOG(EJavaInstaller,
-                          "ResultsServer::processMessage iResults.wstringToBuf returned NULL ");
-                }
-                else
-                {
-                    TRAP(err, iResults.AddStringL(KSifOutParam_ErrMessage, *message));
-                    if (KErrNone != err)
-                    {
-                        ELOG1(EJavaInstaller,
-                            "ResultsServer::processMessage iResults.AddStringL ErrMessage err %d",
-                            err);
-                    }
-                    delete message;
-                }
-
-                message = wstringToBuf(iStringPairs[L"error-details"]);
-                if (message == NULL)
-                {
-                    ELOG(EJavaInstaller,
-                          "ResultsServer::processMessage iResults.wstringToBuf 2 returned NULL ");
-                }
-                else
-                {
-                    TRAP(err, iResults.AddStringL(KSifOutParam_ErrMessageDetails, *message));
-                    if (KErrNone != err)
-                    {
-                        ELOG1(EJavaInstaller,
-                            "ResultsServer::processMessage iResults.AddStringL ErrMessageDetails "
-                            "err %d", err);
-                    }
-                    delete message;
-                }
+                // return common error information;
+                setCommonErrorInfo(result);
 
                 if (INSTALL_OPERATION == operation)
                 {
@@ -221,20 +176,7 @@
 
                 // Overwrite (reset) the default error values set for the case where no
                 // InstallerResultMessage is never received
-                TRAPD(err, iResults.AddIntL(KSifOutParam_ErrCategory, 0));
-                if (KErrNone != err)
-                {
-                    ELOG1(EJavaInstaller,
-                        "ResultsServer::processMessage iResults.AddIntL ErrCategory err %d", err);
-                }
-
-                TRAP(err, iResults.AddIntL(KSifOutParam_ErrCode, 0));
-                if (KErrNone != err)
-                {
-                    ELOG1(EJavaInstaller,
-                        "ResultsServer::processMessage iResults.AddIntL ErrCode err %d", err);
-                }
-
+                resetDefaultErrorValues();
 
                 if (INSTALL_OPERATION == operation)
                 {
@@ -299,6 +241,97 @@
 }
 
 
+/**
+ * Set common error information.
+ * Note that most of the information is in member variables
+ * iIntPairs and iStringPairs
+ *
+ * @param aResult  the error code to be set
+ */
+void ResultsServer::setCommonErrorInfo(int aResult)
+{
+    // return common error information
+    TRAPD(err, iResults.AddIntL(KSifOutParam_ErrCode, aResult));
+    if (KErrNone != err)
+    {
+        ELOG1(EJavaInstaller,
+            "ResultsServer::setCommonErrorInfo iResults.AddIntL ErrCode err %d", err);
+    }
+
+    TRAP(err, iResults.AddIntL(
+        KSifOutParam_ErrCategory, iIntPairs[L"error-category"]));
+    if (KErrNone != err)
+    {
+        ELOG1(EJavaInstaller,
+            "ResultsServer::setCommonErrorInfo iResults.AddIntL ErrCategory err %d",
+            err);
+    }
+
+    HBufC *message = wstringToBuf(iStringPairs[L"error-message"]);
+    if (message == NULL)
+    {
+        ELOG(EJavaInstaller,
+              "ResultsServer::setCommonErrorInfo iResults.wstringToBuf returned NULL ");
+    }
+    else
+    {
+        TRAP(err, iResults.AddStringL(KSifOutParam_ErrMessage, *message));
+        if (KErrNone != err)
+        {
+            ELOG1(EJavaInstaller,
+                "ResultsServer::setCommonErrorInfo iResults.AddStringL ErrMessage err %d",
+                err);
+        }
+        delete message;
+    }
+
+    message = wstringToBuf(iStringPairs[L"error-details"]);
+    if (message == NULL)
+    {
+        ELOG(EJavaInstaller,
+              "ResultsServer::setCommonErrorInfo iResults.wstringToBuf 2 returned NULL ");
+    }
+    else
+    {
+        TRAP(err, iResults.AddStringL(KSifOutParam_ErrMessageDetails, *message));
+        if (KErrNone != err)
+        {
+            ELOG1(EJavaInstaller,
+                "ResultsServer::setCommonErrorInfo iResults.AddStringL ErrMessageDetails "
+                "err %d", err);
+        }
+        delete message;
+    }
+}
+
+
+/**
+ * Overwrite (reset) the default error values to 'no error'.
+ * The default error values were originally set for the case
+ * where no InstallerResultMessage is never received and we must
+ * return sensible error information.
+ */
+void ResultsServer::resetDefaultErrorValues()
+{
+    TRAPD(err, iResults.AddIntL(KSifOutParam_ErrCategory, 0));
+    if (KErrNone != err)
+    {
+        ELOG1(EJavaInstaller,
+            "ResultsServer::resetDefaultErrorValues iResults.AddIntL ErrCategory err %d", err);
+    }
+
+    TRAP(err, iResults.AddIntL(KSifOutParam_ErrCode, 0));
+    if (KErrNone != err)
+    {
+        ELOG1(EJavaInstaller,
+            "ResultsServer::resetDefaultErrorValues iResults.AddIntL ErrCode err %d", err);
+    }
+
+    // TODO: reset also localized error message KSifOutParam_ErrMessage and 
+    // perhaps also KSifOutParam_ErrMessageDetails if they have been set in start()
+}
+
+
 void ResultsServer::clearData()
 {
     iIntPairs.clear();
--- a/javamanager/javalauncher/src.s60/javalauncher.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javalauncher/src.s60/javalauncher.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -92,7 +92,7 @@
     JavaStorageApplicationList_t  foundEntries;
 
 
-    // Get MIDlet-n from APPLICATION_PACKAGE_ATTRIBUTES_TABLE based on 
+    // Get MIDlet-n from APPLICATION_PACKAGE_ATTRIBUTES_TABLE based on
     // PACKAGE_ID and NAME.
     attribute.setEntry(ID, aPackageId);
     findPattern.insert(attribute);
@@ -107,7 +107,7 @@
         return KErrNotFound;
     }
 
-    // Found the MIDlet-n argument. Now getting the MIDlet name and 
+    // Found the MIDlet-n argument. Now getting the MIDlet name and
     // main class. Name is the first argument and main class is the last
     // in the comma separated list.
     std::wstring value = foundEntries.front().begin()->entryValue();
@@ -549,6 +549,10 @@
         err = getUidFromCommandLine(cmdLineBuf, uid);
         if (KErrNone != err)
         {
+            ELOG1WSTR(EJavaCaptain,
+                "JavaLauncher: process command line was %s",
+                 (wchar_t *)(cmdLineBuf.PtrZ()));
+
             CleanupStack::PopAndDestroy(pBufCmdLine);
             CleanupStack::PopAndDestroy(commandLine);
             return err;
@@ -773,6 +777,8 @@
               "javalauncher: OMJ app launch: Exception %s caught", e.what());
     }
 
+    delete pBufCmdLine;
+
     return err;
 }
 
--- a/javamanager/javamanager.pro	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javamanager.pro	Wed Jun 23 18:07:10 2010 +0300
@@ -22,7 +22,6 @@
 SUBDIRS += javaregistry 
 SUBDIRS += javabackup 
 SUBDIRS += javasettings 
-BLD_INF_RULES.prj_extensions += "$${LITERAL_HASH}include \"javasidchecker/build/bld.inf\""  
 BLD_INF_RULES.prj_extensions += "$${LITERAL_HASH}include \"javarecognizer/build/bld.inf\""  
 BLD_INF_RULES.prj_extensions += "$${LITERAL_HASH}include \"javaappschemeplugin/build/bld.inf\""  
 BLD_INF_RULES.prj_extensions += "prj_extensions" 
--- a/javamanager/javarecognizer/build/recjar.mmp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javarecognizer/build/recjar.mmp	Wed Jun 23 18:07:10 2010 +0300
@@ -32,7 +32,11 @@
 // Use bytepair compression to enable code paging
 PAGED
 
+APP_LAYER_SYSTEMINCLUDE
+
 USERINCLUDE     ../inc
+USERINCLUDE     ../../../inc 
+
 SOURCEPATH      ../src
 
 SOURCE          recjar.cpp
@@ -40,9 +44,6 @@
 TARGET          recjar.rsc
 END
 
-SYSTEMINCLUDE   ../../../inc 
-APP_LAYER_SYSTEMINCLUDE
-SYSTEMINCLUDE   /epoc32/include/ecom
 
 LIBRARY         euser.lib apmime.lib efsrv.lib
 
--- a/javamanager/javaregistry/build/eabi/javaregistryclientu.def	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javaregistry/build/eabi/javaregistryclientu.def	Wed Jun 23 18:07:10 2010 +0300
@@ -209,4 +209,12 @@
 	_ZNK4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry17UsedUserDiskSpaceEv @ 208 NONAME
 	_ZNK4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry14IsPreinstalledEv @ 209 NONAME
 	_ZNK4Java25CJavaRegistryPackageEntry14IsPreinstalledEv @ 210 NONAME
+	_ZN4Java14CJavaAttributeD0Ev @ 211 NONAME
+	_ZN4Java14CJavaAttributeD1Ev @ 212 NONAME
+	_ZN4Java14CJavaAttributeD2Ev @ 213 NONAME
+	_ZN4Java18CJavaRegistryEntryD0Ev @ 214 NONAME
+	_ZN4Java18CJavaRegistryEntryD1Ev @ 215 NONAME
+	_ZN4Java18CJavaRegistryEntryD2Ev @ 216 NONAME
+	_ZThn4_N4Java14CJavaAttributeD0Ev @ 217 NONAME
+	_ZThn4_N4Java14CJavaAttributeD1Ev @ 218 NONAME
 
--- a/javamanager/javaregistry/client/src/javaattribute.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javaregistry/client/src/javaattribute.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -92,7 +92,7 @@
 // ---------------------------------------------------------------------------
 // CJavaAttribute::~MJavaAttribute
 // ---------------------------------------------------------------------------
-CJavaAttribute::~CJavaAttribute()
+EXPORT_C CJavaAttribute::~CJavaAttribute()
 {
     delete iName;
     delete iValue;
--- a/javamanager/javaregistry/client/src/javaregistryentry.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javaregistry/client/src/javaregistryentry.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -115,7 +115,7 @@
 // CJavaRegistryEntry::~CJavaRegistryEntry
 // ---------------------------------------------------------------------------
 //
-CJavaRegistryEntry::~CJavaRegistryEntry()
+EXPORT_C CJavaRegistryEntry::~CJavaRegistryEntry()
 {
     if (iWritableEntry)
     {
--- a/javamanager/javaregistry/client/src/writeablejavaregistry.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javaregistry/client/src/writeablejavaregistry.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -414,7 +414,7 @@
             }
         }
     }
-    catch (ExceptionBase)
+    catch (ExceptionBase& ee)
     {
         ELOG1WSTR(EJavaStorage, "MediaId conversion failed: '%s'", value);
     }
--- a/javamanager/javasettings/appsettingsview_qt/build/javaapplicationsettingsview.pro	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javasettings/appsettingsview_qt/build/javaapplicationsettingsview.pro	Wed Jun 23 18:07:10 2010 +0300
@@ -15,8 +15,9 @@
 #
 TEMPLATE = lib
 TARGET = javaapplicationsettingsview
-CONFIG += qt hb stl plugin
-LIBS += -ljavastorage -lcmapplsettingsui -ljavaconnectionmanager -lqtbearer -ljavautils
+CONFIG += qt hb stl plugin mobility
+MOBILITY += bearer
+LIBS += -ljavastorage -lcmapplsettingsui -ljavaconnectionmanager -ljavautils
 TRANSLATIONS = javaruntimeapplicationsettings.ts          
 
 INCLUDEPATH += ../inc ../../../../inc
--- a/javamanager/javasettings/appsettingsview_qt/src/javaapplicationsettingsview_p.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javasettings/appsettingsview_qt/src/javaapplicationsettingsview_p.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -142,7 +142,7 @@
     if (mainForm)
     {        
         // do the connect for the main form
-        iPublicView->connect(mainForm, SIGNAL(activated(const QModelIndex)),
+        iPublicView->connect(mainForm, SIGNAL(itemShown(const QModelIndex)),
                              iPublicView, SLOT(_q_dataItemDisplayed(const QModelIndex)));
     
         // set the form as view's widget
@@ -231,7 +231,7 @@
     localizedSettingsNames[QString::fromStdWString(BROADCAST_SETTINGS)] = QString(hbTrId("txt_java_sett_setlabel_broadcast"));
     localizedSettingsNames[QString::fromStdWString(NFC_WRITE_ACCESS_SETTINGS)] = QString(hbTrId("txt_java_sett_setlabel_nfc_write_access"));
     localizedSettingsNames[QString::fromStdWString(URL_START_SETTINGS)] = QString(hbTrId("txt_java_sett_setlabel_url_start"));
-    vector<IndexedSettingsName> allSecuritySettings = readFromStorage(FUNCTION_GROUP, MIDP_FUNC_GRP_SETTINGS_TABLE);
+    vector<IndexedSettingsName> allSecuritySettings = readFromStorage(FUNCTION_GROUP, MIDP_FUNC_GRP_SETTINGS_TABLE, MIDP_PERMISSIONS_TABLE);
     // sort the security settings according to how they should be displayed
     std::sort(allSecuritySettings.begin(), allSecuritySettings.end(), AscendingSort());
     QHash<QString, int> settingsIndexes;
@@ -965,7 +965,7 @@
     return value;
 }
 
-vector<IndexedSettingsName> JavaApplicationSettingsViewPrivate::readFromStorage(const std::wstring& aColumnName, const std::string& aTableName)
+vector<IndexedSettingsName> JavaApplicationSettingsViewPrivate::readFromStorage(const std::wstring& aColumnName, const std::string& aPrimaryTableName, const std::string& aSecondaryTableName)
 {
     vector<IndexedSettingsName> values;
     
@@ -991,7 +991,7 @@
     settingsNamesIndexes[QString::fromStdWString(NFC_WRITE_ACCESS_SETTINGS)] = 15;
     settingsNamesIndexes[QString::fromStdWString(URL_START_SETTINGS)] = 16;
     int last_index = 16;
-
+    
     JavaStorageApplicationEntry_t query;
     JavaStorageApplicationList_t queryResult;
     JavaStorageEntry attr;
@@ -1002,8 +1002,10 @@
 
     try
     {
-        iStorage->search(aTableName, query, queryResult);
+        iStorage->search(aPrimaryTableName, query, queryResult);
+        
         JavaStorageApplicationList_t::const_iterator iterator;
+        JavaStorageApplicationList_t secondaryQueryResult;
         for (iterator = queryResult.begin(); iterator != queryResult.end(); iterator++)
         {
             std::wstring name = L"";
@@ -1011,22 +1013,32 @@
             JavaStorageEntry findPattern;
             findPattern.setEntry(aColumnName, L"");
             JavaStorageApplicationEntry_t::const_iterator findIterator =
-                entry.find(findPattern);
+                    entry.find(findPattern);
             if (findIterator != entry.end())
             {
                 name = findIterator->entryValue();
-            }
-            
+            }            
             if (name.size() > 0)
             {
-                IndexedSettingsName value;
-                value.name = name;
-                value.index = last_index + 1;
-                if (settingsNamesIndexes.contains(QString::fromStdWString(name)))
+                entry.clear();
+                query.clear();
+                attr.setEntry(ID, iSuiteUid);
+                query.insert(attr);
+                attr.setEntry(aColumnName, name);
+                query.insert(attr);
+                secondaryQueryResult.clear();
+                iStorage->search(aSecondaryTableName, query, secondaryQueryResult);
+                if (secondaryQueryResult.size() > 0)
                 {
-                    value.index = settingsNamesIndexes.value(QString::fromStdWString(name));
+                    IndexedSettingsName value;
+                    value.name = name;
+                    value.index = last_index + 1;
+                    if (settingsNamesIndexes.contains(QString::fromStdWString(name)))
+                    {
+                        value.index = settingsNamesIndexes.value(QString::fromStdWString(name));
+                    }
+                    values.push_back(value);
                 }
-                values.push_back(value);
             }
         }
     }
--- a/javamanager/javasettings/appsettingsview_qt/src/javaapplicationsettingsview_p.h	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/javasettings/appsettingsview_qt/src/javaapplicationsettingsview_p.h	Wed Jun 23 18:07:10 2010 +0300
@@ -80,7 +80,7 @@
     void writeToStorage(JavaApplicationSettings& settings);
     bool findFromStorage(const std::wstring&, const std::wstring&, const std::wstring&, const std::string&);
     std::wstring readFromStorage(const std::wstring&, const std::wstring&, const std::wstring&, const std::string&);
-    std::vector<IndexedSettingsName> readFromStorage(const std::wstring& aColumnName, const std::string& aTableName);
+    std::vector<IndexedSettingsName> readFromStorage(const std::wstring& aColumnName, const std::string& aPrimaryTableName,const std::string& aSecondaryTableName);
     void filterSecuritySettings(JavaApplicationSettings& settings);
     void findEntry(const java::storage::JavaStorageApplicationList_t&, const std::wstring&, std::wstring& eValue);
     void readSuiteUid(const QString& aAppUid);
--- a/javamanager/javasidchecker/build/bld.inf	Fri Jun 11 13:33:44 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +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:  Build information file for Java SID Checker component
-*
-*/
-
-
-#include <platform_paths.hrh>
-
-PRJ_PLATFORMS
-DEFAULT
-
-PRJ_MMPFILES
-javasidchecker.mmp
--- a/javamanager/javasidchecker/build/javasidchecker.mmp	Fri Jun 11 13:33:44 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +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:  This is an ECOM plugin for Symbian AppArc (database that contains
-*                info on all applications installed to the device)
-*                This plugin tells AppArc whether Java application installed
-*                to a removable storage media is present and can be executed.
-*
-*/
-
-
-//  INCLUDES
-#include <../../../inc/project_defines.hrh>
-#include <../../../inc/build_defines.hrh>
-#include <data_caging_paths.hrh>
-#include <platform_paths.hrh>
-
-#include <../../../inc/java_stdcpp_support_for_dll.hrh>
-
-TARGET javasidchecker.dll
-CAPABILITY All -Tcb
-TARGETTYPE plugin
-
-UID 0x10009d8d 0x10281FBE
-
-// Use bytepair compression to enable code paging
-PAGED
-
-// Includes
-USERINCLUDE     .
-USERINCLUDE     ../inc
-USERINCLUDE     ../../../inc
-
-// Sources
-SOURCEPATH    ../src
-SOURCE        javasidchecker.cpp
-
-start RESOURCE ../data/10281FBE.rss
-target javasidchecker.rsc
-end
-
-#ifdef RD_JAVA_OLD_SIDCHECKER_LIBRARY
-LIBRARY apfile.lib
-#else
-LIBRARY aplist.lib
-#endif
-
-LIBRARY ecom.lib
-LIBRARY javaregistryclient.lib
--- a/javamanager/javasidchecker/data/10281FBE.rss	Fri Jun 11 13:33:44 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +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:  Java Sid Checker is an ECOM plugin for Symbian AppArc
-*                (database that contains info on all applications installed
-*                 to the device)
-*                It tells AppArc whether Java application installed
-*                to a removable storage media is present and can be executed.
-*
-*/
-
-
-// Registry file for the CApparcVerifierInterface JavaRegistry implementation
-
-#include <ecom/registryinfov2.rh>
-#include "javauids.h"
-
-RESOURCE REGISTRY_INFO r_registry
-{
-    resource_format_version = RESOURCE_FORMAT_VERSION_2;
-	dll_uid = KJavaSidCheckerDllUid;    // must match the name of this file
-	interfaces =
-	{
-		INTERFACE_INFO
-		{
-			interface_uid = KSidCheckerEcomIfUid;
-			implementations =
-			{
-				IMPLEMENTATION_INFO
-				{
-					implementation_uid = KSidCheckerEcomImplUid;
-					// Version number is 2 so that this implementation should override the old one in ROM
-                    version_no         =  2;
-					display_name = "JavaVerify";
-					default_data = "[10210e26]";
-					opaque_data  = "";
-					rom_only           =  0;
-				}
-			};
-		}
-	};
-}
--- a/javamanager/javasidchecker/inc/javasidchecker.h	Fri Jun 11 13:33:44 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +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:  Java Sid Checker is an ECOM plugin for Symbian AppArc
- *                (database that contains info on all applications installed
- *                 to the device)
- *                It tells AppArc whether Java application installed
- *                to a removable storage media is present and can be executed.
- *
-*/
-
-
-#ifndef JAVASIDCHECKER_H
-#define JAVASIDCHECKER_H
-
-#include <apsidchecker.h>
-#include <javaregistryincludes.h>
-
-NONSHARABLE_CLASS(CJavaSidChecker) : public CAppSidChecker
-        /** Java Sid checker.
-
-        This is an implementation of CAppSidChecker for checking native application Sids
-
-        This instance of the CAppSidChecker is used to verify that a native application
-        installed and can be launched.
-        */
-{
-public:
-    static CJavaSidChecker* NewL();
-    ~CJavaSidChecker();
-
-    // From CAppSidChecker
-    TBool AppRegisteredAt(const TUid& aSid, TDriveUnit aDrive);
-
-    void SetRescanCallBackL(const TCallBack &aCallback);
-
-private:
-    CJavaSidChecker();
-    TBool AppRegisteredAtL(const TUid& aSid, TDriveUnit aDrive);
-
-    Java::CJavaRegistry* iJavaRegistry;
-};
-
-#endif // JAVASIDCHECKER_H
--- a/javamanager/javasidchecker/src/javasidchecker.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,110 +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:  Java Sid Checker is an ECOM plugin for Symbian AppArc
- *                (database that contains info on all applications installed
- *                 to the device)
- *                It tells AppArc whether Java application installed
- *                to a removable storage media is present and can be executed.
- *
-*/
-
-
-#include <e32std.h>
-#include <ecom/implementationproxy.h>
-#include <appversion.h>
-
-#include "javauids.h"
-#include "javasidchecker.h"
-#include "logger.h"
-
-
-// DLL Entry point
-TBool E32Dll()
-{
-    return ETrue;
-}
-
-// ECOM Implementation Table
-const TImplementationProxy ImplementationTable[] =
-{
-    IMPLEMENTATION_PROXY_ENTRY(KSidCheckerEcomImplUid, CJavaSidChecker::NewL)
-};
-
-EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
-{
-    aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
-    return ImplementationTable;
-}
-
-
-CJavaSidChecker* CJavaSidChecker::NewL()
-{
-    // Minimal construction (we don't want this to fail)
-    return new(ELeave) CJavaSidChecker;
-}
-
-CJavaSidChecker::CJavaSidChecker()
-{
-    iJavaRegistry = NULL;
-    LOG(EUtils, EInfo, "CJavaSidChecker: Constructor called");
-}
-
-CJavaSidChecker::~CJavaSidChecker()
-{
-    if (NULL != iJavaRegistry)
-    {
-        delete iJavaRegistry;
-        iJavaRegistry = NULL;
-    }
-    LOG(EUtils, EInfo, "CJavaSidChecker: Destructor called");
-}
-
-TBool CJavaSidChecker::AppRegisteredAt(const TUid& aSid, TDriveUnit aDrive)
-{
-    TBool installed = EFalse;
-
-    LOG1(EUtils, EInfo, "CJavaSidChecker: AppRegisteredAt called, %x", aSid.iUid);
-
-    // No Java application can have Uid 0
-    if (aSid.iUid == 0)
-    {
-        return installed;
-    }
-
-    TRAPD(err, installed = AppRegisteredAtL(aSid, aDrive));
-    if (KErrNone != err)
-    {
-        ELOG1(EUtils, "CJavaSidChecker: AppRegisteredAt error %d", err);
-    }
-
-    return installed;
-}
-
-TBool CJavaSidChecker::AppRegisteredAtL(const TUid& aSid, TDriveUnit /*aDrive*/)
-{
-    // Create the Java Registry if it has not been created already
-    if (NULL == iJavaRegistry)
-    {
-        iJavaRegistry = Java::CJavaRegistry::NewL();
-    }
-
-    // JavaRegistry does not return entries that are not present.
-    return iJavaRegistry->RegistryEntryExistsL(aSid);
-}
-
-void CJavaSidChecker::SetRescanCallBackL(const TCallBack &/*aCallBack*/)
-{
-    // Do nothing
-    return;
-}
--- a/javamanager/javaupgradeapp/build/javaupgradeapp.pro	Fri Jun 11 13:33:44 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +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: Helper application for uninstalling a java application and 
-#    then installing new application (java or native)
-#
-# 
-
-TEMPLATE=app
-TARGET=javaupgradeapp
-CONFIG += omj no_icon stl
-CONFIG -= qt
-
-symbian {
-    TARGET.UID2          = 0x2000CFEC
-    TARGET.UID3          = 0x2002FF64
-    TARGET.CAPABILITY = TrustedUI 
-    LIBS +=  -lestor -lapparc -lapgrfx
-}
-
-include(../../../build/omj.pri)
--- a/javamanager/javaupgradeapp/sis/java_upgradeapp.pkg	Fri Jun 11 13:33:44 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +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: Helper application for uninstalling a java application and
-;    then installing new application (any installation package file)
-;
-;Languages
-&EN
-
-
-#{"javaupgradeapp"},(0x2002FF64),1,1,0, TYPE=SA,RU
-
-;Localised Vendor name
-%{"Nokia"}
-
-;Unique Vendor name
-:"Nokia"
-
-;Supports Series 60 v 5.0
-;This line indicates that this installation is for the Series 60 platform v3.0
-;This line must appear _exactly_ as shown below in the sis file
-;If this line is missing or incorrect, the sis file will not be able
-;to be installed on Series 60 v5.0 platforms
-[0x1028315F], 0, 0, 0, {"Series60ProductID"}
-
-;
-"\epoc32\release\armv5\urel\javaupgradeapp.exe"-"c:\sys\bin\javaupgradeapp.exe"
--- a/javamanager/javaupgradeapp/src.s60/javaupgradeapp.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,407 +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:  Helper application for uninstalling a java application and
-*    then installing new application (java or native)
-*
-*/
-
-#include <apgcli.h>
-#include <apacmdln.h>
-#include <apmstd.h>
-#include <bacline.h>
-#include <e32cmn.h>
-#include <s32mem.h>
-#include <unistd.h>
-
-#include "exceptionbase.h"
-#include "javaoslayer.h"
-#include "javaprocessconstants.h"
-#include "javasymbianoslayer.h"
-#include "javauids.h"
-#include "logger.h"
-
-
-using namespace java::util;
-
-
-_LIT(KHexValueStart, "0x");
-_LIT(KSemiColon, ";");
-_LIT(KUidArg, "uid=");
-_LIT(KFileArg, "file=");
-
-const TInt KExtraLenForLogging = 2;
-const TInt KArgumentValueMaxLen = 1568;
-// Wait for 0.5 sec if ArcApp has not yet initialized
-const TInt KDelayWhenWaitingAppArc = 500000;
-
-
-/**
- * Set the value of the argument specified by aArgName to aArgValue
- *
- * @param aCmdLine command line to be parsed
- * @param aArgName the name of the argument
- * @param aArgValue the value parsed from command line will be returned here
- */
-static void getArgValueL(const TPtrC &aCmdLine, const TDesC &aArgName, HBufC **aArgValue)
-{
-    TBuf<KArgumentValueMaxLen> valueBuf;
-    TInt argPos = aCmdLine.FindF(aArgName);
-    if (argPos >= 0)
-    {
-        TInt semicolonPos = aCmdLine.Mid(argPos).Find(KSemiColon);
-        if (KErrNotFound == semicolonPos)
-        {
-            semicolonPos = aCmdLine.Mid(argPos).Length();
-        }
-        TInt argLen = semicolonPos - aArgName.Length();
-        if (argLen >= KArgumentValueMaxLen)
-        {
-            // Protect from buffer overflow.
-            WLOG2(EUtils,
-                  "javaupgradeapp: argument value len too long (%d), cutting it to %d",
-                  argLen, (KArgumentValueMaxLen - 1));
-            argLen = KArgumentValueMaxLen - 1;
-        }
-        else if (argLen == 0)
-        {
-            User::Leave(KErrArgument);
-        }
-
-        valueBuf = aCmdLine.Mid(argPos + aArgName.Length(),  argLen);
-    }
-
-    // Allocate new HBufC and return it
-    HBufC *pBufValue = HBufC::NewL(valueBuf.Length() + 2);
-    *pBufValue = valueBuf;
-    *aArgValue = pBufValue;
-}
-
-
-/**
- * Parse the name from the value of 'file' parameter in
- * command line given in aCmdLine
- *
- * @param aCmdLine  command line to be parsed, the format is
- *  <other_args>;file=YYY;<other_args>
- * @param aFileName will contain the name parsed from command line
- */
-static void getNameFromCommandLineL(const TPtrC &aCmdLine, HBufC **aFileName)
-{
-    TInt err = aCmdLine.FindF(KFileArg);
-    User::LeaveIfError(err);
-
-    getArgValueL(aCmdLine, KFileArg, aFileName);
-}
-
-
-/**
- * Parse the Uid from the value of 'uid' parameter in
- * command line given in aCmdLine
- *
- * @param aCmdLine  command line to be parsed, the format is
- *  uid=YYY;<other_args>
- * @param aUid will contain the Uid parsed from command line
- */
-static void getUidFromCommandLineL(const TPtrC &aCmdLine, TInt32 &aUid)
-{
-    TInt err(KErrNone);
-    TInt argPos = aCmdLine.FindF(KUidArg);
-    if (KErrNotFound != argPos)
-    {
-        TPtrC uidToParse = aCmdLine.Mid(argPos + KUidArg.iTypeLength);
-        TLex parseUid(uidToParse);
-        if (uidToParse.FindF(KHexValueStart) == 0)
-        {
-            parseUid.Inc(2); // skip hex prefix
-            TUint32 tmpValue;
-            err = parseUid.Val(tmpValue, EHex);
-            aUid = tmpValue;
-        }
-        else
-        {
-            err = parseUid.Val(aUid);
-        }
-
-        if (KErrNone != err)
-        {
-            ELOG1(EUtils,
-                  "javaupgradeapp failed parsing app Uid from cmdline uid param. Error %d",
-                  err);
-        }
-    }
-    else
-    {
-        ELOG(EUtils,
-             "javaupgradeapp cannot uninstall app because uid parameter is not given");
-    }
-
-    User::LeaveIfError(err);
-}
-
-
-/**
- * Parse the process command line.
- * Determine the uid of the Java application to be uninstalled and
- * the name of the application package to be installed.
- * Leaves if argument 'file' exist but file name cannot be found,
- * leaves if argument 'uid' exist but uid cannot be parsed from command line,
- * does NOT leave if only one of the arguments is present
- *
- * @param aFileName returns value of argument 'file'
- * @param aUid returns Uid of the Java application to be uninstalled
- */
-void getFileAndUidL(HBufC **aFileName, TInt32 *aUid)
-{
-    HBufC *pBufCmdLine =
-        HBufC::NewLC(User::CommandLineLength() + KExtraLenForLogging);
-    TPtr cmdLineBuf = pBufCmdLine->Des();
-    User::CommandLine(cmdLineBuf);
-
-    if (cmdLineBuf.Length() > 0)
-    {
-        LOG1WSTR(EUtils, EInfo,
-                 "javaupgradeapp: full java application cmd line is : %s",
-                 (wchar_t *)(cmdLineBuf.PtrZ()));
-
-        // Get the midlet uid from the commandline
-        TRAPD(err, getUidFromCommandLineL(cmdLineBuf, *aUid));
-        // It is enough that either midlet uid OR installation package name
-        // have been given in commandline
-        if ((err != KErrNone) && (err != KErrNotFound))
-        {
-            User::Leave(err);
-        }
-
-        // Get the name of the installation package from the commandline
-        TRAPD(err2, getNameFromCommandLineL(cmdLineBuf, aFileName))
-        if (err2 != KErrNone)
-        {
-            if (err2 == KErrNotFound)
-            {
-                if (err == KErrNotFound)
-                {
-                    // Both arguments missing
-                    User::Leave(KErrArgument);
-                }
-            }
-            else
-            {
-                User::Leave(err2);
-            }
-        }
-    }
-    else
-    {
-        ELOG(EUtils, "javaupgradeapp: empty command line");
-        User::Leave(KErrArgument);
-    }
-
-    CleanupStack::PopAndDestroy(pBufCmdLine);
-}
-
-
-/**
- * Uninstall the java application specified by aUid parameter.
- *
- * @param aUid the Uid of the java application to be uninstalled
- */
-void uninstallJavaAppL(TInt32 aUid)
-{
-    RProcess rJavaInstaller;
-    TFileName fileName;
-    // Max one path name and some options -> 1536 is enough
-    TBuf<1536> commandLine;
-
-    // Build command line used to pass all necessary info to Java Installer
-    TInt len = strlen(java::runtime::JAVA_INSTALLER_STARTER_DLL);
-    TPtr8 ptr8InstallerDll((TUint8 *)java::runtime::JAVA_INSTALLER_STARTER_DLL, len, len);
-    commandLine.Copy(ptr8InstallerDll);
-
-    // Use command line options that make sure that uninstallation is done
-    // always, silently and so that the uninstalled java application will
-    // be preinstalled again if the user uninstalls it
-    commandLine.Append(_L(" uninstall -uid="));
-    commandLine.AppendNum(aUid);
-    commandLine.Append(_L(" -forceuninstall -silent -preinstall_always"));
-
-    LOG1WSTR(EUtils, EInfo,
-        "javaupgradeapp:uninstallJavaAppL Java Installer command line is %s",
-        (wchar_t *)(commandLine.PtrZ()));
-
-    // start JavaInstaller
-    TBuf<64> installerProcess;  // Actual len of the process name is 9
-    len = strlen(java::runtime::JAVA_PROCESS);
-    TPtr8 ptr8Process((TUint8 *)java::runtime::JAVA_PROCESS, len, len);
-    installerProcess.Copy(ptr8Process);
-
-    TRequestStatus status;
-    TInt err = rJavaInstaller.Create(installerProcess, commandLine);
-    if (KErrNone == err)
-    {
-        LOG(EUtils, EInfo, "javaupgradeapp:uninstallJavaAppL calling Logon");
-        // Get notification when Java Installer exits (or panics)
-        rJavaInstaller.Logon(status);
-
-        LOG(EUtils, EInfo, "javaupgradeapp:uninstallJavaAppL calling Resume");
-        rJavaInstaller.Resume();
-    }
-    else
-    {
-        ELOG1(EUtils,
-              "javaupgradeapp:uninstallJavaAppL Cannot start Java Installer, error %d",
-              err);
-        User::Leave(err);
-    }
-
-    // now wait until Java Installer exits
-    User::WaitForRequest(status);
-
-    LOG(EUtils, EInfo, "javaupgradeapp:uninstallJavaAppL calling RProcess::Close");
-    // free resources before returning
-    rJavaInstaller.Close();
-}
-
-
-/**
- *
- *
- *
- */
-void installAppPackageL(HBufC *aBufFileName)
-{
-    // Open file using default handler,
-    // if the file is an installation package, it will be installed
-    RApaLsSession apaSession;
-    TInt err = apaSession.Connect();
-    if (KErrNone != err)
-    {
-        ELOG(EUtils,
-             "javaupgradeapp:installAppPackageL: Cannot connect to AppArc server");
-        User::Leave(err);
-    }
-    CleanupClosePushL(apaSession);
-
-    TInt      retryCounter(10);
-    TThreadId handlerTreadId;
-    do
-    {
-        err = apaSession.StartDocument(*aBufFileName, handlerTreadId);
-        if (RApaLsSession::EAppListInvalid == err)
-        {
-            // Application list has not yet been populated,
-            // try again after a short delay
-            retryCounter--;
-            if (retryCounter > 0)
-            {
-                User::After(KDelayWhenWaitingAppArc);
-                continue;
-            }
-            else
-            {
-                ELOG(EUtils,
-                     "javaupgradeapp:installAppPackageL: RApaLsSession "
-                     "StartDocument returned EAppListInvalid for 10 times, exiting");
-                User::Leave(err);
-            }
-        }
-        else if (KErrNone != err)
-        {
-            ELOG1(EUtils,
-                "javaupgradeapp:installAppPackageL: RApaLsSession "
-                     "StartDocument returned error %d", err);
-            User::Leave(err);
-        }
-
-    } while (RApaLsSession::EAppListInvalid == err);
-
-    CleanupStack::PopAndDestroy(); // apaSession
-}
-
-
-/**
- * Get the uid of the Java application to be uninstaller and
- * start Java Installer to uninstall the application.
- * Then install the new application package given in cmdline
- *
- */
-void handleUpgradeL(void)
-{
-    HBufC *pBufFileName = NULL;
-    TInt32 uid(0);
-
-    getFileAndUidL(&pBufFileName, &uid);
-
-    if (uid != 0)
-    {
-        LOG1(
-            EUtils,
-            EInfo,
-            "javaupgradeapp uninstalling app uid %d", uid);
-        uninstallJavaAppL(uid);
-    }
-
-    if (pBufFileName != NULL)
-    {
-        LOG1WSTR(EUtils, EInfo,
-            "javaupgradeapp: installing new app package %s",
-            (wchar_t *)(pBufFileName->Des().PtrZ()));
-        installAppPackageL(pBufFileName);
-
-        delete pBufFileName;
-    }
-}
-
-
-/**
- * Main function of executable javaupgradeapp.exe.
- * "installer app" created by Services team starts this executable when
- * the "installer app" must be replaced with the real application (java/native or wrt)
- *
- * The command line format is
- * uid=<Uid>;file=<full_path_to_installation_file>
- * for example
- * uid=0x10137c4d;file=D:\\temp\\upgrade\\package.sis
- *
- * Sample code for starting this application from the "installer app" MIDlet
- * @code
-
-    MIDlet.platformRequest(
-        “nativeapp://application-exe=javaupgradeapp.exe;application-args=uid=0x10137c4d;file=D:\\temp\\upgrade\\package.sis”);
-
- * @endcode
- *
- */
-TInt E32Main(void)
-{
-    // TODO: check that only MIDP runtime process can start this in final version
-    // that goes to ROM
-
-
-    CTrapCleanup *pCleanupStack = CTrapCleanup::New();
-    if (NULL == pCleanupStack)
-    {
-        ELOG(EUtils, "Cannot create CleanupStack in javaupgradeapp.exe main()");
-        return KErrNoMemory;
-    }
-
-    TRAPD(err, handleUpgradeL());
-    if (KErrNone != err)
-    {
-        ELOG1(EUtils, "javaupgradeapp.exe: handleUpgradeL leaved with err %d", err);
-    }
-
-    delete pCleanupStack;
-    return err;
-}
-
--- a/javamanager/subsystem.mk	Fri Jun 11 13:33:44 2010 +0300
+++ b/javamanager/subsystem.mk	Wed Jun 23 18:07:10 2010 +0300
@@ -29,7 +29,6 @@
 	javalauncher/build
 
 NONQTSUBSYSTEMS = \
-	javasidchecker/build \
 	javarecognizer/build \
 	javaappschemeplugin/build
 
@@ -37,12 +36,19 @@
 	javaregistry \
 	javalauncher/build \
 	javabackup \
-	javasidchecker/build \
 	javarecognizer/build \
 	preinstaller/build \
 	debugapi/build \
 	javaappschemeplugin/build
 
+ifndef RD_JAVA_S60_RELEASE_10_1_ONWARDS    
+NONQTSUBSYSTEMS += javasidchecker/build
+SYMBIAN_ONLY += javasidchecker/build
 javasidchecker/build : javaregistry
+endif
+
+# Declare that release preparation removes subdirectories not in build, except
+# listed special cases
+REMOVE_NOTBUILT_EXCLUDING = inc
 
 include ${JAVA_SRC_ROOT}/build/Makefile.subsystem
--- a/javaruntimes/javaruntimes.pro	Fri Jun 11 13:33:44 2010 +0300
+++ b/javaruntimes/javaruntimes.pro	Wed Jun 23 18:07:10 2010 +0300
@@ -19,6 +19,6 @@
 SUBDIRS += installer/starterdll/build/javainstallerstarter.pro 
 SUBDIRS += installer/starterexe/build/javainstaller.pro 
 SUBDIRS += jvmargmodifier/file/build/javajvmargsmodifierfile.pro 
-SUBDIRS += starter/build/java.pro 
+SUBDIRS += starter/build/javamidp.pro 
 SUBDIRS += midp 
 BLD_INF_RULES.prj_extensions += "prj_extensions" 
--- a/javaruntimes/midp/runtime/build/javamidpruntime.pro	Fri Jun 11 13:33:44 2010 +0300
+++ b/javaruntimes/midp/runtime/build/javamidpruntime.pro	Wed Jun 23 18:07:10 2010 +0300
@@ -23,7 +23,7 @@
         
 
 symbian {
-    INCLUDEPATH += /epoc32/include/ecom
+    INCLUDEPATH += /epoc32/include/ecom     # Due to schemehandler.inl in S60 5.0 2009w18 and SPB 10.1
     LIBS += -lecom -lflogger -lDrmRightsInfo -lcaf -lDrmHelper -lapgrfx -lapparc -ljavautils
 }
 
--- a/javaruntimes/midp/runtime/javasrc/com/nokia/mj/impl/rt/midp/Main.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javaruntimes/midp/runtime/javasrc/com/nokia/mj/impl/rt/midp/Main.java	Wed Jun 23 18:07:10 2010 +0300
@@ -38,12 +38,14 @@
     {
         // Do the start up trace.
         StartUpTrace.doTrace("Midp runtime ready");
-        if (Log.mOn) Log.logI("Starting MIDP runtime");
-
-        System.out.println("java.version: " +
-                           System.getProperty("java.version"));
-        System.out.println("java.fullversion: " +
-                           System.getProperty("java.fullversion"));
+        if (Log.mOn) 
+        {
+            Log.logI("Starting MIDP runtime");
+ 	          Log.logI("java.version: " +
+                     System.getProperty("java.version"));
+            Log.logI("java.fullversion: " +
+                     System.getProperty("java.fullversion"));
+        }
         boolean ok = true;
 
         try
--- a/javaruntimes/midp/runtime/javasrc/com/nokia/mj/impl/rt/midp/MidletLifeCycle.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javaruntimes/midp/runtime/javasrc/com/nokia/mj/impl/rt/midp/MidletLifeCycle.java	Wed Jun 23 18:07:10 2010 +0300
@@ -27,6 +27,8 @@
 
 import java.security.AccessControlException;
 
+import com.nokia.mj.impl.gcf.PushSecurityUtils;
+
 import com.nokia.mj.impl.rt.utils.ExtensionUtil;
 import com.nokia.mj.impl.rt.utils.CmdLineArgsPermission;
 
@@ -992,16 +994,35 @@
             DrmUtil.consumeRightsStart();
         }
 
-        // If the MIDlet launch is a result of auto invocation we need to
+        // If the MIDlet launch is a result of push auto invocation we need to
         // ensure that user allows the start up.
-        if ((mMainArgs.findArgument("-autoinvocation") != null) ||
-                mAutoinvocationFromUrl)
+        if (mMainArgs.findArgument("-autoinvocation") != null)
         {
-            if (Log.mOn) Log.logI("Ensuring autoinvocation.");
+            if (Log.mOn) Log.logI("Ensuring push autoinvocation.");
             String pushAdditionalInfo =
                 mMainArgs.findArgument("-autoInvocationAdditional");
             if (Log.mOn) Log.logI("  addInfo: '" + pushAdditionalInfo + "'");
 
+            try
+            {
+                PushSecurityUtils.ensurePermission("autoinvocation",
+                                                   pushAdditionalInfo);
+            }catch(SecurityException e)
+            {
+                // The user didn't allow starting. Throw StartupException and
+                // mark it as non fatal.
+                if (Log.mOn) Log.logI("Push autoinvocation NOT allowed.");                
+                throw new StartupException(e.toString(),
+                                           false);
+            }
+        }
+        
+        // If the MIDlet launch is triggered from url we need to
+        // ensure that user allows the start up.
+        if (mAutoinvocationFromUrl)
+        {
+            if (Log.mOn) Log.logI("Ensuring web start invocation.");
+
             // ensure security
             try
             {
@@ -1009,10 +1030,10 @@
                 CmdLineArgsPermission cmdLineArgsPermission = 
                     new CmdLineArgsPermission();
                 appUtils.checkPermission(cmdLineArgsPermission);
-                if (Log.mOn) Log.logI("Autoinvocation allowed.");
+                if (Log.mOn) Log.logI("Web start invocation allowed.");
             }catch(AccessControlException e)
             {
-                if (Log.mOn) Log.logI("Autoinvocation NOT allowed.");                
+                if (Log.mOn) Log.logI("Web start invocation NOT allowed.");                
                 throw new StartupException(e.toString(),
                                            false);
             }
--- a/javaruntimes/starter/build/java.pro	Fri Jun 11 13:33:44 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +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: 
-#
-
-TEMPLATE=app
-TARGET=javamidp
-CONFIG += omj no_icon stl
-CONFIG -= qt
-
-include(../../../inc/build_defines.pri)
-
-symbian {
-
-contains(PROJECT_DEFINES,RD_JAVA_UI_QT) {
-    TARGET.EPOCSTACKSIZE = 81920
-}
-
-!contains(PROJECT_DEFINES,RD_JAVA_UI_QT) {
-    TARGET.EPOCSTACKSIZE = 16384
-}
-
-    TARGET.EPOCHEAPSIZE = 0x00001000 0x02000000
-
-    TARGET.UID2 = 0x102033E6
-    TARGET.UID3 = 0x102033E6
-
-    TARGET.SID = 0x102033E6
-    TARGET.VID = 0x101FB657
-
-    TARGET.CAPABILITY = \
-        LocalServices NetworkServices ProtServ WriteDeviceData \
-        ReadDeviceData ReadUserData WriteUserData UserEnvironment  \
-        SwEvent Location MultiMediaDD NetworkControl TrustedUI
-}
-
-include(../../../build/omj.pri)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javaruntimes/starter/build/javamidp.pro	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,48 @@
+#
+# 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: 
+#
+
+TEMPLATE=app
+TARGET=javamidp
+CONFIG += omj no_icon stl
+CONFIG -= qt
+
+include(../../../inc/build_defines.pri)
+
+symbian {
+
+contains(PROJECT_DEFINES,RD_JAVA_UI_QT) {
+    TARGET.EPOCSTACKSIZE = 81920
+}
+
+!contains(PROJECT_DEFINES,RD_JAVA_UI_QT) {
+    TARGET.EPOCSTACKSIZE = 16384
+}
+
+    TARGET.EPOCHEAPSIZE = 0x00001000 0x02000000
+
+    TARGET.UID2 = 0x102033E6
+    TARGET.UID3 = 0x102033E6
+
+    TARGET.SID = 0x102033E6
+    TARGET.VID = 0x101FB657
+
+    TARGET.CAPABILITY = \
+        LocalServices NetworkServices ProtServ WriteDeviceData \
+        ReadDeviceData ReadUserData WriteUserData UserEnvironment  \
+        SwEvent Location MultiMediaDD NetworkControl TrustedUI
+}
+
+include(../../../build/omj.pri)
Binary file javatools/javasecuritycustomization/policyeditor/bin/securitypolicyeditor.jar has changed
--- a/javatools/javasecuritycustomization/policyeditor/javasrc/com/nokia/mj/tools/security/midp/PolicyEditor.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javatools/javasecuritycustomization/policyeditor/javasrc/com/nokia/mj/tools/security/midp/PolicyEditor.java	Wed Jun 23 18:07:10 2010 +0300
@@ -18,6 +18,7 @@
 package com.nokia.mj.tools.security.midp;
 
 import java.util.Vector;
+import java.util.Hashtable;
 import java.io.IOException;
 import java.io.FileInputStream;
 import java.util.StringTokenizer;
@@ -46,7 +47,7 @@
  * domain: 'domain' Identifier ';' grant+;
  * grant: 'grant' (grant_user | grant_allowed | grant_assigned);
  * grant_allowed: 'allowed' permissions;
- * grant_assigned: 'assigned' permissions;
+ * grant_assigned: 'assigned' grant_name? (initial_mode other_modes permissions)? permissions;
  * grant_user: 'user' grant_name initial_mode other_modes permissions;
  * grant_name: '"' Identifier '"';
  * permissions: '{' permission+ '}';
@@ -70,6 +71,7 @@
     private SecurityPolicy securityPolicy;
     private static String destPath;
     private static final String POLICY_FILE_EXTENSION = ".txt";
+    private Hashtable allSettings = new Hashtable();
 
     public static void main(String[] args)
     {
@@ -159,14 +161,17 @@
         }
         domain = extractToken(';');
         Vector perms = new Vector();
+        Vector unconfirmedPerms = new Vector();
         find("grant");
         while (offset < policy.length)
         {
             SecurityPolicyPermissionSettings settings = null;
+            SecurityPolicyPermissionSettings unconfirmedSettings = null;
             int type = getType(extractToken());
+            String settingsName = null;
             if (type == PolicyBasedPermission.USER_TYPE)
             {
-                String settingsName = extractToken('"', '"');
+                settingsName = extractToken('"', '"');
                 check(settingsName, "User grant group without name");
                 // trim off the leading and trailing double-quotes
                 if (settingsName.startsWith("\""))
@@ -192,6 +197,44 @@
                                                     interactionModes);
                 settings = new SecurityPolicyPermissionSettings(settingsName,
                         currentInteractionMode, allowedInteractionModes);
+                allSettings.put(settingsName, settings);
+            }
+            else if (type == PolicyBasedPermission.ASSIGNED_TYPE)
+            {
+                settingsName = extractToken('"', '"');
+                if (settingsName != null 
+                    && settingsName.length() > 0 
+                    && settingsName.indexOf("{") == -1)
+                {
+                    type = PolicyBasedPermission.USER_ASSIGNED_TYPE;
+                    settings = (SecurityPolicyPermissionSettings)allSettings.get(
+                        settingsName);
+                    if (settings == null)
+                    {
+                        // parse the rest of the settings and store it as 
+                        // unconfirmed settings: after all the parsing is 
+                        // done go through the unconfirmed settings and 
+                        // replace them with settings from user permissions
+                        // (if found) or use the unconfirmed settings if no
+                        // other user settings were found
+                        String strInteractionModes = extractToken('{');
+                        String[] interactionModes = split(strInteractionModes,",");
+                        if (interactionModes != null && interactionModes.length > 0)
+                        {
+                            int currentInteractionMode = getInteractionMode(
+                                                         interactionModes[0]);
+                            int[] allowedInteractionModes = getInteractionModes(
+                                                            interactionModes);
+                            unconfirmedSettings = new SecurityPolicyPermissionSettings(
+                                settingsName, currentInteractionMode, allowedInteractionModes);
+                        }
+                        else
+                        {
+                            unconfirmedSettings = new SecurityPolicyPermissionSettings(
+                                settingsName);
+                        }
+                    }
+                }
             }
             find("permission");
             while (offset < policy.length && policy[offset] != '}')
@@ -246,28 +289,75 @@
                 // return multiple permissions with simple actions. This step is
                 // to be removed when APIs support composite actions
                 String[] actions = split(pActionList,",");
+                if (unconfirmedSettings != null 
+                    && unconfirmedSettings.getCurrentInteractionMode() 
+                    == UserSecuritySettings.UNDEFINED_INTERACTION_MODE)
+                {
+                    // discard the settings since they are not vald
+                    unconfirmedSettings = null;
+                }
                 if (actions != null)
                 {
                     for (int i=0; i<actions.length; i++)
                     {
-                        perms.add(getPermission(pName,
-                                                pTarget, actions[i], type, settings));
+                        if (unconfirmedSettings == null)
+                        {
+                            perms.add(getSecurityPolicyPermission(
+                                pName, pTarget, actions[i], type, settings));
+                        }
+                        else
+                        {
+                            unconfirmedPerms.add(getSecurityPolicyPermission(
+                                pName, pTarget, actions[i], type, unconfirmedSettings));
+                        }
                     }
                 }
                 else
                 {
-                    perms.add(getPermission(pName,
-                                            pTarget, pActionList, type, settings));
+                    if (unconfirmedSettings == null)
+                    {
+                        perms.add(getSecurityPolicyPermission(
+                            pName, pTarget, pActionList, type, settings));
+                    }
+                    else
+                    {
+                        unconfirmedPerms.add(getSecurityPolicyPermission(
+                            pName, pTarget, pActionList, type, unconfirmedSettings));
+                    }
                 }
                 find("permission");
             }
             find("grant", true);
         }
-        if (perms.size() == 0)
+        if (perms.size() == 0 && unconfirmedPerms.size() == 0)
         {
             throw new IllegalArgumentException(
                 "Invalid security policy - missing/invalid permissions information");
         }
+        // confirm the unconfirmed permissions: look for settings in the perms -> 
+        // if found then use those settings, otherwise use the unconfirmed settings
+        for(int i=0; i<unconfirmedPerms.size(); i++)
+        {
+            SecurityPolicyPermission unconfirmedPerm = 
+                (SecurityPolicyPermission) unconfirmedPerms
+                .elementAt(i);
+            SecurityPolicyPermissionSettings confirmedSettings = 
+                (SecurityPolicyPermissionSettings)allSettings
+                .get(unconfirmedPerm.getUserSecuritySettings().getName());
+            if (confirmedSettings != null)
+            {
+                perms.add(getSecurityPolicyPermission(
+                    unconfirmedPerm.getName(), 
+                    unconfirmedPerm.getTarget(), 
+                    unconfirmedPerm.getActionList(), 
+                    unconfirmedPerm.getType(), 
+                    confirmedSettings));
+            }
+            else
+            {
+                perms.add(unconfirmedPerm); 
+            }
+        }
         SecurityPolicyPermission[] permissions
         = new SecurityPolicyPermission[perms.size()];
         perms.copyInto(permissions);
@@ -463,22 +553,18 @@
         tokens.copyInto(strTokens);
         return strTokens;
     }
-
-    private SecurityPolicyPermission getPermission(String pName,
-            String pTarget,
-            String pAction,
-            int pType,
-            SecurityPolicyPermissionSettings pSettings)
+    
+    private SecurityPolicyPermission getSecurityPolicyPermission(
+        String name,
+        String target,
+        String actionList,
+        int type,
+        SecurityPolicyPermissionSettings settings)
     {
-        if (pSettings == null)
+        if (settings == null && type == PolicyBasedPermission.USER_ASSIGNED_TYPE)
         {
-            return new SecurityPolicyPermission(
-                       pName, pTarget, pAction, pType);
+            return new SecurityPolicyPermission(name, target, actionList, PolicyBasedPermission.ASSIGNED_TYPE);
         }
-        else
-        {
-            return new SecurityPolicyPermission(
-                       pName, pTarget, pAction, pSettings);
-        }
+        return new SecurityPolicyPermission(name, target, actionList, type, settings);
     }
 }
--- a/javatools/tckrunner/runner/src/tckrunnernative.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javatools/tckrunner/runner/src/tckrunnernative.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -58,12 +58,13 @@
 {
     int rc = 0;
 
-    const char* av[MAX_PARAMS + 5];
+    const char* av[MAX_PARAMS + 6];
     int index = 0;
     av[index++] = java::runtime::JAVA_PROCESS;
     av[index++] = java::runtime::JAVA_INSTALLER_STARTER_DLL;
     av[index++] = "poll";
     av[index++] = "-address=tck";
+    av[index++] = "-drive=C";
 
     int args = aEnv->GetArrayLength(aArgs);
     char** installerArgs = new char*[args];
--- a/javauis/eswt_qt/build/eswtqtwebkit/build.xml	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/eswt_qt/build/eswtqtwebkit/build.xml	Wed Jun 23 18:07:10 2010 +0300
@@ -26,7 +26,7 @@
 
     <target name="init.component.properties">
         <property name="java.src.paths" value="../../org.eclipse.swt/Eclipse_SWT_PI/webkit"/>
-        <property name="javah.classnames" value="org.eclipse.swt.internal.qt.webkit.OS_webkit"/>
+        <property name="javah.classnames" value="org.eclipse.swt.internal.qt.webkit.WebkitOS"/>
         <echo message="java.src.paths = ${java.src.paths}"/>
         <echo message="javah.classnames = ${javah.classnames}"/>
     </target>
--- a/javauis/eswt_qt/eswtuitestutils/javasrc/com/nokia/mj/impl/uitestutils/S60Utils.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/eswt_qt/eswtuitestutils/javasrc/com/nokia/mj/impl/uitestutils/S60Utils.java	Wed Jun 23 18:07:10 2010 +0300
@@ -6,7 +6,7 @@
 	static {
 		// Should use vmport, this is CDC/J2SE API
 		//System.loadLibrary("s60uitestutils");
-		org.eclipse.swt.internal.Library.loadLibrary("s60uitestutils");
+		org.eclipse.swt.internal.Library.loadLibrary("eswtuitestutils");
 	}
 
     /**
--- a/javauis/eswt_qt/org.eclipse.swt.qt.linux.x86.me/build.xml	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt.qt.linux.x86.me/build.xml	Wed Jun 23 18:07:10 2010 +0300
@@ -263,7 +263,7 @@
 
     <target name="build.lib.common.webkit" depends="init" description="params: config">
         <javah destdir="${lib.path}/${generated.native.dir.webkit}/" classpath="${plugin.dir}/bin" verbose="yes">
-            <class name="org.eclipse.swt.internal.qt.webkit.OS_webkit"/>
+            <class name="org.eclipse.swt.internal.qt.webkit.WebkitOS"/>
         </javah>
         <antcall target="qmake">
             <param name="qmake.dir" value="${lib.path}/webkit"/>
--- a/javauis/eswt_qt/org.eclipse.swt.qt.linux.x86.se/build.xml	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt.qt.linux.x86.se/build.xml	Wed Jun 23 18:07:10 2010 +0300
@@ -244,7 +244,7 @@
 
     <target name="build.lib.common.webkit" depends="init" description="params: config">
         <javah destdir="${lib.path}/${generated.native.dir.webkit}/" classpath="${plugin.dir}/bin" verbose="yes">
-            <class name="org.eclipse.swt.internal.qt.webkit.OS_webkit"/>
+            <class name="org.eclipse.swt.internal.qt.webkit.WebkitOS"/>
         </javah>
         <antcall target="qmake">
             <param name="qmake.dir" value="${lib.path}/webkit"/>
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT Browser/qt/org/eclipse/swt/browser/QtWebKit.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT Browser/qt/org/eclipse/swt/browser/QtWebKit.java	Wed Jun 23 18:07:10 2010 +0300
@@ -12,7 +12,7 @@
 
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.internal.qt.OS;
-import org.eclipse.swt.internal.qt.webkit.OS_webkit;
+import org.eclipse.swt.internal.qt.webkit.WebkitOS;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Event;
@@ -39,7 +39,7 @@
     // At this point, browser.handle is the view port of QScrollArea, set by Composite
     int scrollAreaHandle = Internal_PackageSupport.topHandle(browser);
     int viewPortHandle = Internal_PackageSupport.handle(browser);
-    webViewHandle = OS_webkit.QWebView_new();
+    webViewHandle = WebkitOS.QWebView_new();
     OS.QWidget_setParent(webViewHandle, scrollAreaHandle);
     
     int layout = OS.QVBoxLayout_new(0);
@@ -111,10 +111,10 @@
  * @see WebBrowser
  */
 public boolean back() {
-    if (OS_webkit.QWebView_swt_canGoBack(webViewHandle)) {
+    if (WebkitOS.QWebView_swt_canGoBack(webViewHandle)) {
         if (sendLocationEventChanging((int)System.currentTimeMillis(), 
-            OS_webkit.QWebView_swt_backUrl(webViewHandle))) {
-            OS_webkit.QWebView_back(webViewHandle);
+            WebkitOS.QWebView_swt_backUrl(webViewHandle))) {
+            WebkitOS.QWebView_back(webViewHandle);
             return true;
         }
     }
@@ -125,17 +125,17 @@
  * @see WebBrowser
  */
 public boolean execute(String script) {
-    return OS_webkit.QWebView_swt_evaluateJavaScript(webViewHandle, script);
+    return WebkitOS.QWebView_swt_evaluateJavaScript(webViewHandle, script);
 }
 
 /**
  * @see WebBrowser
  */
 public boolean forward() {
-    if (OS_webkit.QWebView_swt_canGoForward(webViewHandle)) {
+    if (WebkitOS.QWebView_swt_canGoForward(webViewHandle)) {
         if (sendLocationEventChanging((int)System.currentTimeMillis(), 
-            OS_webkit.QWebView_swt_forwardUrl(webViewHandle))) {
-            OS_webkit.QWebView_forward(webViewHandle);
+            WebkitOS.QWebView_swt_forwardUrl(webViewHandle))) {
+            WebkitOS.QWebView_forward(webViewHandle);
             return true;
         }
     }
@@ -160,21 +160,21 @@
  * @see WebBrowser
  */
 public String getUrl() {
-    return OS_webkit.QWebView_url(webViewHandle);
+    return WebkitOS.QWebView_url(webViewHandle);
 }
 
 /**
  * @see WebBrowser
  */
 public boolean isBackEnabled() {
-    return OS_webkit.QWebView_swt_canGoBack(webViewHandle);
+    return WebkitOS.QWebView_swt_canGoBack(webViewHandle);
 }
 
 /**
  * @see WebBrowser
  */
 public boolean isForwardEnabled() {
-    return OS_webkit.QWebView_swt_canGoForward(webViewHandle);
+    return WebkitOS.QWebView_swt_canGoForward(webViewHandle);
 }
 
 /**
@@ -182,8 +182,8 @@
  */
 public void refresh() {
     if (sendLocationEventChanging((int)System.currentTimeMillis(), 
-        OS_webkit.QWebView_url(webViewHandle))) {
-        OS_webkit.QWebView_reload(webViewHandle);
+        WebkitOS.QWebView_url(webViewHandle))) {
+        WebkitOS.QWebView_reload(webViewHandle);
     }
 }
 
@@ -192,7 +192,7 @@
  */
 public boolean setText(String html) {
     if (sendLocationEventChanging((int)System.currentTimeMillis(), "about:blank")) {
-        OS_webkit.QWebView_setHtml(webViewHandle, html);
+        WebkitOS.QWebView_setHtml(webViewHandle, html);
         return true;
     }
     else {
@@ -205,7 +205,7 @@
  */
 public boolean setUrl(String url) {
     if (sendLocationEventChanging((int)System.currentTimeMillis(), url)) {
-        OS_webkit.QWebView_setUrl(webViewHandle, url);
+        WebkitOS.QWebView_setUrl(webViewHandle, url);
         return true;
     }
     else {
@@ -217,7 +217,7 @@
  * @see WebBrowser
  */
 public void stop() {
-    OS_webkit.QWebView_stop(webViewHandle);
+    WebkitOS.QWebView_stop(webViewHandle);
 }
 
 final boolean eventProcess( int widgetHandle, int eventType, int time, 
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/ercp/swt/mobile/MobileDevice.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/ercp/swt/mobile/MobileDevice.java	Wed Jun 23 18:07:10 2010 +0300
@@ -44,521 +44,524 @@
  */
 public class MobileDevice {
 
-    private static int 		handleMobileDevice;
-    private Vector		mobileDeviceListeners;
-    private Screen[]	screens;
-    private Input[]		inputs;
-    private int			alertLevel;
-    private boolean		isOpen;
-    private static int desktopWidgetHandle;
+    private static int  handleMobileDevice;
+    private Vector      mobileDeviceListeners;
+    private Screen[]    screens;
+    private Input[]     inputs;
+    private int         alertLevel;
+    private boolean     isOpen;
+    private static int  desktopWidgetHandle;
     static MobileDevice currentMobileDevice;
-    private int activeScreenId;
+    private int         activeScreenId;
     
     
 
     
     /** 
      * feature which is permanently attached to the mobile device and always available
-     */	
+     */    
     public static final int LOCAL = 0;
 
-	/**
-	 * local feature which is only available when mobile device is opened
-	 */
-	public static final int INTERNAL = 1;
+    /**
+     * local feature which is only available when mobile device is opened
+     */
+    public static final int INTERNAL = 1;
 
-	/**
-	 * local feature which is only available when mobile device is closed
-	 */
-	public static final int EXTERNAL = 2;
-	
-	/**
-	 * feature which is not part of the mobile device unless connected via wire or wireless signal
-	 */
-	public static final int REMOTE = 3;
-	
-	/**
-	 * alert level indicating simple notification (ex. e-mail arrival)
-	 */
-	public static final int ALERT_LOW_IMPORTANCE = 1;
-	
-	/**
-	 * alert level indicating user attention desired (ex. instant message arrival)
-	 */
-	public static final int ALERT_HIGH_IMPORTANCE = 2;
-	
-	/**
-	 * alert level indicating immediate attention is required (ex. battery level at 1%)
-	 */
-	public static final int ALERT_CRITICAL = 3;
+    /**
+     * local feature which is only available when mobile device is closed
+     */
+    public static final int EXTERNAL = 2;
+    
+    /**
+     * feature which is not part of the mobile device unless connected via wire or wireless signal
+     */
+    public static final int REMOTE = 3;
+    
+    /**
+     * alert level indicating simple notification (ex. e-mail arrival)
+     */
+    public static final int ALERT_LOW_IMPORTANCE = 1;
+    
+    /**
+     * alert level indicating user attention desired (ex. instant message arrival)
+     */
+    public static final int ALERT_HIGH_IMPORTANCE = 2;
+    
+    /**
+     * alert level indicating immediate attention is required (ex. battery level at 1%)
+     */
+    public static final int ALERT_CRITICAL = 3;
    /**
     * virtual keyboard status indicating normal show and hide operation
     */
-	public static final int VK_NORMAL = 1;
+    public static final int VK_NORMAL = 1;
 
-	/**
-	 * virtual keyboard status indicating keyboard is always visible
-	 */
-	public static final int VK_ALWAYS_ON = 2;
+    /**
+     * virtual keyboard status indicating keyboard is always visible
+     */
+    public static final int VK_ALWAYS_ON = 2;
 
-	/**
-	 * virtual keyboard status indicating keyboard is always hidden
-	 */
-	public static final int VK_ALWAYS_OFF = 3;	  
-	
-	/**
-	 * Constructs a new instance of this class. Non-public to prevent
-	 * instantiation outside this package.
-	 * 
-	 */
-	MobileDevice () {
-	   
-	    (getDisplay()).syncExec(new Runnable() {
-			public void run() {
-				handleMobileDevice = Internal_PackageSupport.initializeMobileDevice(
-						Internal_PackageSupport.getDisplayInstance());
-				OS.MobileDevice_createFlipWatch(handleMobileDevice);
-			}
-		}); 
-	    mobileDeviceListeners = new Vector();
-	    isOpen = true;
-	}
-	
-	private static Display getDisplay(){
-		Display display = Internal_PackageSupport.getDisplayInstance();
-		
-		// Following if-statement (getting default display) should be removed
-		// if agreed that MobileDevice shouldn't create the display.
-		if(display==null){
-			display = Display.getDefault();
-		}
-		
-		if(display == null || display.isDisposed()){
-	    	SWT.error(SWT.ERROR_DEVICE_DISPOSED);
-	    }
-		return display;
-	}
-	
-	private void sendMobileDeviceChangedEvent(int eventType) {
-		// MobileDevice changed event for open and closed
-		int count = mobileDeviceListeners.size();
-		for (int i = 0; i <count; ++i) {
-			MobileDeviceEvent event = new MobileDeviceEvent(this);
-			event.type = eventType;
-			MobileDeviceListener listener = (MobileDeviceListener) mobileDeviceListeners.elementAt(i);
-			listener.deviceChanged(event);
-		}
-	}
-	
-	void qt_swt_event_mobiledevice_changed(boolean aStatus) {
-		// update MobileDevice status to opened/closed
-		isOpen = aStatus;
-		
-		if(isOpen){
-			sendMobileDeviceChangedEvent(MobileDeviceEvent.OPENED);
-		}else{
-			sendMobileDeviceChangedEvent(MobileDeviceEvent.CLOSED);
-		}
-	}
-	
-	void qt_swt_event_mobiledevice_screen_activate(boolean aStatus) {
-		
-		if(screens.length > 0 && activeScreenId<screens.length){
-			if(aStatus){
-				// update the active screen
-				activeScreenId = OS.getScreenDeviceNumber();
-				//forward to screen activated event to new active screen
-				screens[activeScreenId].internal_sendScreenEventActivated();
-			}else {
-				//forward to screen deactivated event to old active screen
-				screens[activeScreenId].internal_sendScreenEventDeactivated();
-			}
-		}
-	}
-	
-	void qt_swt_event_mobiledevice_orientationchanged() {
-		activeScreenId = OS.getScreenDeviceNumber();
-		if(activeScreenId<screens.length){
-			// forward to orientation change event to active screen
-			screens[activeScreenId].internal_sendOrientationScreenChanged();
-		}
-	}
-	
-	private void sendMobileDeviceScreenChangedEvent(int eventType, Screen screen) {
-		int count = mobileDeviceListeners.size();
-		for (int i = 0; i <count; ++i) {
-			MobileDeviceEvent event = new MobileDeviceEvent(this);
-			event.type = eventType;
-			event.data = screen;
-			event.feature = screen;
-			MobileDeviceListener listener = (MobileDeviceListener) mobileDeviceListeners.elementAt(i);
-			listener.screenChanged(event);
-		}
-	}
-	
-	void qt_signal_screen_changed(int aCount) {
-		int type = 0;
-		Screen screen = null;
-		Screen []newScreens = new Screen[aCount];
-		
-		// if getScreen is not called and if still want 
-		// screen changed event in the MobileDevice
-		if(screens.length==0){
-			getScreens();
-		}
-		
-		if(screens.length > aCount){
-			// screen removed
-			int screenHandle = 0;
-			for(int j=0; j<screens.length; j++) {
-				// found removed screen
-				boolean found = false;
-				for(int i=0; i<aCount; i++) {     
-					screenHandle = OS.QDesktopWidget_screen(desktopWidgetHandle, i);
-					if(screens[j].screenHandle== screenHandle){
-						newScreens[i] = screens[j];
-						newScreens[i].id = i;
-						found = true;
-						break;
-		        	 }
-				}
-		        if(!found){
-		        	screen = screens[j];
-		        	screens[j].internal_dispose();
-		        } 
-		    }
-			screens = new Screen[aCount];
-			// remove detached screen from 'screens'
-			System.arraycopy(newScreens, 0, screens, 0, aCount);
-			type = MobileDeviceEvent.REMOVED;
-		} else if( screens.length < aCount){
-			// screen attached
-			for(int i=0; i<aCount; i++) {   
-				// found added screen
-				int screenHandle = OS.QDesktopWidget_screen(desktopWidgetHandle, i);
-				boolean found=false;
-				for(int j=0; j<screens.length; j++) {
-					if(screens[j].screenHandle== screenHandle){
-						newScreens[i] = screens[j];
-						newScreens[i].id = i;
-						found = true;
-						break;
-					}
-				}
-				if(!found){
-					screen = screens[i];
-					newScreens[i] = new Screen(i, desktopWidgetHandle);
-				} 
-			}
-			screens = new Screen[aCount];
-			// add attached screen to 'screens'
-			System.arraycopy(newScreens, 0, screens, 0, aCount);
-			type = MobileDeviceEvent.ADDED;
-		}
-		sendMobileDeviceScreenChangedEvent(type, screen);
-		activeScreenId = OS.getScreenDeviceNumber();
-	}
-	
-	private static void hookEvents() {
-	    int screenSignalProxy = OS.SignalHandler_new(desktopWidgetHandle, OS.QSIGNAL_QDESKTOPWIDGET_SCREENCOUNTCHANGED);
-	    OS.QObject_connectOrThrow(desktopWidgetHandle, "screenCountChanged(int)", screenSignalProxy,
-	            "widgetSignal(int)", OS.QT_AUTOCONNECTION);
-	}
+    /**
+     * virtual keyboard status indicating keyboard is always hidden
+     */
+    public static final int VK_ALWAYS_OFF = 3;      
+    
+    /**
+     * Constructs a new instance of this class. Non-public to prevent
+     * instantiation outside this package.
+     * 
+     */
+    MobileDevice () {
+       
+        (getDisplay()).syncExec(new Runnable() {
+            public void run() {
+                handleMobileDevice = Internal_PackageSupport.initializeMobileDevice(
+                        Internal_PackageSupport.getDisplayInstance());
+                if (handleMobileDevice == 0) {
+                    SWT.error(SWT.ERROR_NO_HANDLES);
+                }
+                OS.MobileDevice_createFlipWatch(handleMobileDevice);
+            }
+        }); 
+        mobileDeviceListeners = new Vector();
+        isOpen = true;
+    }
+    
+    private static Display getDisplay(){
+        Display display = Internal_PackageSupport.getDisplayInstance();
+        
+        // Following if-statement (getting default display) should be removed
+        // if agreed that MobileDevice shouldn't create the display.
+        if(display==null){
+            display = Display.getDefault();
+        }
+        
+        if(display == null || display.isDisposed()){
+            SWT.error(SWT.ERROR_DEVICE_DISPOSED);
+        }
+        return display;
+    }
+    
+    private void sendMobileDeviceChangedEvent(int eventType) {
+        // MobileDevice changed event for open and closed
+        int count = mobileDeviceListeners.size();
+        for (int i = 0; i <count; ++i) {
+            MobileDeviceEvent event = new MobileDeviceEvent(this);
+            event.type = eventType;
+            MobileDeviceListener listener = (MobileDeviceListener) mobileDeviceListeners.elementAt(i);
+            listener.deviceChanged(event);
+        }
+    }
+    
+    void qt_swt_event_mobiledevice_changed(boolean aStatus) {
+        // update MobileDevice status to opened/closed
+        isOpen = aStatus;
+        
+        if(isOpen){
+            sendMobileDeviceChangedEvent(MobileDeviceEvent.OPENED);
+        }else{
+            sendMobileDeviceChangedEvent(MobileDeviceEvent.CLOSED);
+        }
+    }
+    
+    void qt_swt_event_mobiledevice_screen_activate(boolean aStatus) {
+        
+        if(screens.length > 0 && activeScreenId<screens.length){
+            if(aStatus){
+                // update the active screen
+                activeScreenId = OS.getScreenDeviceNumber();
+                //forward to screen activated event to new active screen
+                screens[activeScreenId].internal_sendScreenEventActivated();
+            }else {
+                //forward to screen deactivated event to old active screen
+                screens[activeScreenId].internal_sendScreenEventDeactivated();
+            }
+        }
+    }
+    
+    void qt_swt_event_mobiledevice_orientationchanged() {
+        activeScreenId = OS.getScreenDeviceNumber();
+        if(activeScreenId<screens.length){
+            // forward to orientation change event to active screen
+            screens[activeScreenId].internal_sendOrientationScreenChanged();
+        }
+    }
+    
+    private void sendMobileDeviceScreenChangedEvent(int eventType, Screen screen) {
+        int count = mobileDeviceListeners.size();
+        for (int i = 0; i <count; ++i) {
+            MobileDeviceEvent event = new MobileDeviceEvent(this);
+            event.type = eventType;
+            event.data = screen;
+            event.feature = screen;
+            MobileDeviceListener listener = (MobileDeviceListener) mobileDeviceListeners.elementAt(i);
+            listener.screenChanged(event);
+        }
+    }
+    
+    void qt_signal_screen_changed(int aCount) {
+        int type = 0;
+        Screen screen = null;
+        Screen []newScreens = new Screen[aCount];
+        
+        // if getScreen is not called and if still want 
+        // screen changed event in the MobileDevice
+        if(screens.length==0){
+            getScreens();
+        }
+        
+        if(screens.length > aCount){
+            // screen removed
+            int screenHandle = 0;
+            for(int j=0; j<screens.length; j++) {
+                // found removed screen
+                boolean found = false;
+                for(int i=0; i<aCount; i++) {     
+                    screenHandle = OS.QDesktopWidget_screen(desktopWidgetHandle, i);
+                    if(screens[j].screenHandle== screenHandle){
+                        newScreens[i] = screens[j];
+                        newScreens[i].id = i;
+                        found = true;
+                        break;
+                     }
+                }
+                if(!found){
+                    screen = screens[j];
+                    screens[j].internal_dispose();
+                } 
+            }
+            screens = new Screen[aCount];
+            // remove detached screen from 'screens'
+            System.arraycopy(newScreens, 0, screens, 0, aCount);
+            type = MobileDeviceEvent.REMOVED;
+        } else if( screens.length < aCount){
+            // screen attached
+            for(int i=0; i<aCount; i++) {   
+                // found added screen
+                int screenHandle = OS.QDesktopWidget_screen(desktopWidgetHandle, i);
+                boolean found=false;
+                for(int j=0; j<screens.length; j++) {
+                    if(screens[j].screenHandle== screenHandle){
+                        newScreens[i] = screens[j];
+                        newScreens[i].id = i;
+                        found = true;
+                        break;
+                    }
+                }
+                if(!found){
+                    screen = screens[i];
+                    newScreens[i] = new Screen(i, desktopWidgetHandle);
+                } 
+            }
+            screens = new Screen[aCount];
+            // add attached screen to 'screens'
+            System.arraycopy(newScreens, 0, screens, 0, aCount);
+            type = MobileDeviceEvent.ADDED;
+        }
+        sendMobileDeviceScreenChangedEvent(type, screen);
+        activeScreenId = OS.getScreenDeviceNumber();
+    }
+    
+    private static void hookEvents() {
+        int screenSignalProxy = OS.SignalHandler_new(desktopWidgetHandle, OS.QSIGNAL_QDESKTOPWIDGET_SCREENCOUNTCHANGED);
+        OS.QObject_connectOrThrow(desktopWidgetHandle, "screenCountChanged(int)", screenSignalProxy,
+                "widgetSignal(int)", OS.QT_AUTOCONNECTION);
+    }
 
-	/**
-	 * Adds the listener to the collection of listeners who will be notified when a device 
-	 * configuration change occurs, by calling one of the methods defined in the 
-	 * <code>MobileDeviceListener</code> interface. 
-	 * <p>
-	 * <code>screenChanged</code> is called when a monitor configuration changes.<br>
-	 * <code>inputChanged</code> is called when an input configuration changes.<br>
-	 * <code>deviceChanged</code> is called when the device is opened or closed.<br>
-	 *
-	 * @param listener instance called when device events occur
-	 *
-	 * @exception IllegalArgumentException <ul>
-	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
-	 * </ul>
-	 * @exception SWTError <ul>
-	 *    <li>ERROR_ITEM_NOT_ADDED - if the operation fails because of an operating system failure</li>
-	 * </ul>
-	 *
-	 * @see #removeMobileDeviceListener
-	 * @see MobileDeviceListener
-	 */
-	public void addMobileDeviceListener(MobileDeviceListener listener) {
-	    if (listener == null) {
-			SWT.error (SWT.ERROR_NULL_ARGUMENT);
-		}
-		mobileDeviceListeners.addElement(listener);
-	}
-	
-	
-	/**
-	 * Alerts the user using device specific mechanisms such as sounds, flashing, or
-	 * vibration. <code>Level</code> must be one of ALERT_LOW_IMPORTANCE,
-	 * ALERT_HIGH_IMPORTANCE, or ALERT_CRITICAL. The method maps these levels to
-	 * device specific features that may also be dependent upon user configuration
-	 * or current profile.
-	 * 
-	 * @param level
-	 *            constant describing the importance of the alert
-	 * 
-	 * @exception IllegalArgumentException
-	 *                <ul>
-	 *                <li>ERROR_INVALID_ARGUMENT - if level is not one of the
-	 *                allowed class constants</li>
-	 *                </ul>
-	 * 
-	 * @see #ALERT_LOW_IMPORTANCE
-	 * @see #ALERT_HIGH_IMPORTANCE
-	 * @see #ALERT_CRITICAL
-	 */
-	public void alert(int level) {
-	    if (	level != ALERT_LOW_IMPORTANCE &&
-	            level != ALERT_HIGH_IMPORTANCE &&
-	            level != ALERT_CRITICAL) {
-	        SWT.error(SWT.ERROR_INVALID_ARGUMENT);
-	    }
-	    alertLevel = level;
-		(getDisplay()).syncExec(new Runnable() {
-			public void run() {
-				if(alertLevel == ALERT_LOW_IMPORTANCE){
-					OS.QApplication_beep();
-				}else if(alertLevel == ALERT_HIGH_IMPORTANCE){
-					OS.MobileDevice_flashLights(handleMobileDevice, 3000);
-					OS.MobileDevice_vibration(handleMobileDevice, 3000);
-				}else if(alertLevel == ALERT_CRITICAL){
-					OS.QApplication_beep();
-					OS.MobileDevice_flashLights(handleMobileDevice, 3000);
-					OS.MobileDevice_vibration(handleMobileDevice, 3000);
-				}
-			   
-			}
-		}); 
-	}
-	
-	
-	/**
-	 * Returns an array of Input objects describing the input features available to the device. 
-	 * The return value may be <code>null</code> if there are no input features available.
-	 * 
-	 * @exception SWTError <ul>
-	 *    <li>ERROR_CANNOT_GET_SELECTION - if the operation fails because 
-	 * 		of an operating system failure</li>
-	 * </ul> 
-	 *
-	 * @see Input
-	 */
-	public Input[] getInputs() {
-		if(inputs == null) {
-		    try {
-			    (getDisplay()).syncExec(new Runnable() {
-					public void run() {
-						int mask = OS.getHwInputs();
-						int nbInputs = 0;
-						
-						// finding out number of keyboards available
-						if((mask & OS.SYMBIAN_KEYBOARD_FULL)!=0){
-							nbInputs+=2;
-						}
-						
-						if((mask & OS.SYMBIAN_KEYBOARD_KEYPAD)!=0){
-							nbInputs+=2;
-						}
-						// create java counter part of Inputs and
-						// add location and type
-					    inputs = new Input[nbInputs];
-					    int i=0;
-					    int location;
-					    if((mask & OS.SYMBIAN_KEYBOARD_FULL)!=0){
-					    	if((mask & OS.SYMBIAN_KEYBOARD_KEYPAD)!=0){
-								location = MobileDevice.INTERNAL;
-							} else {
-								location = MobileDevice.LOCAL;
-							}
-					    	inputs[i] = new Input(i);
-					    	inputs[i].setLocation(location);
-					    	inputs[i].setType(Input.SOFTKEYS);
-					    	i+=1;
-					    	inputs[i] = new Input(i);
-					    	inputs[i].setLocation(location);
-					    	inputs[i].setType(Input.FULL_KEYBOARD);
-					    	i+=1;
-						}
-					    
-					    if((mask & OS.SYMBIAN_KEYBOARD_KEYPAD)!=0){
-					    	if((mask & OS.SYMBIAN_KEYBOARD_FULL)!=0){
-								location = MobileDevice.EXTERNAL;
-							} else {
-								location = MobileDevice.LOCAL;
-							}
-					    	inputs[i] = new Input(i);
-					    	inputs[i].setLocation(location);
-					    	inputs[i].setType(Input.SOFTKEYS);
-					    	i+=1;
-					    	inputs[i] = new Input(i);
-					    	inputs[i].setLocation(location);
-					    	inputs[i].setType(Input.KEYPAD);
-						}
-					}
-				});
-		    } catch(Throwable e) {
-		        SWT.error(SWT.ERROR_CANNOT_GET_SELECTION);	       
-		    }
-	    }
-	    return inputs;
-	}
-	
-	
-	/**
-	 * Returns an array of Screen objects describing the display features available to the device. 
-	 * The return value may be <code>null</code> if there are no display screens available.
-	 * 
-	 * @exception SWTError <ul>
-	 *    <li>ERROR_CANNOT_GET_SELECTION - if the operation fails because 
-	 * 		of an operating system failure</li>
-	 * </ul> 
-	 *
-	 * @see Screen
-	 */
-	public Screen[] getScreens() {
-		if(screens == null) {
-		    try {
-			    (getDisplay()).syncExec(new Runnable() {
-					public void run() {
-					    int nbScreens = OS.QDesktopWidget_screenCount(desktopWidgetHandle);
-					    activeScreenId = OS.getScreenDeviceNumber();
-					    screens = new Screen[nbScreens];
-					    for(int i=0; i<nbScreens; i++) {
-					        screens[i] = new Screen(i, desktopWidgetHandle);
-					    }
-					}
-				});
-		    } catch(Throwable e) {
-		        SWT.error(SWT.ERROR_CANNOT_GET_SELECTION);	       
-		    }
-	    }
-	    return screens;
-	}
-	
-	
-	/**
-	 * Returns singleton instance of MobileDevice class.
-	 * 
-	 * @return singleton of MobileDevice class. Must not be Null.
-	 * 
-	 * @exception SWTError <ul>
-	 *    <li>ERROR_CANNOT_GET_SELECTION - if the operation fails because of 
-	 * 		an operating system failure</li>
-	 * </ul> 
-	 */ 
-	public static MobileDevice getMobileDevice() {
-	    if(currentMobileDevice == null) {
-	        try {
-		        currentMobileDevice = new MobileDevice(); 
-		        Internal_PackageSupport.setMobileDevice(getDisplay(),currentMobileDevice);
-			    desktopWidgetHandle = OS.QApplication_desktop();
-			    hookEvents();
-	        } catch (Throwable e) {
-	            SWT.error(SWT.ERROR_CANNOT_GET_SELECTION);
-	        }
-	    }
-	    return currentMobileDevice;
-	}
-	 
-	 
-	/**
-	 * Returns whether device is opened. For devices that have no internal screens 
-	 * or input features, the method always returns <code>true</code>.
-	 */
-	public boolean isOpen() { 
-	    getDisplay();
+    /**
+     * Adds the listener to the collection of listeners who will be notified when a device 
+     * configuration change occurs, by calling one of the methods defined in the 
+     * <code>MobileDeviceListener</code> interface. 
+     * <p>
+     * <code>screenChanged</code> is called when a monitor configuration changes.<br>
+     * <code>inputChanged</code> is called when an input configuration changes.<br>
+     * <code>deviceChanged</code> is called when the device is opened or closed.<br>
+     *
+     * @param listener instance called when device events occur
+     *
+     * @exception IllegalArgumentException <ul>
+     *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+     * </ul>
+     * @exception SWTError <ul>
+     *    <li>ERROR_ITEM_NOT_ADDED - if the operation fails because of an operating system failure</li>
+     * </ul>
+     *
+     * @see #removeMobileDeviceListener
+     * @see MobileDeviceListener
+     */
+    public void addMobileDeviceListener(MobileDeviceListener listener) {
+        if (listener == null) {
+            SWT.error (SWT.ERROR_NULL_ARGUMENT);
+        }
+        mobileDeviceListeners.addElement(listener);
+    }
+    
+    
+    /**
+     * Alerts the user using device specific mechanisms such as sounds, flashing, or
+     * vibration. <code>Level</code> must be one of ALERT_LOW_IMPORTANCE,
+     * ALERT_HIGH_IMPORTANCE, or ALERT_CRITICAL. The method maps these levels to
+     * device specific features that may also be dependent upon user configuration
+     * or current profile.
+     * 
+     * @param level
+     *            constant describing the importance of the alert
+     * 
+     * @exception IllegalArgumentException
+     *                <ul>
+     *                <li>ERROR_INVALID_ARGUMENT - if level is not one of the
+     *                allowed class constants</li>
+     *                </ul>
+     * 
+     * @see #ALERT_LOW_IMPORTANCE
+     * @see #ALERT_HIGH_IMPORTANCE
+     * @see #ALERT_CRITICAL
+     */
+    public void alert(int level) {
+        if (    level != ALERT_LOW_IMPORTANCE &&
+                level != ALERT_HIGH_IMPORTANCE &&
+                level != ALERT_CRITICAL) {
+            SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+        }
+        alertLevel = level;
+        (getDisplay()).syncExec(new Runnable() {
+            public void run() {
+                if(alertLevel == ALERT_LOW_IMPORTANCE){
+                    OS.QApplication_beep();
+                }else if(alertLevel == ALERT_HIGH_IMPORTANCE){
+                    OS.MobileDevice_flashLights(handleMobileDevice, 3000);
+                    OS.MobileDevice_vibration(handleMobileDevice, 3000);
+                }else if(alertLevel == ALERT_CRITICAL){
+                    OS.QApplication_beep();
+                    OS.MobileDevice_flashLights(handleMobileDevice, 3000);
+                    OS.MobileDevice_vibration(handleMobileDevice, 3000);
+                }
+               
+            }
+        }); 
+    }
+    
+    
+    /**
+     * Returns an array of Input objects describing the input features available to the device. 
+     * The return value may be <code>null</code> if there are no input features available.
+     * 
+     * @exception SWTError <ul>
+     *    <li>ERROR_CANNOT_GET_SELECTION - if the operation fails because 
+     *         of an operating system failure</li>
+     * </ul> 
+     *
+     * @see Input
+     */
+    public Input[] getInputs() {
+        if(inputs == null) {
+            try {
+                (getDisplay()).syncExec(new Runnable() {
+                    public void run() {
+                        int mask = OS.getHwInputs();
+                        int nbInputs = 0;
+                        
+                        // finding out number of keyboards available
+                        if((mask & OS.SYMBIAN_KEYBOARD_FULL)!=0){
+                            nbInputs+=2;
+                        }
+                        
+                        if((mask & OS.SYMBIAN_KEYBOARD_KEYPAD)!=0){
+                            nbInputs+=2;
+                        }
+                        // create java counter part of Inputs and
+                        // add location and type
+                        inputs = new Input[nbInputs];
+                        int i=0;
+                        int location;
+                        if((mask & OS.SYMBIAN_KEYBOARD_FULL)!=0){
+                            if((mask & OS.SYMBIAN_KEYBOARD_KEYPAD)!=0){
+                                location = MobileDevice.INTERNAL;
+                            } else {
+                                location = MobileDevice.LOCAL;
+                            }
+                            inputs[i] = new Input(i);
+                            inputs[i].setLocation(location);
+                            inputs[i].setType(Input.SOFTKEYS);
+                            i+=1;
+                            inputs[i] = new Input(i);
+                            inputs[i].setLocation(location);
+                            inputs[i].setType(Input.FULL_KEYBOARD);
+                            i+=1;
+                        }
+                        
+                        if((mask & OS.SYMBIAN_KEYBOARD_KEYPAD)!=0){
+                            if((mask & OS.SYMBIAN_KEYBOARD_FULL)!=0){
+                                location = MobileDevice.EXTERNAL;
+                            } else {
+                                location = MobileDevice.LOCAL;
+                            }
+                            inputs[i] = new Input(i);
+                            inputs[i].setLocation(location);
+                            inputs[i].setType(Input.SOFTKEYS);
+                            i+=1;
+                            inputs[i] = new Input(i);
+                            inputs[i].setLocation(location);
+                            inputs[i].setType(Input.KEYPAD);
+                        }
+                    }
+                });
+            } catch(Throwable e) {
+                SWT.error(SWT.ERROR_CANNOT_GET_SELECTION);           
+            }
+        }
+        return inputs;
+    }
+    
+    
+    /**
+     * Returns an array of Screen objects describing the display features available to the device. 
+     * The return value may be <code>null</code> if there are no display screens available.
+     * 
+     * @exception SWTError <ul>
+     *    <li>ERROR_CANNOT_GET_SELECTION - if the operation fails because 
+     *         of an operating system failure</li>
+     * </ul> 
+     *
+     * @see Screen
+     */
+    public Screen[] getScreens() {
+        if(screens == null) {
+            try {
+                (getDisplay()).syncExec(new Runnable() {
+                    public void run() {
+                        int nbScreens = OS.QDesktopWidget_screenCount(desktopWidgetHandle);
+                        activeScreenId = OS.getScreenDeviceNumber();
+                        screens = new Screen[nbScreens];
+                        for(int i=0; i<nbScreens; i++) {
+                            screens[i] = new Screen(i, desktopWidgetHandle);
+                        }
+                    }
+                });
+            } catch(Throwable e) {
+                SWT.error(SWT.ERROR_CANNOT_GET_SELECTION);           
+            }
+        }
+        return screens;
+    }
+    
+    
+    /**
+     * Returns singleton instance of MobileDevice class.
+     * 
+     * @return singleton of MobileDevice class. Must not be Null.
+     * 
+     * @exception SWTError <ul>
+     *    <li>ERROR_CANNOT_GET_SELECTION - if the operation fails because of 
+     *         an operating system failure</li>
+     * </ul> 
+     */ 
+    public static MobileDevice getMobileDevice() {
+        if(currentMobileDevice == null) {
+            try {
+                currentMobileDevice = new MobileDevice(); 
+                Internal_PackageSupport.setMobileDevice(getDisplay(),currentMobileDevice);
+                desktopWidgetHandle = OS.QApplication_desktop();
+                hookEvents();
+            } catch (Throwable e) {
+                SWT.error(SWT.ERROR_CANNOT_GET_SELECTION);
+            }
+        }
+        return currentMobileDevice;
+    }
+     
+     
+    /**
+     * Returns whether device is opened. For devices that have no internal screens 
+     * or input features, the method always returns <code>true</code>.
+     */
+    public boolean isOpen() { 
+        getDisplay();
 
-	    return isOpen; 
-	}
+        return isOpen; 
+    }
 
-	
-	/**
-	 * Call to dispose the Screen object.
-	 *
-	 */
-	void internal_dispose() {
-		if (inputs != null) {
-			for (int i = 0; i < inputs.length; i++) {
-				if (inputs[i] != null) {
-					inputs[i].internal_dispose();
-				}
-			}
-		}
+    
+    /**
+     * Call to dispose the Screen object.
+     *
+     */
+    void internal_dispose() {
+        if (inputs != null) {
+            for (int i = 0; i < inputs.length; i++) {
+                if (inputs[i] != null) {
+                    inputs[i].internal_dispose();
+                }
+            }
+        }
 
-		if (screens != null) {
-			for (int i = 0; i < screens.length; i++) {
-				if (screens[i] != null) {
-					screens[i].internal_dispose();
-				}
-			}
-		}
-		// actual native counter part is deleted in display
-		currentMobileDevice = null;
-		handleMobileDevice = 0;
-		inputs = null;
-		screens = null;
-		desktopWidgetHandle = 0;
-	}
-	
-	
-	/**
-	 * Removes the listener from the collection of listeners who will be notified when a device 
-	 * configuration change occurs. 
-	 *
-	 * @param listener instance called when device events occur
-	 *
-	 * @exception IllegalArgumentException <ul>
-	 *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
-	 * </ul>
-	 * @exception SWTError <ul>
-	 *    <li>ERROR_ITEM_NOT_REMOVED - if the operation fails because 
-	 * 		of an operating system failure</li>
-	 * </ul>
-	 *
-	 * @see #addMobileDeviceListener
-	 * @see MobileDeviceListener
-	 */
-	public void removeMobileDeviceListener(MobileDeviceListener listener) {
-		if (listener == null) {
-			SWT.error (SWT.ERROR_NULL_ARGUMENT);
-		}
+        if (screens != null) {
+            for (int i = 0; i < screens.length; i++) {
+                if (screens[i] != null) {
+                    screens[i].internal_dispose();
+                }
+            }
+        }
+        // actual native counter part is deleted in display
+        currentMobileDevice = null;
+        handleMobileDevice = 0;
+        inputs = null;
+        screens = null;
+        desktopWidgetHandle = 0;
+    }
+    
+    
+    /**
+     * Removes the listener from the collection of listeners who will be notified when a device 
+     * configuration change occurs. 
+     *
+     * @param listener instance called when device events occur
+     *
+     * @exception IllegalArgumentException <ul>
+     *    <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+     * </ul>
+     * @exception SWTError <ul>
+     *    <li>ERROR_ITEM_NOT_REMOVED - if the operation fails because 
+     *         of an operating system failure</li>
+     * </ul>
+     *
+     * @see #addMobileDeviceListener
+     * @see MobileDeviceListener
+     */
+    public void removeMobileDeviceListener(MobileDeviceListener listener) {
+        if (listener == null) {
+            SWT.error (SWT.ERROR_NULL_ARGUMENT);
+        }
 
-		//remove listener
-		//Remove method of Vector class never fails,
-		//so ERROR_ITEM_NOT_REMOVED could never be thrown.
-		mobileDeviceListeners.removeElement(listener);
-	}
-	
-	 /**
-	  * Sets the status of the system virtual keyboard (if one is available).
-	  * By default, or when status is set to VK_NORMAL, a system virtual keyboard
-	  * is displayed when a widget capable of text input gains focus and is
-	  * hidden when that widget looses focus. However, there are cases where 
-	  * an application may wish to continuously display the virtual keyboard
-	  * or always keep it hidden. Setting the status to VK_ALWAYS_ON or VK_ALWAYS_OFF
-	  * will accomplish this and the effect is immediate. Changing focus will
-	  * then have no affect on the virtual keyboard. Note: By default, widgets which 
-	  * normally accept input but are set to <i>read only</i> do not cause the 
-	  * the virtual keyboard to display.
-	  *
-	  * @param status virtual keyboard mode. One of VK_NORMAL, VK_ALWAYS_ON, VK_ALWAYS_OFF
-	  * 
-	  * @exception IllegalArgumentException <ul>
-	  *    <li>ERROR_INVALID_ARGUMENT - if the status parameter is not valid</li>
-	  * </ul>
-	  *
-	  * @see #VK_NORMAL
-	  * @see #VK_ALWAYS_ON
-	  * @see #VK_ALWAYS_OFF
-	  */
-	public void setVKStatus(int status){
-		
-	}
+        //remove listener
+        //Remove method of Vector class never fails,
+        //so ERROR_ITEM_NOT_REMOVED could never be thrown.
+        mobileDeviceListeners.removeElement(listener);
+    }
+    
+     /**
+      * Sets the status of the system virtual keyboard (if one is available).
+      * By default, or when status is set to VK_NORMAL, a system virtual keyboard
+      * is displayed when a widget capable of text input gains focus and is
+      * hidden when that widget looses focus. However, there are cases where 
+      * an application may wish to continuously display the virtual keyboard
+      * or always keep it hidden. Setting the status to VK_ALWAYS_ON or VK_ALWAYS_OFF
+      * will accomplish this and the effect is immediate. Changing focus will
+      * then have no affect on the virtual keyboard. Note: By default, widgets which 
+      * normally accept input but are set to <i>read only</i> do not cause the 
+      * the virtual keyboard to display.
+      *
+      * @param status virtual keyboard mode. One of VK_NORMAL, VK_ALWAYS_ON, VK_ALWAYS_OFF
+      * 
+      * @exception IllegalArgumentException <ul>
+      *    <li>ERROR_INVALID_ARGUMENT - if the status parameter is not valid</li>
+      * </ul>
+      *
+      * @see #VK_NORMAL
+      * @see #VK_ALWAYS_ON
+      * @see #VK_ALWAYS_OFF
+      */
+    public void setVKStatus(int status){
+        
+    }
 }
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Composite.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Composite.java	Wed Jun 23 18:07:10 2010 +0300
@@ -510,7 +510,7 @@
     return new Point (width, height);
 }
 
-void qt_swt_event_widgetResized_pp(int widgetHandle, int oldWidth, int oldHeight, int width, int height) {
+void qt_swt_event_widgetResized_pp(int widgetHandle, int oldWidth, int oldHeight, int width, int height, boolean sendResizeEvent) {
     if (isDisposed ()) return;
     if((widgetHandle == handle) && isMirrored()) {
         // In real coordinate system the children need to be moved so that they
@@ -533,7 +533,7 @@
             }
         }
     }
-    super.qt_swt_event_widgetResized_pp(widgetHandle, oldWidth, oldHeight, width, height);
+    super.qt_swt_event_widgetResized_pp(widgetHandle, oldWidth, oldHeight, width, height, sendResizeEvent);
     if (layout != null) {
         markLayout (false, false);
         updateLayout (false);
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Control.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Control.java	Wed Jun 23 18:07:10 2010 +0300
@@ -1977,10 +1977,10 @@
         sendEvent(SWT.Move);
 }
 
-void qt_swt_event_widgetResized_pp(int widgetHandle, int oldWidth, int oldHeight, int width, int height) {
+void qt_swt_event_widgetResized_pp(int widgetHandle, int oldWidth, int oldHeight, int width, int height, boolean sendResizeEvent) {
     // Resize events are sent only for top native widget,
     // as some Controls are made of multiple native widgets.
-    if (widgetHandle == topHandle)
+    if (widgetHandle == topHandle && sendResizeEvent)
         sendEvent(SWT.Resize);
 }
 
@@ -2008,9 +2008,8 @@
             Display.focusEvent = SWT.None;
         }
     }
-    if(display != null && !display.isDisposed()) {
-        Display.commandArranger.focusedControlChanged();
-    }
+    
+    
 }
 void qt_swt_event_focusWasLost() {
     try {
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Decorations.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Decorations.java	Wed Jun 23 18:07:10 2010 +0300
@@ -902,6 +902,7 @@
 
 boolean qt_event_windowActivate(int widgetHandle) {
     if(widgetHandle == topHandle) {
+        display.commandArranger.shellActivityChanged();
         sendEvent(SWT.Activate);
     }
     return false;
@@ -909,6 +910,7 @@
 
 boolean qt_event_windowDeactivate(int widgetHandle) {
     if(widgetHandle == topHandle) {
+        display.commandArranger.shellActivityChanged();
         sendEvent(SWT.Deactivate);
         saveFocus();
     }
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Display.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Display.java	Wed Jun 23 18:07:10 2010 +0300
@@ -1247,7 +1247,7 @@
         if(widget.packageProxy != null) {
             widget.packageProxy.qt_swt_event_widgetResized(widgetHandle, arg1, arg2, arg3, arg4);
         } else {
-            widget.qt_swt_event_widgetResized_pp(widgetHandle, arg1, arg2, arg3, arg4);
+            widget.qt_swt_event_widgetResized_pp(widgetHandle, arg1, arg2, arg3, arg4, true);
         }
         return false;
     case OS.QSWTEVENT_WIDGETMOVED:
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Shell.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Shell.java	Wed Jun 23 18:07:10 2010 +0300
@@ -141,6 +141,14 @@
 WindowSurface windowSurface;
 
 /**
+ * When QMainWindow/QDialog visibility is changed, Qt may send a resize event.
+ * eSWT application may have a Shell.setVisible() call in Shell's resize event
+ * handler, which would cause an infinite loop. To prevent this suppress resize
+ * events when Shell visibility is being changed.
+ */
+boolean suppressResizeEvent;
+
+/**
  * Constructs a new instance of this class. This is equivalent
  * to calling <code>Shell((Display) null)</code>.
  *
@@ -467,11 +475,15 @@
     Point size =  computeSize(area.width, area.height, true);
     size.x -= windowFrameTrim() * 2;
     size.y -= windowTitleTrim() + windowFrameTrim();
+    
+    // These values will be returned if the size is queried before the Shell
+    // is made visible (and they are not set again). 
+    OS.QWidget_resize(topHandle, size.x, size.y);
+    
     if(OS.windowServer == OS.WS_SYMBIAN_S60 && parent == null) {
         setRestoreState(OS.QT_WINDOWMAXIMIZED, false);
-    } else {
-        OS.QWidget_resize(topHandle, size.x, size.y);
     }
+
     return size;
 }
 
@@ -991,7 +1003,15 @@
     }
     
     // This shell
-    super.setVisible(visible);
+    try {
+        if (visible) {
+            suppressResizeEvent = true;
+        }
+        super.setVisible(visible);
+    } finally {
+        suppressResizeEvent = false;
+    }
+    
     if(isDisposed()) return;
         
     // Dialog shells. 
@@ -1132,6 +1152,10 @@
     return defBounds;
 }
 
+void qt_swt_event_widgetResized_pp(int widgetHandle, int oldWidth, int oldHeight, int width, int height, boolean sendResizeEvent) {
+    super.qt_swt_event_widgetResized_pp(widgetHandle, oldWidth, oldHeight, width, height, !suppressResizeEvent);
+}
+
 WindowSurface getWindowSurface() {
 	checkWidget();
 	// Only top level shells have window surface
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Widget.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Widget.java	Wed Jun 23 18:07:10 2010 +0300
@@ -869,7 +869,7 @@
 void qt_swt_event_widgetPainted(int widgetHandle, int x, int y, int width, int height, int regionHandle) {
 }
 
-void qt_swt_event_widgetResized_pp(int widgetHandle, int oldWidth, int oldHeight, int width, int height) {
+void qt_swt_event_widgetResized_pp(int widgetHandle, int oldWidth, int oldHeight, int width, int height, boolean sendResizeEvent) {
 }
 
 void register_pp () {
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/common_j2me/org/eclipse/swt/internal/ApplicationUidWrapper.java	Fri Jun 11 13:33:44 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009,2010 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Nokia Corporation - initial implementation
- *******************************************************************************/
-package org.eclipse.swt.internal;
-
-import com.nokia.mj.impl.rt.support.ApplicationInfo;
-
-
-public final class ApplicationUidWrapper {
-
-	public static int uid() {
-        int midletUid = -1;
-        try{
-            String uidS = ApplicationInfo.getInstance().getUid().getStringValue();
-            // In Symbian the UID is in format '[<uid>]' where <uid> is in hex
-            // format. So wee need to take the brackets away.
-            // Long is needed in conversion because UIDs greater than 0x80000000
-            // would fail if Integer would be used. However typecast from long
-            // to int is safe since UID in Symbian is 32 bit.
-            long uidL = Long.parseLong(uidS.substring(1,uidS.length()-1), 16);
-            return (int)uidL;
-        }
-        catch (Throwable t) {/* Not handled*/ }
-        return midletUid;
-    }
-}
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/common_j2me/org/eclipse/swt/internal/CommandPresentationStrategyWrapper.java	Fri Jun 11 13:33:44 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     Nokia Corporation - initial implementation 
- *******************************************************************************/
-package org.eclipse.swt.internal;
-
-public final class CommandPresentationStrategyWrapper {
-	public static org.eclipse.swt.internal.qt.CommandPresentationStrategy createStrategy() {
-    	return new org.eclipse.swt.internal.qt.s60.S60CommandPresentationStrategy();	
-    	}
-}
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/common_j2se/org/eclipse/swt/internal/ApplicationUidWrapper.java	Fri Jun 11 13:33:44 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     Nokia Corporation - initial implementation 
- *******************************************************************************/
-package org.eclipse.swt.internal;
-
-public final class ApplicationUidWrapper {
-    public static int uid() {
-        return 0;
-    }
-}
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/common_j2se/org/eclipse/swt/internal/CommandPresentationStrategyWrapper.java	Fri Jun 11 13:33:44 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     Nokia Corporation - initial implementation 
- *******************************************************************************/
-package org.eclipse.swt.internal;
-
-public final class CommandPresentationStrategyWrapper {
-	public static org.eclipse.swt.internal.qt.CommandPresentationStrategy createStrategy() {
-    	return new org.eclipse.swt.internal.qt.DesktopCommandPresentationStrategy();
-        }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/linux/org/eclipse/swt/internal/ApplicationUidWrapper.java	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Nokia Corporation - initial implementation 
+ *******************************************************************************/
+package org.eclipse.swt.internal;
+
+public final class ApplicationUidWrapper {
+    public static int uid() {
+        return 0;
+    }
+}
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/linux/org/eclipse/swt/internal/qt/s60/S60CommandPresentationStrategy.java	Fri Jun 11 13:33:44 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,178 +0,0 @@
-package org.eclipse.swt.internal.qt.s60;
-
-import org.eclipse.ercp.swt.mobile.Command;
-import org.eclipse.swt.internal.qt.CommandPresentationStrategy;
-import org.eclipse.swt.internal.qt.CommandUtils;
-import org.eclipse.swt.internal.qt.OS;
-import org.eclipse.swt.internal.qt.CommandArranger.CommandCollection;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Internal_PackageSupport;
-import org.eclipse.swt.widgets.Widget;
-
-public class S60CommandPresentationStrategy extends CommandPresentationStrategy {
-    private Command[] positiveKeyCommands;
-    private Command negativeKeyCommand;
-    private Command defaultCommand;
-
-    public S60CommandPresentationStrategy() {
-        super();
-    }
-
-    protected void dispose() {
-        positiveKeyCommands = null;
-        negativeKeyCommand = null;
-        defaultCommand =null;
-    }
-
-
-    protected void handleCommandListChange(Command added, Command removed,
-            CommandCollection commands) {
-        cleanNegativeCommand();
-        cleanPositiveCommands();
-        updateCommandPositions(commands.getCommands(null));
-        placeNegativeCommand();
-        placePositiveCommands();
-    }
-
-    protected void handleDefaultCommandChange(Command defaultCommand) {
-        this.defaultCommand = defaultCommand;
-        cleanPositiveCommands();
-        placePositiveCommands();
-    }
-
-
-    protected void handleFocusChange(Control focused,
-            CommandCollection oldCommands, CommandCollection commands) {
-
-        //Clean-up the existing commands
-        cleanPositiveCommands();
-        cleanNegativeCommand();
-        //determine where the commands go
-        if( commands != null && commands.getSize()>0 ){
-            Command[] add = commands.getCommands(null);
-            updateCommandPositions(add);
-        }
-        //Place them to their places
-        placePositiveCommands();
-        placeNegativeCommand();
-
-    }
-
-    private void updateCommandPositions(Command[] commands) {
-        positiveKeyCommands = new Command[commands.length];
-        int  positiveKeyIndex=0;
-        for (int i = 0; i < commands.length; i++) {
-            Command cmd = commands[i];
-            if ( cmd.isDefaultCommand()){
-                defaultCommand = cmd;
-                continue;
-            }
-            if( CommandUtils.isNegativeType(cmd.type) ){
-                if (negativeKeyCommand == null || negativeKeyCommand.isDisposed()){
-                    negativeKeyCommand = cmd;
-                }else
-                if( negativeKeyCommand.getPriority() <= cmd.getPriority() ){
-                    positiveKeyCommands[positiveKeyIndex] = negativeKeyCommand;
-                    positiveKeyIndex++;
-                    negativeKeyCommand = cmd;
-                }else{
-                    positiveKeyCommands[positiveKeyIndex] = cmd;
-                    positiveKeyIndex++;
-                }
-                continue;
-            }
-            positiveKeyCommands[positiveKeyIndex]=cmd;
-            positiveKeyIndex++;
-        }
-        if ((positiveKeyIndex) < positiveKeyCommands.length ){// needs to shrink
-            Command[] rightSized = new Command[positiveKeyIndex];
-            System.arraycopy(positiveKeyCommands, 0, rightSized, 0, rightSized.length);
-            positiveKeyCommands = rightSized;
-        }
-    }
-
-
-    private void cleanPositiveCommands() {
-        boolean useBar = false;
-        if ( (positiveKeyCommands != null && positiveKeyCommands.length >1) ||
-                (defaultCommand != null && positiveKeyCommands != null) ){
-            useBar = true;
-        }
-        if (defaultCommand != null && !defaultCommand.isDisposed()
-                && !defaultCommand.control.isDisposed()) {
-            if (useBar) {
-                OS.QWidget_removeAction(defaultCommand.control.getShell()
-                        .internal_getOwnMenuBar(), topHandle(defaultCommand));
-            }
-            else{
-                 OS.QWidget_removeAction(topHandle(defaultCommand.control), topHandle(defaultCommand));
-            }
-        }
-        if (positiveKeyCommands != null) {
-            for (int i = 0; i < positiveKeyCommands.length; i++) {
-                Command cmd = positiveKeyCommands[i];
-                if (cmd == null || cmd.isDisposed()  || cmd.control.isDisposed()){
-                	continue;
-                }
-                int handle = 0;
-                if (useBar) {
-                    handle = cmd.control.getShell().internal_getOwnMenuBar();
-                } else {
-                    handle = topHandle(positiveKeyCommands[0].control);
-                }
-                OS.QWidget_removeAction(handle, topHandle(cmd));
-
-            }
-        }
-    }
-
-   private void cleanNegativeCommand() {
-        if(negativeKeyCommand != null && !negativeKeyCommand.isDisposed() && !negativeKeyCommand.control.isDisposed() ){
-            OS.QWidget_removeAction(topHandle(negativeKeyCommand.control), topHandle(negativeKeyCommand));
-        }
-    }
-
-    private void placeNegativeCommand() {
-        if(negativeKeyCommand != null ){
-            OS.QWidget_addAction(Internal_PackageSupport.topHandle(negativeKeyCommand.control),
-                    topHandle(negativeKeyCommand));
-        }
-    }
-
-    private void placePositiveCommands() {
-        if (defaultCommand != null ) {
-            int defaultCmdHandle = topHandle(defaultCommand);
-            if (positiveKeyCommands != null) {
-                OS.QMenuBar_addAction(defaultCommand.control.getShell()
-                        .internal_getOwnMenuBar(), defaultCmdHandle);
-            } else {
-                OS.QWidget_addAction(Internal_PackageSupport
-                        .topHandle(defaultCommand.control), defaultCmdHandle);
-            }
-        }
-        if (positiveKeyCommands != null) {
-            if (positiveKeyCommands.length == 1 && defaultCommand == null) {
-                OS.QWidget_addAction(Internal_PackageSupport
-                        .topHandle(positiveKeyCommands[0].control),
-                        topHandle(positiveKeyCommands[0]));
-            } else {
-                CommandUtils.sort(positiveKeyCommands);
-                for (int i = 0; i < positiveKeyCommands.length; i++) {
-                    OS.QMenuBar_addAction(positiveKeyCommands[i].control
-                            .getShell().internal_getOwnMenuBar(),
-                            topHandle(positiveKeyCommands[i]));
-                }
-            }
-        }
-    }
-
-    protected void handleMenuBarChanged(int newMenuBar,
-            CommandCollection commands) {
-        placePositiveCommands();
-    }
-
-
-    private static final int topHandle(Widget w) {
-        return Internal_PackageSupport.topHandle(w);
-    }
-}
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/library/graphics/qt/windowsurfaceimpl_symbian.h	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/library/graphics/qt/windowsurfaceimpl_symbian.h	Wed Jun 23 18:07:10 2010 +0300
@@ -12,7 +12,7 @@
 #define WINDOWSURFACEQT_H_
 
 #include "graphics.h"
-#include "qwindowsurface_p.h"
+#include <QtGui/private/qwindowsurface_p.h>
 
 namespace Java { namespace GFX {
 
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/library/os.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/library/os.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -11467,136 +11467,215 @@
 //
 
 JNIEXPORT jint JNICALL OS_NATIVE( MobileDevice_1new )
+#ifdef __SYMBIAN32__
+  (JNIEnv* aJniEnv, jclass)
+#else
   (JNIEnv*, jclass)
+#endif
     {
     jint handle = 0;
 #ifdef __SYMBIAN32__
+    SWT_TRY
+        {
+        SWT_LOG_JNI_CALL();
         handle =  swtApp->initializeMobileDevice();
+        }
+    SWT_CATCH
 #endif
     return handle;    
     }
 
 JNIEXPORT void JNICALL OS_NATIVE( MobileDevice_1createFlipWatch )
 #ifdef __SYMBIAN32__
-  (JNIEnv*, jclass, jint aHandle)
+  (JNIEnv* aJniEnv, jclass, jint aHandle)
 #else
-(JNIEnv*, jclass, jint)
+  (JNIEnv*, jclass, jint)
 #endif
     {
 #ifdef __SYMBIAN32__
-    CSwtMobileDevice* mobileDevice =  reinterpret_cast<CSwtMobileDevice*>(aHandle);
-    mobileDevice->CreateFlipWatchL();
-#endif
-    }
+    SWT_TRY
+        {
+        SWT_LOG_JNI_CALL();
+        SWT_LOG_DATA_1( "handle=%x", aHandle );
+        CSwtMobileDevice* mobileDevice =  reinterpret_cast<CSwtMobileDevice*>(aHandle);
+        mobileDevice->CreateFlipWatchL();
+        }
+    SWT_CATCH
+#endif
+    }
+    
 JNIEXPORT void JNICALL OS_NATIVE( MobileDevice_1destroy )
 #ifdef __SYMBIAN32__
-  (JNIEnv*, jclass, jint aHandle)
+  (JNIEnv* aJniEnv, jclass, jint /*aHandle*/)
 #else
-(JNIEnv*, jclass, jint)
+  (JNIEnv*, jclass, jint)
 #endif
     {
 #ifdef __SYMBIAN32__
-    swtApp->destroyMobileDevice();
+    SWT_TRY
+        {
+        SWT_LOG_JNI_CALL();
+        SWT_LOG_DATA_1( "handle=%x", aHandle );
+        swtApp->destroyMobileDevice();
+        }
+    SWT_CATCH
 #endif
     }
 
 JNIEXPORT jint JNICALL OS_NATIVE( MobileDevice_1getUserInactivityTime )
 #ifdef __SYMBIAN32__
-  (JNIEnv*, jclass, jint aHandle)
+  (JNIEnv* aJniEnv, jclass, jint aHandle)
 #else
-(JNIEnv*, jclass, jint)
+  (JNIEnv*, jclass, jint)
 #endif
     {
     jint time=0;
 #ifdef __SYMBIAN32__
-    CSwtMobileDevice* mobileDevice =  reinterpret_cast<CSwtMobileDevice*>(aHandle);
-    time = mobileDevice->GetUserInactivityTime();
+    SWT_TRY
+        {
+        SWT_LOG_JNI_CALL();
+        SWT_LOG_DATA_1( "handle=%x", aHandle );
+        CSwtMobileDevice* mobileDevice =  reinterpret_cast<CSwtMobileDevice*>(aHandle);
+        time = mobileDevice->GetUserInactivityTime();
+        }
+    SWT_CATCH
 #endif
     return time;
     }
 
 JNIEXPORT void JNICALL OS_NATIVE( MobileDevice_1resetUserInactivityTime )
 #ifdef __SYMBIAN32__
-  (JNIEnv*, jclass, jint aHandle)
+  (JNIEnv* aJniEnv, jclass, jint aHandle)
 #else
-(JNIEnv*, jclass, jint)
+  (JNIEnv*, jclass, jint)
 #endif
     {
 #ifdef __SYMBIAN32__
-    CSwtMobileDevice* mobileDevice =  reinterpret_cast<CSwtMobileDevice*>(aHandle);
-    mobileDevice->ResetUserInactivityTime();
+    SWT_TRY
+        {
+        SWT_LOG_JNI_CALL();
+        SWT_LOG_DATA_1( "handle=%x", aHandle );
+        CSwtMobileDevice* mobileDevice =  reinterpret_cast<CSwtMobileDevice*>(aHandle);
+        mobileDevice->ResetUserInactivityTime();
+        }
+    SWT_CATCH
 #endif
     }
 
 JNIEXPORT void JNICALL OS_NATIVE( MobileDevice_1setLight )
 #ifdef __SYMBIAN32__
-  (JNIEnv*, jclass, jint aHandle, jint aDuration)
+  (JNIEnv* aJniEnv, jclass, jint aHandle, jint aDuration)
 #else
-(JNIEnv*, jclass, jint, jint)
+  (JNIEnv*, jclass, jint, jint)
 #endif
     {
 #ifdef __SYMBIAN32__
-    CSwtMobileDevice* mobileDevice =  reinterpret_cast<CSwtMobileDevice*>(aHandle);
-    mobileDevice->SetLights(static_cast<TInt>(aDuration));
+    SWT_TRY
+        {
+        SWT_LOG_JNI_CALL();
+        SWT_LOG_DATA_2( "handle=%x duration=%x", aHandle, aDuration );
+        CSwtMobileDevice* mobileDevice =  reinterpret_cast<CSwtMobileDevice*>(aHandle);
+        mobileDevice->SetLights(static_cast<TInt>(aDuration));
+        }
+    SWT_CATCH
 #endif
     }
 
 JNIEXPORT jboolean JNICALL OS_NATIVE( MobileDevice_1flashLights )
 #ifdef __SYMBIAN32__
-  (JNIEnv *, jclass, jint aHandle, jint aDuration)
+  (JNIEnv* aJniEnv, jclass, jint aHandle, jint aDuration)
 #else
-(JNIEnv*, jclass, jint, jint)
+  (JNIEnv*, jclass, jint, jint)
 #endif
     {
     jboolean flashLights = JNI_FALSE;
 #ifdef __SYMBIAN32__
-    CSwtMobileDevice* mobileDevice =  reinterpret_cast<CSwtMobileDevice*>(aHandle);
-    TRAP_IGNORE(flashLights = mobileDevice->FlashBacklightL(static_cast<TInt>(aDuration)));
+    SWT_TRY
+        {
+        SWT_LOG_JNI_CALL();
+        SWT_LOG_DATA_2( "handle=%x duration=%x", aHandle, aDuration );
+        CSwtMobileDevice* mobileDevice =  reinterpret_cast<CSwtMobileDevice*>(aHandle);
+        TRAP_IGNORE(flashLights = mobileDevice->FlashBacklightL(static_cast<TInt>(aDuration)));
+        }
+    SWT_CATCH
 #endif
     return ( flashLights ? JNI_TRUE : JNI_FALSE );
     }
 
 JNIEXPORT jboolean JNICALL OS_NATIVE( MobileDevice_1vibration )
 #ifdef __SYMBIAN32__
-  (JNIEnv*, jclass, jint aHandle, jint aDuration)
+  (JNIEnv* aJniEnv, jclass, jint aHandle, jint aDuration)
 #else
-(JNIEnv*, jclass, jint, jint)
+  (JNIEnv*, jclass, jint, jint)
 #endif
     {
     jboolean vibraSupport = JNI_FALSE;
 #ifdef __SYMBIAN32__
-    CSwtMobileDevice* mobileDevice =  reinterpret_cast<CSwtMobileDevice*>(aHandle);
-    vibraSupport = mobileDevice->Vibrate((TTimeIntervalMicroSeconds32)static_cast<TInt>(aDuration));
+    SWT_TRY
+        {
+        SWT_LOG_JNI_CALL();
+        SWT_LOG_DATA_2( "handle=%x duration=%x", aHandle, aDuration );
+        CSwtMobileDevice* mobileDevice =  reinterpret_cast<CSwtMobileDevice*>(aHandle);
+        vibraSupport = mobileDevice->Vibrate((TTimeIntervalMicroSeconds32)static_cast<TInt>(aDuration));
+        }
+    SWT_CATCH
 #endif
     return ( vibraSupport ? JNI_TRUE : JNI_FALSE );
     }
 
 JNIEXPORT jint JNICALL OS_NATIVE( getScreenDeviceNumber )
+#ifdef __SYMBIAN32__
+  (JNIEnv* aJniEnv, jclass)
+#else
   (JNIEnv*, jclass)
+#endif
     {
     jint screenNumber = -1;
 #ifdef __SYMBIAN32__
+    SWT_TRY
+        {
+        SWT_LOG_JNI_CALL();
         screenNumber = SymbianUtils::GetScreenDeviceNumber();
+        }
+    SWT_CATCH
 #endif
     return screenNumber;    
     }
 
 JNIEXPORT jint JNICALL OS_NATIVE( getColorDepth )
+#ifdef __SYMBIAN32__
+  (JNIEnv* aJniEnv, jclass)
+#else
   (JNIEnv*, jclass)
+#endif
     {
     jint colorDepth = 24;
 #ifdef __SYMBIAN32__
-    colorDepth = SymbianUtils::GetColorDepth();
+    SWT_TRY
+        {
+        SWT_LOG_JNI_CALL();
+        colorDepth = SymbianUtils::GetColorDepth();
+        }
+    SWT_CATCH
 #endif
     return colorDepth;    
     }
 
 JNIEXPORT jint JNICALL OS_NATIVE( getHwInputs )
+#ifdef __SYMBIAN32__
+  (JNIEnv* aJniEnv, jclass)
+#else
   (JNIEnv*, jclass)
+#endif
     {
     jint hwInputs = 0;
 #ifdef __SYMBIAN32__
+    SWT_TRY
+        {
+        SWT_LOG_JNI_CALL();
         hwInputs = SymbianUtils::GetHwInputs();
+        }
+    SWT_CATCH
 #endif
     return hwInputs;    
     }
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/library/swtapplication.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/library/swtapplication.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -123,7 +123,7 @@
     SWT_LOG_FUNC_CALL();
     int handle = 0;
 #ifdef __SYMBIAN32__
-   handle = reinterpret_cast<int>(CSwtMobileDevice::NewL());
+    TRAP_IGNORE(handle = reinterpret_cast<int>(CSwtMobileDevice::NewL()));
 #endif
     return handle;
     }
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/library/swtmobiledevice.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/library/swtmobiledevice.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -146,7 +146,7 @@
     {
     if ((aLevel < 0) || (aLevel > KMIDMaxLightLevel))
         {
-        User::Leave(KErrArgument);
+        return;
         }
 
     if (!iHWRMLight)
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/library/webkit/os.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/library/webkit/os.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -15,13 +15,13 @@
 #include <QWebHistory>
 #endif
 
-#include "org_eclipse_swt_internal_qt_webkit_OS_0005fwebkit.h"
+#include "org_eclipse_swt_internal_qt_webkit_WebkitOS.h"
 #include "swt.h"
 #include "swtlog.h"
 #include "swtapplication.h"
 #include "jniutils.h"
 
-#define OS_NATIVE(func) Java_org_eclipse_swt_internal_qt_webkit_OS_1webkit_##func
+#define OS_NATIVE(func) Java_org_eclipse_swt_internal_qt_webkit_WebkitOS_##func
 
 using namespace Java::eSWT;
 
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/CommandArranger.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/CommandArranger.java	Wed Jun 23 18:07:10 2010 +0300
@@ -11,12 +11,14 @@
 package org.eclipse.swt.internal.qt;
 
 import org.eclipse.ercp.swt.mobile.Command;
-import org.eclipse.swt.internal.CommandPresentationStrategyWrapper;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Decorations;
 import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Internal_PackageSupport;
 import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Widget;
+
 /**
  * Manages the Command presentation cycle. This is a singleton object that gets
  * notified about the events that can have an effect on the way the Commands are
@@ -24,298 +26,420 @@
  * context with the help of {@link CommandCollection}. It also notifies the
  * currently active {@link CommandPresentationStrategy} so that the presentation
  * is updated if necessary.
- *
+ * 
  * @see Command
  * @see CommandCollection
  * @see CommandPresentationStrategy
  */
 public class CommandArranger {
-    Control focusedControl;
 
-    /**
-     * A helper for keeping an ordered list of {@link Command}s in the current focus context.
-     * The Commands are ordered according to their proximity to the currently focused control.
-     * The ordered list starts with Commands from the currently focused Control if any and ends with
-     * the active Shell and includes all the Commands in between. If a Control has more
-     * than one Command they are ordered among themselves according to creation order.
-     */
-    public class CommandCollection{
+/**
+ * A helper for keeping an ordered list of {@link Command}s in the current focus
+ * context. The Commands are ordered according to their proximity to the
+ * currently focused control. The ordered list starts with Commands from the
+ * currently focused Control if any and ends with the active Shell and includes
+ * all the Commands in between. If a Control has more than one Command they are
+ * ordered among themselves according to creation order.
+ */
+public class CommandCollection {
 
-        private Command[] fCommands;
+private Command[] fCommands;
 
-        CommandCollection(){
-            super();
-        }
+CommandCollection() {
+    super();
+}
 
-        /**
-         * Adds the command to the collection.
-         * Warning: This does not make duplicate control.
-         * @param command
-         */
-        void addCommand(Command command) {
-            if (command == null)
-                return;
-            if (fCommands == null) {
-                fCommands = new Command[1];
-                fCommands[0] = command;
-                return;
-            }
-            int size = fCommands.length + 1;
-            Command[] newList = new Command[size];
-            // find the insertion point so that the order is correct
-            int insertPoint = 0;
-            Shell activeShell = display.getActiveShell();
-            Control ctrl = display.getFocusControl();
-            while (ctrl != null && ctrl != activeShell) {
-                if (ctrl == command.control) {
-                    // Adding a command to focused control increment by one.
-                    // adding Command.internal_getCommands(ctrl).length will
-                    // just duplicate the count for Commands already in array.
-                    insertPoint++;
-                    break;
-                }
-                insertPoint += Command.internal_getCommands(ctrl).length;
-                ctrl = ctrl.getParent();
-            }
-            System.arraycopy(fCommands, 0, newList, 0, insertPoint);
-            System.arraycopy(fCommands, insertPoint, newList, insertPoint + 1,
-                    fCommands.length - insertPoint);
-            newList[insertPoint] = command;
-            fCommands = newList;
+/**
+ * Adds the command to the collection. Warning: This does not make duplicate
+ * control.
+ * 
+ * @param command
+ */
+void addCommand(Command command) {
+    if (command == null)
+        return;
+    if (fCommands == null) {
+        fCommands = new Command[1];
+        fCommands[0] = command;
+        return;
+    }
+    int size = fCommands.length + 1;
+    Command[] newList = new Command[size];
+    // find the insertion point so that the order is correct
+    int insertPoint = 0;
+    Shell activeShell = display.getActiveShell();
+    Control ctrl = display.getFocusControl();
+    while (ctrl != null && ctrl != activeShell) {
+        if (ctrl == command.control) {
+            // Adding a command to focused control increment by one.
+            // adding Command.internal_getCommands(ctrl).length will
+            // just duplicate the count for Commands already in array.
+            insertPoint++;
+            break;
         }
+        insertPoint += Command.internal_getCommands(ctrl).length;
+        ctrl = ctrl.getParent();
+    }
+    System.arraycopy(fCommands, 0, newList, 0, insertPoint);
+    System.arraycopy(fCommands, insertPoint, newList, insertPoint + 1, fCommands.length
+        - insertPoint);
+    newList[insertPoint] = command;
+    fCommands = newList;
+}
 
-        /**
-         * Adds the list of Commands to the collection.
-         * @param commands
-         */
-        void addCommand( Command[] commands ){
-            if (commands == null || commands.length == 0 ) return;
-            if (fCommands == null ){
-                fCommands = new Command[ commands.length ];
-                System.arraycopy(commands, 0, fCommands, 0, commands.length );
-                return;
-            }
-            int size = commands.length + fCommands.length;
-            Command[] newList = new Command[ size ];
-            System.arraycopy(fCommands, 0, newList, 0, fCommands.length);
-            System.arraycopy(commands, 0, newList, fCommands.length , commands.length );
-            fCommands = newList;
+/**
+ * Adds the list of Commands to the collection.
+ * 
+ * @param commands
+ */
+void addCommand(Command[] commands) {
+    if (commands == null || commands.length == 0)
+        return;
+    if (fCommands == null) {
+        fCommands = new Command[commands.length];
+        System.arraycopy(commands, 0, fCommands, 0, commands.length);
+        return;
+    }
+    int size = commands.length + fCommands.length;
+    Command[] newList = new Command[size];
+    System.arraycopy(fCommands, 0, newList, 0, fCommands.length);
+    System.arraycopy(commands, 0, newList, fCommands.length, commands.length);
+    fCommands = newList;
+}
+
+/**
+ * Removes the command from the list.
+ * 
+ * @param command
+ */
+void removeCommand(Command command) {
+    if (command == null)
+        return;
+    if (fCommands == null || fCommands.length == 0)
+        return;
+    int removeIndex = -1;
+    for (int i = 0; i < fCommands.length; i++) {
+        if (fCommands[i] == command) {
+            removeIndex = i;
         }
+    }
+    if (removeIndex == -1)
+        return;
+    Command[] newList = new Command[fCommands.length - 1];
+    System.arraycopy(fCommands, 0, newList, 0, removeIndex);
+    System.arraycopy(fCommands, removeIndex + 1, newList, removeIndex, (fCommands.length
+        - removeIndex - 1));
+    fCommands = newList;
+}
 
-        /**
-         * Removes the command from the list.
-         * @param command
-         */
-        void removeCommand( Command command ){
-            if ( command == null ) return;
-            if (fCommands == null || fCommands.length == 0 ) return;
-            int removeIndex = -1;
-            for (int i = 0; i < fCommands.length; i++) {
-                if(fCommands[i] == command ){
-                    removeIndex = i;
-                }
+/**
+ * Returns the number of the Commands
+ * 
+ * @return boolean
+ */
+int getSize() {
+    int size = 0;
+    if (fCommands != null)
+        size = fCommands.length;
+    return size;
+}
+
+/**
+ * Retrieves the Commands of the types indicated by the commandTypes array. The
+ * order of the commandTypes array has no significance. Passing a null parameter
+ * or an empty array retrieves all the available Commands.
+ * 
+ * @param commandTypes
+ * @return Command list
+ */
+Command[] getCommands(int[] commandTypes) {
+    if (commandTypes == null || commandTypes.length == 0) {
+        return fCommands;
+    }
+    int size = getSize();
+    Command[] filteredCommands = new Command[size];
+    int index = 0;
+    for (int i = 0; i < fCommands.length; i++) {
+        for (int j = 0; j < commandTypes.length; j++) {
+            if (fCommands[i].type == commandTypes[j]) {
+                filteredCommands[index] = fCommands[i];
+                index++;
+                break;
             }
-            if ( removeIndex == -1 ) return;
-            Command[] newList = new Command[ fCommands.length -1 ];
-            System.arraycopy( fCommands, 0, newList, 0, removeIndex);
-            System.arraycopy( fCommands, removeIndex + 1, newList, removeIndex, (fCommands.length - removeIndex -1) );
-            fCommands = newList;
         }
+    }
+    if (size > (index)) {// Some commands filtered resize the Array
+        Command[] shrunk = new Command[index];
+        System.arraycopy(filteredCommands, 0, shrunk, 0, index);
+        return shrunk;
+    }
+    return filteredCommands;
+}
 
-        /**
-         * Returns the number of the Commands
-         *
-         * @return boolean
-         */
-        public int getSize(){
-            int size = 0;
-            if (fCommands != null ) size = fCommands.length;
-            return size;
-        }
+}// CommandCollection
 
-        /**
-         * Retrieves the Commands of the types indicated by the commandTypes array.
-         * The order of the commandTypes array has no significance. Passing a null parameter
-         * or an empty array retrieves all the available Commands.
-         *
-         * @param commandTypes
-         * @return Command list
-         */
-        public Command[] getCommands( int[] commandTypes ){
-            if ( commandTypes == null || commandTypes.length == 0 ){
-                return fCommands;
-            }
-            int size = getSize();
-            Command[] filteredCommands = new Command[size];
-            int index = 0;
-            for (int i = 0; i < fCommands.length ; i++) {
-                for(int j = 0; j<commandTypes.length; j++){
-                    if ( fCommands[i].type == commandTypes[j] ){
-                        filteredCommands[index]=fCommands[i];
-                        index++;
-                        break;
-                    }
-                }
-            }
-            if( size > (index) ){// Some commands filtered resize the Array
-                Command[] shrunk = new Command[index];
-                System.arraycopy( filteredCommands, 0, shrunk, 0, index);
-                return shrunk;
-            }
-            return filteredCommands;
-        }
-    }// CommandCollection
+private CommandCollection currentCommands;
+private Command defaultCommand;
+private Display display;
+Control focusedControl;
+Shell lastKnownActiveShell;
+private Command[] positiveKeyCommands;
+private Command negativeKeyCommand;
+
+
+public CommandArranger(Display display) {
+    super();
+    this.display = display;
+    currentCommands = new CommandCollection();
+}
 
-    private CommandCollection currentCommands;
-    private CommandPresentationStrategy strategy;
-    private Command defaultCommand;
-    private Display display;
+/**
+ * Called when the application changes the QMenuBar. This method does not handle
+ * the cases when the QMenuBar may change when the active top-level Shell
+ * changes. Since this does not cause a menu bar change on all platforms.
+ * 
+ * @see org.eclipse.swt.widgets.Decorations#setMenuBar(Menu)
+ * 
+ **/
+public void menuBarChanged(Decorations decorations) {
+    if (currentCommands == null || currentCommands.getSize() < 1)
+        return;
+    // if the changed menu bar is not on the active shell ignore and leave
+    // it to focus change.
+    if (decorations.getShell() != decorations.getDisplay().getActiveShell())
+        return;
+    // Call internal_getOwnMenuBar because the menu bar can be set to null
+    // in Decorations and
+    // we may need to create the internal one.
+    int menuBarHandle = decorations.internal_getOwnMenuBar();
 
-    public CommandArranger(Display display){
-        super();
-        this.display = display;
-        currentCommands = new CommandCollection();
-        strategy = CommandPresentationStrategyWrapper.createStrategy();
+    handleMenuBarChanged(menuBarHandle, currentCommands);
+}
+
+/**
+ * Called when a new Shell becomes active.
+ * 
+ * @see Control#qt_swt_event_focusWasGained() //TODO
+ */
+public void shellActivityChanged() {
+    Shell activeShell = display.getActiveShell();
+    
+    if (activeShell == lastKnownActiveShell) {
+        return;
+    }
+    lastKnownActiveShell = activeShell;
+    
+    cleanPositiveCommands();
+    cleanNegativeCommand();
+    
+    currentCommands = new CommandCollection();
+
+    if (activeShell != null && Command.internal_getCommands(activeShell).length > 0) {
+        currentCommands.addCommand(Command.internal_getCommands(activeShell));
     }
 
+    // Determine where the commands go
+    if (currentCommands.getSize() > 0) {
+        Command[] add = currentCommands.getCommands(null);
+        updateCommandPositions(add);
+        placePositiveCommands();
+        placeNegativeCommand();
+    }
+}
+
+/**
+ * Called when a new Command is created
+ * 
+ * @param command
+ */
+public void commandAdded(Command command) {
+    if (isInFocusContext(command.control)) {
+        currentCommands.addCommand(command);
+        handleCommandListChange(command, null, currentCommands);
+    }
+}
+
+/**
+ * Called when a Command is disposed
+ * 
+ * @param command
+ */
+public void commandRemoved(Command command) {
+    if (command == defaultCommand)
+        defaultCommand = null;
+    if (isInFocusContext(command.control)) {
+        currentCommands.removeCommand(command);
+        handleCommandListChange(null, command, currentCommands);
+    }
+}
+
+/**
+ * Called when the Display is getting disposed.
+ */
+public void dispose() {
+    currentCommands = null;
+    display = null;
+    positiveKeyCommands = null;
+    negativeKeyCommand = null;
+    defaultCommand = null;
+    lastKnownActiveShell = null;
+}
+
+/**
+ * Called when a Command is set default
+ * 
+ * @param command
+ * @see Command#setDefaultCommand();
+ */
+public void setDefaultCommand(Command command) {
+    defaultCommand = command;
+    if (isInFocusContext(command.control)) {
+        handleDefaultCommandChange(command);
+    }
+}
+
+/**
+ * Returns the default command or null if there is none.
+ * 
+ * @return
+ * @see Command#isDefaultCommand()
+ */
+public Command getDefaultCommand() {
+    return defaultCommand;
+}
 
 
-    /**
-     * Called when the application changes the QMenuBar.
-     * This method does not handle the cases when the QMenuBar
-     * may change when the active top-level Shell changes. Since
-     * this does not cause a menu bar change on all platforms.
-     *
-     * @see org.eclipse.swt.widgets.Decorations#setMenuBar(Menu)
-     *
-     **/
-    public void menuBarChanged( Decorations decorations ){
+private boolean isInFocusContext(Control control) {
+    Display display = control.getDisplay();
+    Shell activeShell = display.getActiveShell();
+    return control == activeShell;
+}
+
+private void handleCommandListChange(Command added, Command removed, CommandCollection commands) {
+    cleanNegativeCommand();
+    cleanPositiveCommands();
+    updateCommandPositions(commands.getCommands(null));
+    placeNegativeCommand();
+    placePositiveCommands();
+}
 
-        if ( currentCommands == null || currentCommands.getSize() < 1 ) return;
-        // if the changed menu bar is not on the active shell ignore and leave it to focus change.
-        if (decorations.getShell() != decorations.getDisplay().getActiveShell() )return;
-        // Call internal_getOwnMenuBar because the menu bar can be set to null in Decorations and
-        // we may need to create the internal one.
-        int menuBarHandle = decorations.internal_getOwnMenuBar();
-
-        strategy.handleMenuBarChanged( menuBarHandle, currentCommands );
-    }
+private void handleDefaultCommandChange(Command defaultCommand) {
+    this.defaultCommand = defaultCommand;
+    cleanPositiveCommands();
+    placePositiveCommands();
+}
 
-    /**
-     * Called when a new Control gains focus.
-     *
-     * @see Control#qt_swt_event_focusWasGained()
-     */
-    public void focusedControlChanged(){
-        Control focusControl = display.getFocusControl();
-        if (focusControl == focusedControl) {
-            return;
+private void updateCommandPositions(Command[] commands) {
+    positiveKeyCommands = new Command[commands.length];
+    int positiveKeyIndex = 0;
+    for (int i = 0; i < commands.length; i++) {
+        Command cmd = commands[i];
+        if (cmd.isDefaultCommand()) {
+            defaultCommand = cmd;
+            continue;
         }
-        focusedControl = focusControl;
-
-        Shell activeShell = display.getActiveShell();
-        CommandCollection oldCollection = currentCommands;
-        currentCommands = new CommandCollection();
-
-        Control ctrl = focusControl;
-        while ( ctrl!= null && ctrl != activeShell ){
-            if ( Command.internal_getCommands(ctrl).length > 0 ){
-                currentCommands.addCommand( Command.internal_getCommands(ctrl) );
+        if (CommandUtils.isNegativeType(cmd.type)) {
+            if (negativeKeyCommand == null || negativeKeyCommand.isDisposed()) {
+                negativeKeyCommand = cmd;
+            } else if (negativeKeyCommand.getPriority() <= cmd.getPriority()) {
+                positiveKeyCommands[positiveKeyIndex] = negativeKeyCommand;
+                positiveKeyIndex++;
+                negativeKeyCommand = cmd;
+            } else {
+                positiveKeyCommands[positiveKeyIndex] = cmd;
+                positiveKeyIndex++;
             }
-            ctrl = ctrl.getParent();
+            continue;
         }
-        if (activeShell != null && Command.internal_getCommands(activeShell).length > 0 ){
-            currentCommands.addCommand( Command.internal_getCommands(activeShell) );
-        }
-
-        if (strategy != null) {
-            strategy.handleFocusChange(focusControl, oldCollection, currentCommands);
-        }
+        positiveKeyCommands[positiveKeyIndex] = cmd;
+        positiveKeyIndex++;
     }
+    if ((positiveKeyIndex) < positiveKeyCommands.length) {// needs to shrink
+        Command[] rightSized = new Command[positiveKeyIndex];
+        System.arraycopy(positiveKeyCommands, 0, rightSized, 0, rightSized.length);
+        positiveKeyCommands = rightSized;
+    }
+}
 
-    /**
-     * Called when a new Command is created
-     * @param command
-     */
-    public void commandAdded( Command command ){
-        if( isInFocusContext(command.control)){
-            currentCommands.addCommand(command);
-            strategy.handleCommandListChange(command, null, currentCommands);
+private void cleanPositiveCommands() {
+    boolean useBar = false;
+    if ((positiveKeyCommands != null && positiveKeyCommands.length > 1)
+        || (defaultCommand != null && positiveKeyCommands != null)) {
+        useBar = true;
+    }
+    if (defaultCommand != null && !defaultCommand.isDisposed()
+        && !defaultCommand.control.isDisposed()) {
+        if (useBar) {
+            OS.QWidget_removeAction(defaultCommand.control.getShell().internal_getOwnMenuBar(),
+                topHandle(defaultCommand));
+        } else {
+            OS.QWidget_removeAction(topHandle(defaultCommand.control), topHandle(defaultCommand));
         }
     }
-
-    /**
-     * Called when a Command is disposed
-     * @param command
-     */
-    public void commandRemoved( Command command ){
-        if ( command == defaultCommand ) defaultCommand = null;
-        if (isInFocusContext(command.control)){
-            currentCommands.removeCommand( command );
-            strategy.handleCommandListChange(null, command, currentCommands);
-        }
-    }
+    if (positiveKeyCommands != null) {
+        for (int i = 0; i < positiveKeyCommands.length; i++) {
+            Command cmd = positiveKeyCommands[i];
+            if (cmd == null || cmd.isDisposed() || cmd.control.isDisposed()) {
+                continue;
+            }
+            int handle = 0;
+            if (useBar) {
+                handle = cmd.control.getShell().internal_getOwnMenuBar();
+            } else {
+                handle = topHandle(positiveKeyCommands[0].control);
+            }
+            OS.QWidget_removeAction(handle, topHandle(cmd));
 
-    /**
-     * Called when the Display is getting disposed.
-     */
-    public void dispose(){
-        strategy.dispose();
-        strategy = null;
-        currentCommands = null;
-        display = null;
-    }
-    /**
-     * Called when a Command is set default
-     *
-     * @param command
-     * @see Command#setDefaultCommand();
-     */
-    public void setDefaultCommand(Command command ){
-        defaultCommand = command;
-        if(isInFocusContext(command.control)){
-            strategy.handleDefaultCommandChange(command);
         }
     }
+}
 
-    /**
-     * Returns the default command or null if there is none.
-     *
-     * @return
-     * @see Command#isDefaultCommand()
-     */
-    public Command getDefaultCommand(){
-        return defaultCommand;
+private void cleanNegativeCommand() {
+    if (negativeKeyCommand != null && !negativeKeyCommand.isDisposed()
+        && !negativeKeyCommand.control.isDisposed()) {
+        OS.QWidget_removeAction(topHandle(negativeKeyCommand.control),
+            topHandle(negativeKeyCommand));
     }
+}
 
-    /**
-     * Sets a new {@link CommandPresentationStrategy}. It also disposes to old one.
-     *
-     * @param commandPresentationStrategy
-     */
-    public void setPresentationStrategy( CommandPresentationStrategy commandPresentationStrategy ){
-        CommandPresentationStrategy oldStrategy = strategy;
-        strategy = commandPresentationStrategy;
-        if (oldStrategy != null ){
-            oldStrategy.dispose();
+private void placeNegativeCommand() {
+    if (negativeKeyCommand != null) {
+        OS.QWidget_addAction(Internal_PackageSupport.topHandle(negativeKeyCommand.control),
+            topHandle(negativeKeyCommand));
+    }
+}
+
+private void placePositiveCommands() {
+    if (defaultCommand != null) {
+        int defaultCmdHandle = topHandle(defaultCommand);
+        if (positiveKeyCommands != null) {
+            OS.QMenuBar_addAction(defaultCommand.control.getShell().internal_getOwnMenuBar(),
+                defaultCmdHandle);
+        } else {
+            OS.QWidget_addAction(Internal_PackageSupport.topHandle(defaultCommand.control),
+                defaultCmdHandle);
         }
     }
+    if (positiveKeyCommands != null) {
+        if (positiveKeyCommands.length == 1 && defaultCommand == null) {
+            OS.QWidget_addAction(Internal_PackageSupport.topHandle(positiveKeyCommands[0].control),
+                topHandle(positiveKeyCommands[0]));
+        } else {
+            CommandUtils.sort(positiveKeyCommands);
+            for (int i = 0; i < positiveKeyCommands.length; i++) {
+                OS.QMenuBar_addAction(positiveKeyCommands[i].control.getShell()
+                    .internal_getOwnMenuBar(), topHandle(positiveKeyCommands[i]));
+            }
+        }
+    }
+}
 
-    private boolean isInFocusContext(Control control){
-        Display display = control.getDisplay();
-        Shell activeShell = display.getActiveShell();
-        Control focused = display.getFocusControl();
-        if( focused == null )return false;
-        if(control.getShell() != activeShell) return false;
-        if( control == focused ) return true;
-        return isFocusAncestor(focused, control);
-    }
+private void handleMenuBarChanged(int newMenuBar, CommandCollection commands) {
+    placePositiveCommands();
+}
 
-    private boolean isFocusAncestor(Control node, Control parent){
-        Control nodeParent = node.getParent();
-        if( nodeParent == parent )return true;
-        if (nodeParent == null || nodeParent == node.getShell() )return false;
-        return isFocusAncestor(nodeParent, parent);
-    }
+private static final int topHandle(Widget w) {
+    return Internal_PackageSupport.topHandle(w);
+}
 
 }
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/CommandPresentationStrategy.java	Fri Jun 11 13:33:44 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,92 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Nokia Corporation - initial implementation
- *******************************************************************************/
-package org.eclipse.swt.internal.qt;
-
-import org.eclipse.ercp.swt.mobile.Command;
-import org.eclipse.swt.internal.qt.CommandArranger.CommandCollection;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-/**
- * This is the interface that all the {@link Command} presentation is delegated to.
- * The implementations of this abstract class are expected to provide the
- * presentation logic for their respective uses.
- *
- * The implementations of this class can be specific to a platform, toolkit or a
- * combination of factors. Refer to {@link CommandArranger} on the loading mechanism
- * of the {@link CommandPresentationStrategy} implementation.
- *
- * Since the implementations can be specific to a toolkit implementations are expected to
- * handle the following.
- * <ul>
- * 	<li>Ordering of the {@link Command}s</li>
- * 	<li>Positioning {@link Command}s to correct soft keys or menus so that they are accessible</li>
- * </ul>
- *
- */
-public abstract class CommandPresentationStrategy {
-
-
-    /**
-     * CommandArranger delegates to this method when the currently active menu bar has changed.
-     * This does not include the cases where menu bar changes due to active window change which
-     * causes the menu bar to change on some platforms.
-     *
-     * @param newMenuBar
-     * @param commands
-     */
-    protected abstract void handleMenuBarChanged( int newMenuBar, CommandCollection commands );
-
-    /**
-     * CommandArranger delegates to this method when the currently focused control has changed.
-     * On some platforms a focus change can also be accompanied with a menu bar change. Such menu bar
-     * changes due to active window change must be handled here.
-     *
-     * @param focused-currently focused control
-     * @param oldCommands-the commands of the previous focus context
-     * @param commands-of the current focus context
-     *
-     * @see CommandArranger#focusedControlChanged()
-     */
-    protected abstract void handleFocusChange( Control focused, CommandCollection oldCommands, CommandCollection commands );
-
-    /**
-     * CommandArranger delegates to this method, an added or removed Command is in the current
-     * focus context and needs to be presented. In other words, this method does not get notification of
-     * all added or removed Commands but only those that has some impact on the representation.
-     *
-     * @param added Command
-     * @param removed Command
-     * @param commands including the added/removed command
-     *
-     * @see CommandArranger#commandAdded(Command)
-     * @see CommandArranger#commandRemoved(Command)
-     */
-    protected abstract void handleCommandListChange(Command added, Command removed, CommandCollection commands );
-
-    /**
-     * CommandArranger reports the default command changes to this method. However implementations
-     * should take into account default commands on focus changes.
-     *
-     * @param defaultCommand
-     */
-    protected abstract void handleDefaultCommandChange( Command defaultCommand );
-    /**
-     * This method is called when the CommandArranger is disposed as part of
-     * the disposal of the {@link Display} or
-     * if it is replaced by a new one on the CommandArranger.
-     *
-     * On Display dispose, the method is called after all the Shells are disposed but before the Display is cleaned.
-     *
-     * @see CommandArranger#setPresentationStrategy(CommandPresentationStrategy)
-     */
-    protected abstract void dispose();
-
-}
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/DesktopCommandPresentationStrategy.java	Fri Jun 11 13:33:44 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,115 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Nokia Corporation - initial implementation
- *******************************************************************************/
-package org.eclipse.swt.internal.qt;
-
-import org.eclipse.ercp.swt.mobile.Command;
-import org.eclipse.swt.internal.qt.CommandArranger.CommandCollection;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Internal_PackageSupport;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Widget;
-
-public class DesktopCommandPresentationStrategy extends
-        CommandPresentationStrategy {
-
-    private int commandsMenu;
-    private int commandsMenuAction;
-    private Control previousFocus;
-
-    public DesktopCommandPresentationStrategy(){
-        super();
-        initCommandsMenu();
-    }
-
-    protected void handleCommandListChange(Command added, Command removed,
-            CommandCollection commands) {
-
-        Shell shell = null;
-        if ( added != null ){
-            shell = added.control.getShell();
-            OS.QMenu_addAction(commandsMenu, handle(added) );
-        }
-        else{
-            shell = removed.control.getShell();
-            OS.QWidget_removeAction(commandsMenu, handle(removed) );
-        }
-
-        OS.QMenuBar_addAction(shell.internal_getOwnMenuBar(), commandsMenuAction );
-    }
-
-    protected void handleFocusChange(Control focused,
-            CommandCollection oldCommands, CommandCollection commands) {
-        Shell shell = focused.getShell();
-
-        if( oldCommands != null && oldCommands.getSize() >0 ){
-            Command[] remove = oldCommands.getCommands(null);
-            for(int i=0; i< remove.length; i++){
-                if (previousFocus!= null && remove[i].control == previousFocus){
-                    OS.QWidget_removeAction(handle(previousFocus), handle(remove[i]));
-                }else{
-                    OS.QWidget_removeAction(commandsMenu, handle(remove[i]));
-                }
-            }
-        }
-
-        if ( commands != null && commands.getSize() > 0 ){
-            OS.QMenuBar_addAction(shell.internal_getOwnMenuBar(), commandsMenuAction );
-            Command[] add = commands.getCommands(null);
-            CommandUtils.sort(add);
-            for(int i=0 ; i < add.length; i++){
-                if ( add[i].control != focused ){
-                    OS.QMenu_addAction( commandsMenu, handle(add[i]) );
-                }
-                else{
-                    OS.QWidget_addAction(handle(focused), handle(add[i]));
-                }
-                if (add[i].isDefaultCommand() )OS.QMenu_setDefaultAction( commandsMenu, handle(add[i]) );
-            }
-        }
-        //Store for use next time.
-        previousFocus=focused;
-    }
-
-    protected void handleMenuBarChanged(int newMenuBar,
-            CommandCollection commands) {
-        OS.QMenuBar_addAction(newMenuBar, commandsMenuAction );
-    }
-
-
-    protected void dispose() {
-        if (commandsMenu != 0 ){
-            QObjectDeleteWrapper.deleteSafely( commandsMenu );
-            commandsMenu = 0;
-        }
-        if (commandsMenuAction != 0 ){
-            QObjectDeleteWrapper.deleteSafely( commandsMenuAction );
-            commandsMenuAction = 0;
-        }
-    }
-
-    private void initCommandsMenu (){
-        commandsMenuAction = OS.QAction_new( 0 );
-        OS.QAction_setText( commandsMenuAction, "Commands");
-        commandsMenu = OS.QMenu_new( 0 );
-        OS.QAction_setMenu( commandsMenuAction, commandsMenu );
-    }
-
-    protected void handleDefaultCommandChange(Command defaultCommand) {
-        int handle = 0;
-        if (defaultCommand != null ) handle = handle(defaultCommand);
-        OS.QMenu_setDefaultAction( commandsMenu, handle );
-    }
-
-
-    private final int handle(Widget w) {
-        return Internal_PackageSupport.handle(w);
-    }
-}
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/graphics/GraphicsContext.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/graphics/GraphicsContext.java	Wed Jun 23 18:07:10 2010 +0300
@@ -340,7 +340,7 @@
      */
     public void bindTarget(org.eclipse.swt.widgets.Control target) {
         if(target == null) {
-        	throw new NullPointerException("target is null");
+            throw new NullPointerException("target is null");
         }
         if(target.isDisposed())
             throw new IllegalArgumentException("Target already disposed");
@@ -361,7 +361,7 @@
      */
     public void bindTarget(org.eclipse.swt.widgets.Display target) {
         if(target == null) {
-        	throw new NullPointerException("target is null");
+            throw new NullPointerException("target is null");
         }
         if(target.isDisposed())
             throw new IllegalArgumentException("Target already disposed");
@@ -383,7 +383,7 @@
      */
     public void bindTarget(org.eclipse.swt.internal.qt.graphics.Image target) {
         if(target == null) {
-        	throw new NullPointerException("target is null");
+            throw new NullPointerException("target is null");
         }
         if(target.isDisposed())
             throw new IllegalArgumentException("Target already disposed");
@@ -406,10 +406,10 @@
      */
     public void bindTarget(org.eclipse.swt.internal.qt.graphics.NativeCommandBuffer target, org.eclipse.swt.widgets.Control flushTarget) {
         if(target == null) {
-        	throw new NullPointerException("target is null");
+            throw new NullPointerException("target is null");
         }
         if(flushTarget == null) {
-        	throw new NullPointerException("flushTarget is null");
+            throw new NullPointerException("flushTarget is null");
         }
         if(target.isDisposed())
             throw new IllegalArgumentException("Target already disposed");
@@ -444,7 +444,7 @@
      */
     public void bindTarget(org.eclipse.swt.internal.qt.graphics.NativeCommandBuffer target) {
         if(target == null) {
-        	throw new NullPointerException("Target is null");
+            throw new NullPointerException("Target is null");
         }
         if(target.isDisposed()) {
             throw new IllegalArgumentException("target already disposed");
@@ -464,12 +464,12 @@
      */
     public void bindTarget(org.eclipse.swt.internal.qt.graphics.WindowSurface target) {
         if(target == null) {
-        	throw new NullPointerException("target is null");
+            throw new NullPointerException("target is null");
         }
-    	if(target.isDisposed()) {
+        if(target.isDisposed()) {
             throw new IllegalArgumentException("target already disposed");
         }
-    	bindTarget(target, TARGET_WINDOWSURFACE, target.handle, 0); 
+        bindTarget(target, TARGET_WINDOWSURFACE, target.handle, 0); 
     }
     
     /**
@@ -560,6 +560,10 @@
         }
         // if buffer does not contain data do nothing
         if(buffer.containsData()) {
+            // Notify the image that it will get modified. This affects any existing shallow copies of it. 
+            if(targetData.type == GraphicsContext.TARGET_IMAGE) {
+                ((Image)targetData.target).pixelDataModified();
+            }
             processBuffer(buffer);
         }
     }
@@ -1149,11 +1153,11 @@
      * @throws NullPointerException if surface is null
      */
     public void drawWindowSurface(WindowSurface surface, int x, int y, int width, int height) {
-    	if(surface == null) 
-    	{
-    	    throw new NullPointerException("surface is null");
-    	}
-    	OS.graphicsContext_drawWindowSurface(handle, surface.handle, x, y, width, height);
+        if(surface == null) 
+        {
+            throw new NullPointerException("surface is null");
+        }
+        OS.graphicsContext_drawWindowSurface(handle, surface.handle, x, y, width, height);
     }
     
     
@@ -2094,19 +2098,21 @@
                         }
                         case JavaCommandBuffer.OP_DRAWIMAGE1:
                         {
-                            Image img = (Image)images.elementAt(imageCount++);
+                            Image img = (Image)images.elementAt(imageCount);
+                            images.setElementAt(null, imageCount++);
                             OS.graphicsContext_drawImage(handle, 
                                                          img.handle, 
                                                          intParams[i++], 
                                                          intParams[i++]);
                             // As we made a shallow copy of the image in buffer
                             // its safe to delete that here
-                            img.dispose(); 
+                            img.freeCommandBufferCopy();
                             break;
                         }
                         case JavaCommandBuffer.OP_DRAWIMAGE2:
                         {
-                            Image img = (Image)images.elementAt(imageCount++);  
+                            Image img = (Image)images.elementAt(imageCount);
+                            images.setElementAt(null, imageCount++);
                             OS.graphicsContext_drawImage(handle, 
                                                          img.handle, 
                                                          intParams[i++], 
@@ -2120,7 +2126,7 @@
                                                          intParams[i++]);
                             // As we made a shallow copy of the image in buffer
                             // its safe to delete that here
-                            img.dispose(); 
+                            img.freeCommandBufferCopy();
                             break;
                         }
                         case JavaCommandBuffer.OP_DRAWFOCUS:
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/graphics/Image.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/graphics/Image.java	Wed Jun 23 18:07:10 2010 +0300
@@ -12,6 +12,8 @@
 
 
 import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Internal_PackageSupport;
 
 public final class Image {
 
@@ -128,6 +130,17 @@
     // GraphicsContext bound to this image
     private GraphicsContext boundingGc = null;
 
+    // Image manages copies of itself for command buffering of drawImage and drawRegion. 
+    private Image commandBufferCopy;
+    private int commandBufferCopyRefs;
+    private boolean commandBufferCopyDirty;
+
+    // A copy-constructed Image remembers what it's a copy of
+    private Image whatAmIACopyOf;
+
+    private Image() {
+    }
+    
     /**
      * Constructs new image with given native image handle.
      *
@@ -135,7 +148,7 @@
      * @throws OutOfMemoryError if imgHandlde is invalid
      */
     Image(int imgHandle) {
-    	Utils.validateUiThread();
+        Utils.validateUiThread();
         // validate handle
         if(imgHandle == 0) {
             throw new OutOfMemoryError();
@@ -218,10 +231,7 @@
         if (sourceImage == null) {
             throw new NullPointerException("img is null");
         }
-        // Construct image in native side and store the handle
-        handle = OS.image_create(sourceImage.handle, x, y, width, height); // may throw outOfMemoryError
-        // set dimensions
-        updateSize();
+        createCopy(sourceImage, x, y, width, height);
     }
 
     /**
@@ -269,7 +279,7 @@
      * releaseTarget() of binding gc is called automatically.
      */
     public void dispose() {
-    	Utils.validateUiThread();
+        Utils.validateUiThread();
         if (handle != 0 || !disposed) {
             // If this instance is being disposed while
             // gc is still bound, release binding before disposing.
@@ -285,6 +295,8 @@
             // it is created for this instance
             SurfaceCache.getInstance().deleteSurface(this);
 
+            whatAmIACopyOf = null;
+
             // dispose native peer
             OS.image_dispose(handle);
             handle = 0;
@@ -308,10 +320,10 @@
      * @return image format
      */
     public int getFormat() {
-    	checkState();
-    	if (pixelFormat == FORMAT_IMG_NONE) {
-    		pixelFormat = OS.image_getFormat(handle);
-    	}
+        checkState();
+        if (pixelFormat == FORMAT_IMG_NONE) {
+            pixelFormat = OS.image_getFormat(handle);
+        }
         return pixelFormat;
     }
     /**
@@ -593,7 +605,7 @@
      */
     public int getHandle()
     {
-    	checkState();
+        checkState();
         return handle;
     }
 
@@ -603,7 +615,7 @@
      */
     synchronized public int getNativePixmapHandle()
     {
-    	checkState();
+        checkState();
         if(pixmapHandle == 0)
         {
             // In the current implementation this will return
@@ -621,7 +633,7 @@
      * @return New object
      */
     public ImageData getImageData() {
-    	checkState();
+        checkState();
         return OS.image_getImageData(handle);
     }
 
@@ -629,7 +641,7 @@
      * Private helper to check the state of the current instance.
      */
     private void checkState() {
-    	Utils.validateUiThread();
+        Utils.validateUiThread();
         if(disposed) {
             throw new IllegalStateException("Image already disposed");
         }
@@ -657,4 +669,97 @@
         int imageHandle = OS.image_create(imageData);
         return new Image(imageHandle);
     }
+
+    /**
+     * Obtains a shallow copy of this Image to be placed in the command buffer.
+     * The returned copy must be marked as free by calling freeCommandBufferCopy
+     * when it's no longer needed.
+     * 
+     * @return The copy
+     */
+    Image getCommandBufferCopy() {
+        if(commandBufferCopyDirty) {
+            return copyInUIThread();
+        }
+        if(commandBufferCopy == null) {
+            commandBufferCopyDirty = false;
+            commandBufferCopy = copyInUIThread();
+            commandBufferCopyRefs = 0;
+        }
+        commandBufferCopyRefs++;
+        return commandBufferCopy;
+    }
+
+    /**
+     * Marks a copy returned from getCommandBufferCopy as free.
+     * 
+     * @param image
+     *            The image returned from getShallowCopy.
+     */
+    void freeCommandBufferCopy() {
+        if(disposed) {
+            throw new RuntimeException("Image referenced by command buffer has been disposed");
+        }
+        if(whatAmIACopyOf == null) {
+            throw new RuntimeException("Image not a copy");
+        }
+        whatAmIACopyOf.freeCommandBufferCopyOfMe(this);
+    }
+    
+    /**
+     * Tells to the Image that it has been modified and any copies returned from
+     * getShallowCopy() have thus become deep copies.
+     */
+    void pixelDataModified() {
+        if(commandBufferCopy != null) {
+            commandBufferCopyDirty = true;
+        }
+    }
+    
+    /*
+     * Copy-construction
+     */
+    private void createCopy(Image sourceImage, int x, int y, int width, int height) {
+        // Construct image in native side and store the handle
+        handle = OS.image_create(sourceImage.handle, x, y, width, height); // may throw outOfMemoryError
+        // set dimensions
+        updateSize();
+        whatAmIACopyOf = sourceImage;
+    }
+
+    /*
+     * Called on the Image when a copy it has returned from getCommandBufferCopy
+     * is being freed by a call to freeCommandBufferCopy. The Image may be
+     * disposed at this point while the copy is not.
+     */
+    private void freeCommandBufferCopyOfMe(Image copy) {
+        if(copy != commandBufferCopy) {
+            throw new RuntimeException("Copy doesn't exist, freed multiple times?");
+        } else {
+            commandBufferCopyRefs--;
+            if(commandBufferCopyRefs <= 0) {
+                commandBufferCopy.dispose();
+                commandBufferCopy = null;
+            }
+        }
+    }
+    
+    /*
+     * Creates a shallow copy of the Image in the UI thread. 
+     */
+    private Image copyInUIThread() {
+        Display d = Internal_PackageSupport.getDisplayInstance();
+        final Image copy = new Image();
+        if(d != null) {
+            d.syncExec(new Runnable() {
+                public void run() {
+                    copy.createCopy(Image.this, 0, 0, 0, 0);
+                }
+            });
+        }
+        if(copy.handle == 0) {
+            return null;
+        }
+        return copy;
+    }
 }
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/graphics/JavaCommandBuffer.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/graphics/JavaCommandBuffer.java	Wed Jun 23 18:07:10 2010 +0300
@@ -26,533 +26,533 @@
  */
 public final class JavaCommandBuffer {
 
-	// All collected drawing operations and their parameters
-	private int[] intParams;
-	private int intCount;
-	private StringBuffer strParams;
+    // All collected drawing operations and their parameters
+    private int[] intParams;
+    private int intCount;
+    private StringBuffer strParams;
 
-	// Holder for images
-	private Vector images;
+    // Holder for images
+    private Vector images;
 
-	// holder for rgbData
-	private Vector rgbData;
+    // holder for rgbData
+    private Vector rgbData;
 
-	// This flag is indicates if this buffer is bound by some GraphicsContext
-	private boolean bound;
+    // This flag is indicates if this buffer is bound by some GraphicsContext
+    private boolean bound;
 
     // This flag indicates if this buffer is empty or not
-	private boolean containsData;
-	
-	// This flag indicates if this buffer has any draw commands in it
-	private boolean containsPrimitiveData;
+    private boolean containsData;
+    
+    // This flag indicates if this buffer has any draw commands in it
+    private boolean containsPrimitiveData;
 
     // Memory management configuration constants
-	private static final int INT_BUF_GRANULARITY     	 = 10;
-	private static final int INT_BUF_INITIAL_SIZE    	 = 250;
-	private static final int IMAGE_BUF_INITIAL_SIZE 	 = 3;
-	private static final int IMAGE_BUF_GRANULARITY  	 = 2;
-	private static final int STRING_BUFFER_INITIAL_SIZE = 10;
+    private static final int INT_BUF_GRANULARITY         = 10;
+    private static final int INT_BUF_INITIAL_SIZE        = 250;
+    private static final int IMAGE_BUF_INITIAL_SIZE      = 3;
+    private static final int IMAGE_BUF_GRANULARITY       = 2;
+    private static final int STRING_BUFFER_INITIAL_SIZE = 10;
 
-	// Prefixes for different categories of op codes, stored in MSB
-	final static int DRAW_PREFIX = 0;
-	final static int FILL_PREFIX = 1;
-	final static int SET_PREFIX = 2;
-	final static int MISC_PREFIX = 3;
+    // Prefixes for different categories of op codes, stored in MSB
+    final static int DRAW_PREFIX = 0;
+    final static int FILL_PREFIX = 1;
+    final static int SET_PREFIX = 2;
+    final static int MISC_PREFIX = 3;
 
-	// Unique operation codes for all the gc operations that can be buffered.
-	static final int OP_DRAWARC            = ((DRAW_PREFIX << 24) | 1);
-	static final int OP_DRAWFOCUS          = ((DRAW_PREFIX << 24) | 2);
-	static final int OP_DRAWIMAGE1         = ((DRAW_PREFIX << 24) | 3);
-	static final int OP_DRAWIMAGE2         = ((DRAW_PREFIX << 24) | 4);
-	static final int OP_DRAWLINE           = ((DRAW_PREFIX << 24) | 5);
-	static final int OP_DRAWELLIPSE        = ((DRAW_PREFIX << 24) | 6);
-	static final int OP_DRAWPOINT          = ((DRAW_PREFIX << 24) | 7);
-	static final int OP_DRAWPOLYGON        = ((DRAW_PREFIX << 24) | 8);
-	static final int OP_DRAWPOLYLINE       = ((DRAW_PREFIX << 24) | 9);
-	static final int OP_DRAWRECT           = ((DRAW_PREFIX << 24) | 10);
-	static final int OP_DRAWRGB_INT        = ((DRAW_PREFIX << 24) | 11);
-	static final int OP_DRAWRGB_BYTE       = ((DRAW_PREFIX << 24) | 12);
-	static final int OP_DRAWRGB_SHORT      = ((DRAW_PREFIX << 24) | 13);
-	static final int OP_DRAWROUNDRECT      = ((DRAW_PREFIX << 24) | 14);
-	static final int OP_DRAWSTRING         = ((DRAW_PREFIX << 24) | 15);
-	static final int OP_FILLARC            = ((FILL_PREFIX << 24) | 16);
-	static final int OP_FILLGRADIENTRECT   = ((FILL_PREFIX << 24) | 17);
-	static final int OP_FILLELLIPSE        = ((FILL_PREFIX << 24) | 18);
-	static final int OP_FILLPOLYGON        = ((FILL_PREFIX << 24) | 19);
-	static final int OP_FILLRECT           = ((FILL_PREFIX << 24) | 20);
-	static final int OP_FILLROUNDRECT      = ((FILL_PREFIX << 24) | 21);
-	static final int OP_SETBACKGROUNDALPHA = ((SET_PREFIX << 24) | 22);
-	static final int OP_SETBACKGROUNDCOLOR = ((SET_PREFIX << 24) | 23);
-	static final int OP_SETBLENDINGMODE    = ((SET_PREFIX << 24) | 24);
-	static final int OP_SETCLIP            = ((SET_PREFIX << 24) | 25);
-	static final int OP_CANCELCLIPPING     = ((SET_PREFIX << 24) | 26);
-	static final int OP_SETFONT            = ((SET_PREFIX << 24) | 27);
-	static final int OP_SETFOREGROUNDALPHA = ((SET_PREFIX << 24) | 28);
-	static final int OP_SETFOREGROUNDCOLOR = ((SET_PREFIX << 24) | 29);
-	static final int OP_SETSTROKESTYLE     = ((SET_PREFIX << 24) | 30);
-	static final int OP_SETSTROKEWIDTH     = ((SET_PREFIX << 24) | 31);
-	static final int OP_TRANSLATE          = ((MISC_PREFIX << 24) | 32);
-	static final int OP_SCALE              = ((MISC_PREFIX << 24) | 33);
-	static final int OP_RESETTRANSFORM     = ((MISC_PREFIX << 24) | 34);
-	static final int OP_COPYAREA1          = ((MISC_PREFIX << 24) | 35);
-	static final int OP_COPYAREA2          = ((MISC_PREFIX << 24) | 36);
+    // Unique operation codes for all the gc operations that can be buffered.
+    static final int OP_DRAWARC            = ((DRAW_PREFIX << 24) | 1);
+    static final int OP_DRAWFOCUS          = ((DRAW_PREFIX << 24) | 2);
+    static final int OP_DRAWIMAGE1         = ((DRAW_PREFIX << 24) | 3);
+    static final int OP_DRAWIMAGE2         = ((DRAW_PREFIX << 24) | 4);
+    static final int OP_DRAWLINE           = ((DRAW_PREFIX << 24) | 5);
+    static final int OP_DRAWELLIPSE        = ((DRAW_PREFIX << 24) | 6);
+    static final int OP_DRAWPOINT          = ((DRAW_PREFIX << 24) | 7);
+    static final int OP_DRAWPOLYGON        = ((DRAW_PREFIX << 24) | 8);
+    static final int OP_DRAWPOLYLINE       = ((DRAW_PREFIX << 24) | 9);
+    static final int OP_DRAWRECT           = ((DRAW_PREFIX << 24) | 10);
+    static final int OP_DRAWRGB_INT        = ((DRAW_PREFIX << 24) | 11);
+    static final int OP_DRAWRGB_BYTE       = ((DRAW_PREFIX << 24) | 12);
+    static final int OP_DRAWRGB_SHORT      = ((DRAW_PREFIX << 24) | 13);
+    static final int OP_DRAWROUNDRECT      = ((DRAW_PREFIX << 24) | 14);
+    static final int OP_DRAWSTRING         = ((DRAW_PREFIX << 24) | 15);
+    static final int OP_FILLARC            = ((FILL_PREFIX << 24) | 16);
+    static final int OP_FILLGRADIENTRECT   = ((FILL_PREFIX << 24) | 17);
+    static final int OP_FILLELLIPSE        = ((FILL_PREFIX << 24) | 18);
+    static final int OP_FILLPOLYGON        = ((FILL_PREFIX << 24) | 19);
+    static final int OP_FILLRECT           = ((FILL_PREFIX << 24) | 20);
+    static final int OP_FILLROUNDRECT      = ((FILL_PREFIX << 24) | 21);
+    static final int OP_SETBACKGROUNDALPHA = ((SET_PREFIX << 24) | 22);
+    static final int OP_SETBACKGROUNDCOLOR = ((SET_PREFIX << 24) | 23);
+    static final int OP_SETBLENDINGMODE    = ((SET_PREFIX << 24) | 24);
+    static final int OP_SETCLIP            = ((SET_PREFIX << 24) | 25);
+    static final int OP_CANCELCLIPPING     = ((SET_PREFIX << 24) | 26);
+    static final int OP_SETFONT            = ((SET_PREFIX << 24) | 27);
+    static final int OP_SETFOREGROUNDALPHA = ((SET_PREFIX << 24) | 28);
+    static final int OP_SETFOREGROUNDCOLOR = ((SET_PREFIX << 24) | 29);
+    static final int OP_SETSTROKESTYLE     = ((SET_PREFIX << 24) | 30);
+    static final int OP_SETSTROKEWIDTH     = ((SET_PREFIX << 24) | 31);
+    static final int OP_TRANSLATE          = ((MISC_PREFIX << 24) | 32);
+    static final int OP_SCALE              = ((MISC_PREFIX << 24) | 33);
+    static final int OP_RESETTRANSFORM     = ((MISC_PREFIX << 24) | 34);
+    static final int OP_COPYAREA1          = ((MISC_PREFIX << 24) | 35);
+    static final int OP_COPYAREA2          = ((MISC_PREFIX << 24) | 36);
 
-	/**
-	 * Constructs empty command buffer with defined buffer sizes.
-	 */
-	public JavaCommandBuffer() {
-		intParams = new int[INT_BUF_INITIAL_SIZE];
-		strParams = new StringBuffer(STRING_BUFFER_INITIAL_SIZE);
-		images = new Vector(IMAGE_BUF_INITIAL_SIZE, IMAGE_BUF_GRANULARITY);
-		rgbData = new Vector(IMAGE_BUF_INITIAL_SIZE, IMAGE_BUF_GRANULARITY);
-	}
+    /**
+     * Constructs empty command buffer with defined buffer sizes.
+     */
+    public JavaCommandBuffer() {
+        intParams = new int[INT_BUF_INITIAL_SIZE];
+        strParams = new StringBuffer(STRING_BUFFER_INITIAL_SIZE);
+        images = new Vector(IMAGE_BUF_INITIAL_SIZE, IMAGE_BUF_GRANULARITY);
+        rgbData = new Vector(IMAGE_BUF_INITIAL_SIZE, IMAGE_BUF_GRANULARITY);
+    }
 
-	/**
-	 * Resets the buffer, i.e. removes all recorded commands and related data. The integer array containing
-	 * the actual operation codes is not deleted, only the index pointer is rested, thus the memory consumption of that is not freed.
-	 * CommandBuffer can be reseted only if it is not bound by any GraphicsContext
-	 * @throws IllegalStateException if this CommandBuffer is bound while calling reset
-	 */
-	public void reset() {
-		if(bound) {
-			throw new IllegalStateException("CommandBuffer is still bound by gc");
-		}
-		intCount = 0;
-		strParams.setLength(0);
+    /**
+     * Resets the buffer, i.e. removes all recorded commands and related data. The integer array containing
+     * the actual operation codes is not deleted, only the index pointer is rested, thus the memory consumption of that is not freed.
+     * CommandBuffer can be reseted only if it is not bound by any GraphicsContext
+     * @throws IllegalStateException if this CommandBuffer is bound while calling reset
+     */
+    public void reset() {
+        if(bound) {
+            throw new IllegalStateException("CommandBuffer is still bound by gc");
+        }
+        intCount = 0;
+        strParams.setLength(0);
 
-		Enumeration allImages = images.elements();
-		while(allImages.hasMoreElements()) {
-			Image image = (Image)allImages.nextElement();
-			if(!image.isDisposed()) {
-				image.dispose();
-			}
-		}
-		images.removeAllElements();
-		rgbData.removeAllElements();
-		containsData = false;
-		containsPrimitiveData = false;
-	}
+        Enumeration allImages = images.elements();
+        while(allImages.hasMoreElements()) {
+            Image image = (Image)allImages.nextElement();
+            if(image != null) {
+                image.freeCommandBufferCopy();
+            }
+        }
+        images.removeAllElements();
+        rgbData.removeAllElements();
+        containsData = false;
+        containsPrimitiveData = false;
+    }
 
-	/**
-	 * Checks that does this buffer contain any commands
-	 * @return true if any command has been written to buffer otherwise false
-	 */
-	public boolean containsData() {
-		return containsData;
-	}
-	
-	/**
-	 * Checks that does this buffer contain any draw commands, i.e. any setters etc. 
-	 * that does to cause any pixels to be rendered are ignored 
-	 * @return true if any draw command has been written to buffer otherwise false
-	 */
-	public boolean containsDrawnPrimitives() {
-		return containsPrimitiveData;
-	}
-	
-	/**
-	 * Binds this buffer
-	 */
-	void bind() {
-		bound = true;
-	}
+    /**
+     * Checks that does this buffer contain any commands
+     * @return true if any command has been written to buffer otherwise false
+     */
+    public boolean containsData() {
+        return containsData;
+    }
+    
+    /**
+     * Checks that does this buffer contain any draw commands, i.e. any setters etc. 
+     * that does to cause any pixels to be rendered are ignored 
+     * @return true if any draw command has been written to buffer otherwise false
+     */
+    public boolean containsDrawnPrimitives() {
+        return containsPrimitiveData;
+    }
+    
+    /**
+     * Binds this buffer
+     */
+    void bind() {
+        bound = true;
+    }
 
-	/**
-	 * Provides the binding status of this buffer
-	 * @return true if this buffer has been already bound otherwise false
-	 */
-	boolean isBound() {
-		return bound;
-	}
+    /**
+     * Provides the binding status of this buffer
+     * @return true if this buffer has been already bound otherwise false
+     */
+    boolean isBound() {
+        return bound;
+    }
 
-	/**
-	 * Releases this buffer, i.e. it can be bound by some other GraphicsContext
-	 */
-	void release() {
-		bound = false;
-	}
+    /**
+     * Releases this buffer, i.e. it can be bound by some other GraphicsContext
+     */
+    void release() {
+        bound = false;
+    }
 
-	/**
-	 * Writes an integer to given array.
-	 * @param item The item to be added to the array
-	 * @param array The array where to append given item
-	 * @param elementsUsed The size of slots used in given array
-	 * @param granularity The granularity used if the array needs to be enlarged
-	 * @return Array containing the added item
-	 */
-	private int[] writeToArray(int item, int[] array, int elementsUsed, int granularity) {
-		if( array.length < elementsUsed + 1) {
-			int[] src = array;
-			int[] dst = new int[array.length + granularity];
-			System.arraycopy(src, 0, dst, 0, src.length);
-			array = dst;
-		}
-		array[elementsUsed] = item;
-		return array;
-	}
+    /**
+     * Writes an integer to given array.
+     * @param item The item to be added to the array
+     * @param array The array where to append given item
+     * @param elementsUsed The size of slots used in given array
+     * @param granularity The granularity used if the array needs to be enlarged
+     * @return Array containing the added item
+     */
+    private int[] writeToArray(int item, int[] array, int elementsUsed, int granularity) {
+        if( array.length < elementsUsed + 1) {
+            int[] src = array;
+            int[] dst = new int[array.length + granularity];
+            System.arraycopy(src, 0, dst, 0, src.length);
+            array = dst;
+        }
+        array[elementsUsed] = item;
+        return array;
+    }
 
-	private void writeInt(int param) {
-		intParams = writeToArray(param, intParams, intCount++, INT_BUF_GRANULARITY);
-		containsData = true;
-	}
+    private void writeInt(int param) {
+        intParams = writeToArray(param, intParams, intCount++, INT_BUF_GRANULARITY);
+        containsData = true;
+    }
 
-	private void writeImage(Image image) {
-		images.addElement(image);
-	}
+    private void writeImage(Image image) {
+        images.addElement(image);
+    }
 
-	private void writeStr(String string) {
-    	strParams.append(string);
-	}
+    private void writeStr(String string) {
+        strParams.append(string);
+    }
 
-	private void writeRgb(int[] rgb) {
-		rgbData.addElement(rgb);
-	}
-	private void writeRgb(byte[] rgb) {
-		rgbData.addElement(rgb);
-	}
+    private void writeRgb(int[] rgb) {
+        rgbData.addElement(rgb);
+    }
+    private void writeRgb(byte[] rgb) {
+        rgbData.addElement(rgb);
+    }
 
-	private void writeRgb(short[] rgb) {
-		rgbData.addElement(rgb);
-	}
+    private void writeRgb(short[] rgb) {
+        rgbData.addElement(rgb);
+    }
 
-	private void reportNotSupported() {
-		throw new RuntimeException("Intenal: Operation not supported with JavaCommandBuffer");
-	}
+    private void reportNotSupported() {
+        throw new RuntimeException("Intenal: Operation not supported with JavaCommandBuffer");
+    }
 
-	private void printBufferInfo() {
-		System.out.println("CommandBuffer Info: " +this);
-		System.out.println("intParamCount: " + intCount);
-		System.out.println("intBuffer Size: " + intParams.length);
-		System.out.println("StringBuffer Size: " + strParams.length());
-	}
+    private void printBufferInfo() {
+        System.out.println("CommandBuffer Info: " +this);
+        System.out.println("intParamCount: " + intCount);
+        System.out.println("intBuffer Size: " + intParams.length);
+        System.out.println("StringBuffer Size: " + strParams.length());
+    }
 
-	private void raisePrimitiveFlag() {
-		containsPrimitiveData = true;
-	}
-	
-	int[] intParams() {
-		return intParams;
-	}
+    private void raisePrimitiveFlag() {
+        containsPrimitiveData = true;
+    }
+    
+    int[] intParams() {
+        return intParams;
+    }
 
-	int intParamCount() {
+    int intParamCount() {
         return intCount;
-	}
+    }
 
-	Vector rgbParams() {
-		return rgbData;
-	}
+    Vector rgbParams() {
+        return rgbData;
+    }
 
-	Vector images() {
-		return images;
-	}
+    Vector images() {
+        return images;
+    }
 
-	String strParams() {
-		return strParams.toString();
-	}
+    String strParams() {
+        return strParams.toString();
+    }
 
-	void drawArc (int x, int y, int width, int height, int startAngle, int arcAngle) {
-		writeInt(OP_DRAWARC);
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		writeInt(startAngle);
-		writeInt(arcAngle);
-		raisePrimitiveFlag();
-	}
+    void drawArc (int x, int y, int width, int height, int startAngle, int arcAngle) {
+        writeInt(OP_DRAWARC);
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        writeInt(startAngle);
+        writeInt(arcAngle);
+        raisePrimitiveFlag();
+    }
 
-	void drawFocus (int x, int y, int width, int height) {
-		writeInt(OP_DRAWFOCUS);
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		raisePrimitiveFlag();
-	}
+    void drawFocus (int x, int y, int width, int height) {
+        writeInt(OP_DRAWFOCUS);
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        raisePrimitiveFlag();
+    }
 
-	// must be called from UI thread as images cannot be creates outside that
-	void drawImage(Image image, int x, int y) {
-		writeInt(OP_DRAWIMAGE1);
-		writeInt(x);
-		writeInt(y);
-		// creating copy of image here uses implicit data sharing,
-		// thus only a shallow copy is made
-		writeImage(new Image(image));
-		raisePrimitiveFlag();
-	}
+    // must be called from UI thread as images cannot be creates outside that
+    void drawImage(Image image, int x, int y) {
+        writeInt(OP_DRAWIMAGE1);
+        writeInt(x);
+        writeInt(y);
+        // creating copy of image here uses implicit data sharing,
+        // thus only a shallow copy is made
+        writeImage(image.getCommandBufferCopy());
+        raisePrimitiveFlag();
+    }
 
-	// must be called from UI thread as images cannot be creates outside that
-	void drawImage(Image image, int tx, int ty, int tw, int th,int sx, int sy, int sw, int sh, int manipulation) {
-		writeInt(OP_DRAWIMAGE2);
-		writeInt(tx);
-		writeInt(ty);
-		writeInt(tw);
-		writeInt(th);
-		writeInt(sx);
-		writeInt(sy);
-		writeInt(sw);
-		writeInt(sh);
-		writeInt(manipulation);
-		// creating copy of image here uses implicit data sharing,
-		// thus only a shallow copy is made
-		writeImage(new Image(image));
-		raisePrimitiveFlag();
-	}
+    // must be called from UI thread as images cannot be creates outside that
+    void drawImage(Image image, int tx, int ty, int tw, int th,int sx, int sy, int sw, int sh, int manipulation) {
+        writeInt(OP_DRAWIMAGE2);
+        writeInt(tx);
+        writeInt(ty);
+        writeInt(tw);
+        writeInt(th);
+        writeInt(sx);
+        writeInt(sy);
+        writeInt(sw);
+        writeInt(sh);
+        writeInt(manipulation);
+        // creating copy of image here uses implicit data sharing,
+        // thus only a shallow copy is made
+        writeImage(image.getCommandBufferCopy());
+        raisePrimitiveFlag();
+    }
 
-	void drawLine (int x1, int y1, int x2, int y2) {
-		writeInt(OP_DRAWLINE);
-		writeInt(x1);
-		writeInt(y1);
-		writeInt(x2);
-		writeInt(y2);
-		raisePrimitiveFlag();
-	}
+    void drawLine (int x1, int y1, int x2, int y2) {
+        writeInt(OP_DRAWLINE);
+        writeInt(x1);
+        writeInt(y1);
+        writeInt(x2);
+        writeInt(y2);
+        raisePrimitiveFlag();
+    }
 
-	void drawEllipse (int x, int y, int width, int height) {
-		writeInt(OP_DRAWELLIPSE);
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		raisePrimitiveFlag();
-	}
+    void drawEllipse (int x, int y, int width, int height) {
+        writeInt(OP_DRAWELLIPSE);
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        raisePrimitiveFlag();
+    }
 
-	void drawPoint (int x, int y) {
-		writeInt(OP_DRAWPOINT);
-		writeInt(x);
-		writeInt(y);
-		raisePrimitiveFlag();
-	}
+    void drawPoint (int x, int y) {
+        writeInt(OP_DRAWPOINT);
+        writeInt(x);
+        writeInt(y);
+        raisePrimitiveFlag();
+    }
 
-	void drawPolygon(int[] pointArray) {
-		writeInt(OP_DRAWPOLYGON);
-		writeInt(pointArray.length);
-		for(int i = 0; i < pointArray.length; ++i) {
-			writeInt(pointArray[i]);
-		}
-		raisePrimitiveFlag();
-	}
+    void drawPolygon(int[] pointArray) {
+        writeInt(OP_DRAWPOLYGON);
+        writeInt(pointArray.length);
+        for(int i = 0; i < pointArray.length; ++i) {
+            writeInt(pointArray[i]);
+        }
+        raisePrimitiveFlag();
+    }
 
-	void drawPolyline(int[] pointArray) {
-		writeInt(OP_DRAWPOLYLINE);
-		writeInt(pointArray.length);
-		for(int i = 0; i < pointArray.length; ++i) {
-			writeInt(pointArray[i]);
-		}
-		raisePrimitiveFlag();
-	}
+    void drawPolyline(int[] pointArray) {
+        writeInt(OP_DRAWPOLYLINE);
+        writeInt(pointArray.length);
+        for(int i = 0; i < pointArray.length; ++i) {
+            writeInt(pointArray[i]);
+        }
+        raisePrimitiveFlag();
+    }
 
-	void drawRect (int x, int y, int width, int height) {
-		writeInt(OP_DRAWRECT);
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		raisePrimitiveFlag();
-	}
+    void drawRect (int x, int y, int width, int height) {
+        writeInt(OP_DRAWRECT);
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        raisePrimitiveFlag();
+    }
 
-	void drawRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha, int manipulation) {
-		writeInt(OP_DRAWRGB_INT);
-		writeInt(offset);
-		writeInt(scanlength);
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		writeInt(processAlpha? 1 : 0);
-		writeInt(manipulation);
-		writeRgb(rgbData);
-		raisePrimitiveFlag();
-	}
+    void drawRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha, int manipulation) {
+        writeInt(OP_DRAWRGB_INT);
+        writeInt(offset);
+        writeInt(scanlength);
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        writeInt(processAlpha? 1 : 0);
+        writeInt(manipulation);
+        writeRgb(rgbData);
+        raisePrimitiveFlag();
+    }
 
-	void drawRGB(byte[] rgbData, byte[] transparencyMask,int offset, int scanlength, int x, int y, int width, int height, int manipulation, int format) {
-		writeInt(OP_DRAWRGB_BYTE);
-		writeInt(offset);
-		writeInt(scanlength);
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		writeInt(manipulation);
-		writeInt(format);
-		writeRgb(rgbData);
-		writeRgb(transparencyMask);
-		raisePrimitiveFlag();
-	}
+    void drawRGB(byte[] rgbData, byte[] transparencyMask,int offset, int scanlength, int x, int y, int width, int height, int manipulation, int format) {
+        writeInt(OP_DRAWRGB_BYTE);
+        writeInt(offset);
+        writeInt(scanlength);
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        writeInt(manipulation);
+        writeInt(format);
+        writeRgb(rgbData);
+        writeRgb(transparencyMask);
+        raisePrimitiveFlag();
+    }
 
-	void drawRGB(short[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha, int manipulation, int format) {
-		writeInt(OP_DRAWRGB_SHORT);
-		writeInt(offset);
-		writeInt(scanlength);
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		writeInt(processAlpha? 1 : 0);
-		writeInt(manipulation);
-		writeInt(format);
-		writeRgb(rgbData);
-		raisePrimitiveFlag();
-	}
+    void drawRGB(short[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha, int manipulation, int format) {
+        writeInt(OP_DRAWRGB_SHORT);
+        writeInt(offset);
+        writeInt(scanlength);
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        writeInt(processAlpha? 1 : 0);
+        writeInt(manipulation);
+        writeInt(format);
+        writeRgb(rgbData);
+        raisePrimitiveFlag();
+    }
 
-	void drawRoundRect (int x, int y, int width, int height, int arcWidth, int arcHeight) {
-		writeInt(OP_DRAWROUNDRECT);
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		writeInt(arcWidth);
-		writeInt(arcHeight);
-		raisePrimitiveFlag();
-	}
+    void drawRoundRect (int x, int y, int width, int height, int arcWidth, int arcHeight) {
+        writeInt(OP_DRAWROUNDRECT);
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        writeInt(arcWidth);
+        writeInt(arcHeight);
+        raisePrimitiveFlag();
+    }
 
-	void drawString(String string, int x, int y, int width, int height, int alignments, int flags, boolean isTransparent) {
-		writeInt(OP_DRAWSTRING);
-		writeStr(string);
-		writeInt(string.length());
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		writeInt(alignments);
-		writeInt(flags);
-		writeInt(isTransparent? 1 : 0);
-		raisePrimitiveFlag();
-	}
+    void drawString(String string, int x, int y, int width, int height, int alignments, int flags, boolean isTransparent) {
+        writeInt(OP_DRAWSTRING);
+        writeStr(string);
+        writeInt(string.length());
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        writeInt(alignments);
+        writeInt(flags);
+        writeInt(isTransparent? 1 : 0);
+        raisePrimitiveFlag();
+    }
 
-	void fillArc (int x, int y, int width, int height, int startAngle, int arcAngle) {
-		writeInt(OP_FILLARC);
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		writeInt(startAngle);
-		writeInt(arcAngle);
-		raisePrimitiveFlag();
-	}
+    void fillArc (int x, int y, int width, int height, int startAngle, int arcAngle) {
+        writeInt(OP_FILLARC);
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        writeInt(startAngle);
+        writeInt(arcAngle);
+        raisePrimitiveFlag();
+    }
 
-	void fillGradientRect(int x, int y, int width, int height, boolean vertical, boolean swapColors) {
-		writeInt(OP_FILLGRADIENTRECT);
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		writeInt(vertical ? 1 : 0);
-		writeInt(swapColors ? 1 : 0);
-		raisePrimitiveFlag();
-	}
+    void fillGradientRect(int x, int y, int width, int height, boolean vertical, boolean swapColors) {
+        writeInt(OP_FILLGRADIENTRECT);
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        writeInt(vertical ? 1 : 0);
+        writeInt(swapColors ? 1 : 0);
+        raisePrimitiveFlag();
+    }
 
-	void fillEllipse (int x, int y, int width, int height) {
-		writeInt(OP_FILLELLIPSE);
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		raisePrimitiveFlag();
-	}
+    void fillEllipse (int x, int y, int width, int height) {
+        writeInt(OP_FILLELLIPSE);
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        raisePrimitiveFlag();
+    }
 
-	void fillPolygon (int[] pointArray) {
-		writeInt(OP_FILLPOLYGON);
-		writeInt(pointArray.length);
-		for(int i = 0; i < pointArray.length; ++i) {
-			writeInt(pointArray[i]);
-		}
-		raisePrimitiveFlag();
-	}
+    void fillPolygon (int[] pointArray) {
+        writeInt(OP_FILLPOLYGON);
+        writeInt(pointArray.length);
+        for(int i = 0; i < pointArray.length; ++i) {
+            writeInt(pointArray[i]);
+        }
+        raisePrimitiveFlag();
+    }
 
-	void fillRect (int x, int y, int width, int height) {
-		writeInt(OP_FILLRECT);
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		raisePrimitiveFlag();
-	}
+    void fillRect (int x, int y, int width, int height) {
+        writeInt(OP_FILLRECT);
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        raisePrimitiveFlag();
+    }
 
-	void fillRoundRectangle (int x, int y, int width, int height, int arcWidth, int arcHeight) {
-		writeInt(OP_FILLROUNDRECT);
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		writeInt(arcWidth);
-		writeInt(arcHeight);
-		raisePrimitiveFlag();
-	}
+    void fillRoundRectangle (int x, int y, int width, int height, int arcWidth, int arcHeight) {
+        writeInt(OP_FILLROUNDRECT);
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        writeInt(arcWidth);
+        writeInt(arcHeight);
+        raisePrimitiveFlag();
+    }
 
-	public void setBackgroundAlpha(int alpha) {
-		writeInt(OP_SETBACKGROUNDALPHA);
-		writeInt(alpha);
-	}
+    public void setBackgroundAlpha(int alpha) {
+        writeInt(OP_SETBACKGROUNDALPHA);
+        writeInt(alpha);
+    }
 
-	void setBackgroundColor(int argb, boolean updateAlpha) {
-		writeInt(OP_SETBACKGROUNDCOLOR);
-		writeInt(argb);
-		writeInt(updateAlpha? 1 : 0);
-	}
+    void setBackgroundColor(int argb, boolean updateAlpha) {
+        writeInt(OP_SETBACKGROUNDCOLOR);
+        writeInt(argb);
+        writeInt(updateAlpha? 1 : 0);
+    }
 
-	void setBlendingMode(int mode) {
-		writeInt(OP_SETBLENDINGMODE);
-		writeInt(mode);
-	}
+    void setBlendingMode(int mode) {
+        writeInt(OP_SETBLENDINGMODE);
+        writeInt(mode);
+    }
 
-	void setClip(int x, int y, int width, int height, boolean intersects) {
-		writeInt(OP_SETCLIP);
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		writeInt(intersects? 1 : 0 );
-	}
+    void setClip(int x, int y, int width, int height, boolean intersects) {
+        writeInt(OP_SETCLIP);
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        writeInt(intersects? 1 : 0 );
+    }
 
-	void cancelClipping () {
-		writeInt(OP_CANCELCLIPPING);
-	}
+    void cancelClipping () {
+        writeInt(OP_CANCELCLIPPING);
+    }
 
-	void setFont(int fontHandle) {
-		writeInt(OP_SETFONT);
-		writeInt(fontHandle);
-	}
+    void setFont(int fontHandle) {
+        writeInt(OP_SETFONT);
+        writeInt(fontHandle);
+    }
 
-	void setForegroundAlpha(int alpha) {
-		writeInt(OP_SETFOREGROUNDALPHA);
-		writeInt(alpha);
-	}
+    void setForegroundAlpha(int alpha) {
+        writeInt(OP_SETFOREGROUNDALPHA);
+        writeInt(alpha);
+    }
 
-	void setForegroundColor(int argb, boolean updateAlpha) {
-		writeInt(OP_SETFOREGROUNDCOLOR);
-		writeInt(argb);
-		writeInt(updateAlpha? 1 : 0);
-	}
+    void setForegroundColor(int argb, boolean updateAlpha) {
+        writeInt(OP_SETFOREGROUNDCOLOR);
+        writeInt(argb);
+        writeInt(updateAlpha? 1 : 0);
+    }
 
-	void setStrokeStyle(int style) {
-		writeInt(OP_SETSTROKESTYLE);
-		writeInt(style);
-	}
+    void setStrokeStyle(int style) {
+        writeInt(OP_SETSTROKESTYLE);
+        writeInt(style);
+    }
 
-	void setStrokeWidth(int width) {
-		writeInt(OP_SETSTROKEWIDTH);
-		writeInt(width);
-	}
+    void setStrokeWidth(int width) {
+        writeInt(OP_SETSTROKEWIDTH);
+        writeInt(width);
+    }
 
-	void translate(int x, int y) {
-		writeInt(OP_TRANSLATE);
-		writeInt(x);
-		writeInt(y);
-	}
+    void translate(int x, int y) {
+        writeInt(OP_TRANSLATE);
+        writeInt(x);
+        writeInt(y);
+    }
 
-	void scale(int x, int y) {
-		writeInt(OP_SCALE);
-		writeInt(x);
-		writeInt(y);
-	}
+    void scale(int x, int y) {
+        writeInt(OP_SCALE);
+        writeInt(x);
+        writeInt(y);
+    }
 
-	void resetTransform() {
-		writeInt(OP_RESETTRANSFORM);
-	}
+    void resetTransform() {
+        writeInt(OP_RESETTRANSFORM);
+    }
 
-	void copyArea(Image image, int x, int y) {
-		writeInt(OP_COPYAREA1);
+    void copyArea(Image image, int x, int y) {
+        writeInt(OP_COPYAREA1);
         writeInt(x);
         writeInt(y);
         // TODO does this need flushing on the image
@@ -560,7 +560,7 @@
         raisePrimitiveFlag();
     }
 
-	void copyArea(int srcX, int srcY, int width, int height, int destX, int destY, boolean paint) {
+    void copyArea(int srcX, int srcY, int width, int height, int destX, int destY, boolean paint) {
         writeInt(OP_COPYAREA2);
         writeInt(srcX);
         writeInt(srcY);
@@ -572,81 +572,81 @@
         raisePrimitiveFlag();
     }
 
-	// Unsupported operations
-	int getAdvancedCharacterWidth(char ch, boolean isAdvanced) {
-		reportNotSupported();
-		return 0;
-	}
+    // Unsupported operations
+    int getAdvancedCharacterWidth(char ch, boolean isAdvanced) {
+        reportNotSupported();
+        return 0;
+    }
 
-	void getFontMetricsData(int[] data, int fontHandle) {
-		reportNotSupported();
-	}
+    void getFontMetricsData(int[] data, int fontHandle) {
+        reportNotSupported();
+    }
 
-	int getBackgroundAlpha() {
-		reportNotSupported();
-		return 0;
-	}
+    int getBackgroundAlpha() {
+        reportNotSupported();
+        return 0;
+    }
 
-	int getBackgroundColor() {
-		reportNotSupported();
-		return 0;
-	}
+    int getBackgroundColor() {
+        reportNotSupported();
+        return 0;
+    }
 
-	int getBlendingMode() {
-		reportNotSupported();
-		return 0;
-	}
+    int getBlendingMode() {
+        reportNotSupported();
+        return 0;
+    }
 
-	void getClip(int[] clip) {
-		reportNotSupported();
-	}
+    void getClip(int[] clip) {
+        reportNotSupported();
+    }
 
-	int getForegroundAlpha() {
-		reportNotSupported();
-		return 0;
-	}
+    int getForegroundAlpha() {
+        reportNotSupported();
+        return 0;
+    }
 
-	int getForegroundColor() {
-		reportNotSupported();
-		return 0;
-	}
+    int getForegroundColor() {
+        reportNotSupported();
+        return 0;
+    }
 
-	void getTextBoundingBox(int[] boundingBox, String string, int alignments, int flags, int rectX, int rectY, int rectWidth, int rectHeight) {
-		reportNotSupported();
-	}
+    void getTextBoundingBox(int[] boundingBox, String string, int alignments, int flags, int rectX, int rectY, int rectWidth, int rectHeight) {
+        reportNotSupported();
+    }
 
-	int getStrokeWidth() {
-		reportNotSupported();
-		return 0;
-	}
+    int getStrokeWidth() {
+        reportNotSupported();
+        return 0;
+    }
 
-	int getStrokeStyle() {
-		reportNotSupported();
-		return 0;
-	}
+    int getStrokeStyle() {
+        reportNotSupported();
+        return 0;
+    }
 
-	int getTranslateX() {
-		reportNotSupported();
-		return 0;
-	}
+    int getTranslateX() {
+        reportNotSupported();
+        return 0;
+    }
 
-	int getTranslateY() {
-		reportNotSupported();
-		return 0;
-	}
+    int getTranslateY() {
+        reportNotSupported();
+        return 0;
+    }
 
-	boolean hasClipping() {
-		reportNotSupported();
-		return false;
-	}
+    boolean hasClipping() {
+        reportNotSupported();
+        return false;
+    }
 
-	void saveSettings() {
-		reportNotSupported();
-	}
+    void saveSettings() {
+        reportNotSupported();
+    }
 
-	void restoreSettings() {
-		reportNotSupported();
-	}
+    void restoreSettings() {
+        reportNotSupported();
+    }
 
 
 
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/widgets/Internal_PackageSupport.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/widgets/Internal_PackageSupport.java	Wed Jun 23 18:07:10 2010 +0300
@@ -168,7 +168,7 @@
     w.qt_signal_abstractitemview_activated_pp(row, column);
 }
 public static void qt_swt_event_widgetResized(Widget w, int widgetHandle, int oldWidth, int oldHeight, int width, int height) {
-    w.qt_swt_event_widgetResized_pp(widgetHandle, oldWidth, oldHeight, width, height);
+    w.qt_swt_event_widgetResized_pp(widgetHandle, oldWidth, oldHeight, width, height, true);
 }
 public static void register(Widget w) {
     w.register_pp();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/s60/org/eclipse/swt/internal/ApplicationUidWrapper.java	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2009,2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Nokia Corporation - initial implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal;
+
+import com.nokia.mj.impl.rt.support.ApplicationInfo;
+
+
+public final class ApplicationUidWrapper {
+
+	public static int uid() {
+        int midletUid = -1;
+        try{
+            String uidS = ApplicationInfo.getInstance().getUid().getStringValue();
+            // In Symbian the UID is in format '[<uid>]' where <uid> is in hex
+            // format. So wee need to take the brackets away.
+            // Long is needed in conversion because UIDs greater than 0x80000000
+            // would fail if Integer would be used. However typecast from long
+            // to int is safe since UID in Symbian is 32 bit.
+            long uidL = Long.parseLong(uidS.substring(1,uidS.length()-1), 16);
+            return (int)uidL;
+        }
+        catch (Throwable t) {/* Not handled*/ }
+        return midletUid;
+    }
+}
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/s60/org/eclipse/swt/internal/qt/s60/S60CommandPresentationStrategy.java	Fri Jun 11 13:33:44 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,178 +0,0 @@
-package org.eclipse.swt.internal.qt.s60;
-
-import org.eclipse.ercp.swt.mobile.Command;
-import org.eclipse.swt.internal.qt.CommandPresentationStrategy;
-import org.eclipse.swt.internal.qt.CommandUtils;
-import org.eclipse.swt.internal.qt.OS;
-import org.eclipse.swt.internal.qt.CommandArranger.CommandCollection;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Internal_PackageSupport;
-import org.eclipse.swt.widgets.Widget;
-
-public class S60CommandPresentationStrategy extends CommandPresentationStrategy {
-    private Command[] positiveKeyCommands;
-    private Command negativeKeyCommand;
-    private Command defaultCommand;
-
-    public S60CommandPresentationStrategy() {
-        super();
-    }
-
-    protected void dispose() {
-        positiveKeyCommands = null;
-        negativeKeyCommand = null;
-        defaultCommand =null;
-    }
-
-
-    protected void handleCommandListChange(Command added, Command removed,
-            CommandCollection commands) {
-        cleanNegativeCommand();
-        cleanPositiveCommands();
-        updateCommandPositions(commands.getCommands(null));
-        placeNegativeCommand();
-        placePositiveCommands();
-    }
-
-    protected void handleDefaultCommandChange(Command defaultCommand) {
-        this.defaultCommand = defaultCommand;
-        cleanPositiveCommands();
-        placePositiveCommands();
-    }
-
-
-    protected void handleFocusChange(Control focused,
-            CommandCollection oldCommands, CommandCollection commands) {
-
-        //Clean-up the existing commands
-        cleanPositiveCommands();
-        cleanNegativeCommand();
-        //determine where the commands go
-        if( commands != null && commands.getSize()>0 ){
-            Command[] add = commands.getCommands(null);
-            updateCommandPositions(add);
-        }
-        //Place them to their places
-        placePositiveCommands();
-        placeNegativeCommand();
-
-    }
-
-    private void updateCommandPositions(Command[] commands) {
-        positiveKeyCommands = new Command[commands.length];
-        int  positiveKeyIndex=0;
-        for (int i = 0; i < commands.length; i++) {
-            Command cmd = commands[i];
-            if ( cmd.isDefaultCommand()){
-                defaultCommand = cmd;
-                continue;
-            }
-            if( CommandUtils.isNegativeType(cmd.type) ){
-                if (negativeKeyCommand == null || negativeKeyCommand.isDisposed()){
-                    negativeKeyCommand = cmd;
-                }else
-                if( negativeKeyCommand.getPriority() <= cmd.getPriority() ){
-                    positiveKeyCommands[positiveKeyIndex] = negativeKeyCommand;
-                    positiveKeyIndex++;
-                    negativeKeyCommand = cmd;
-                }else{
-                    positiveKeyCommands[positiveKeyIndex] = cmd;
-                    positiveKeyIndex++;
-                }
-                continue;
-            }
-            positiveKeyCommands[positiveKeyIndex]=cmd;
-            positiveKeyIndex++;
-        }
-        if ((positiveKeyIndex) < positiveKeyCommands.length ){// needs to shrink
-            Command[] rightSized = new Command[positiveKeyIndex];
-            System.arraycopy(positiveKeyCommands, 0, rightSized, 0, rightSized.length);
-            positiveKeyCommands = rightSized;
-        }
-    }
-
-
-    private void cleanPositiveCommands() {
-        boolean useBar = false;
-        if ( (positiveKeyCommands != null && positiveKeyCommands.length >1) ||
-                (defaultCommand != null && positiveKeyCommands != null) ){
-            useBar = true;
-        }
-        if (defaultCommand != null && !defaultCommand.isDisposed()
-                && !defaultCommand.control.isDisposed()) {
-            if (useBar) {
-                OS.QWidget_removeAction(defaultCommand.control.getShell()
-                        .internal_getOwnMenuBar(), topHandle(defaultCommand));
-            }
-            else{
-                 OS.QWidget_removeAction(topHandle(defaultCommand.control), topHandle(defaultCommand));
-            }
-        }
-        if (positiveKeyCommands != null) {
-            for (int i = 0; i < positiveKeyCommands.length; i++) {
-                Command cmd = positiveKeyCommands[i];
-                if (cmd == null || cmd.isDisposed()  || cmd.control.isDisposed()){
-                	continue;
-                }
-                int handle = 0;
-                if (useBar) {
-                    handle = cmd.control.getShell().internal_getOwnMenuBar();
-                } else {
-                    handle = topHandle(positiveKeyCommands[0].control);
-                }
-                OS.QWidget_removeAction(handle, topHandle(cmd));
-
-            }
-        }
-    }
-
-   private void cleanNegativeCommand() {
-        if(negativeKeyCommand != null && !negativeKeyCommand.isDisposed() && !negativeKeyCommand.control.isDisposed() ){
-            OS.QWidget_removeAction(topHandle(negativeKeyCommand.control), topHandle(negativeKeyCommand));
-        }
-    }
-
-    private void placeNegativeCommand() {
-        if(negativeKeyCommand != null ){
-            OS.QWidget_addAction(Internal_PackageSupport.topHandle(negativeKeyCommand.control),
-                    topHandle(negativeKeyCommand));
-        }
-    }
-
-    private void placePositiveCommands() {
-        if (defaultCommand != null ) {
-            int defaultCmdHandle = topHandle(defaultCommand);
-            if (positiveKeyCommands != null) {
-                OS.QMenuBar_addAction(defaultCommand.control.getShell()
-                        .internal_getOwnMenuBar(), defaultCmdHandle);
-            } else {
-                OS.QWidget_addAction(Internal_PackageSupport
-                        .topHandle(defaultCommand.control), defaultCmdHandle);
-            }
-        }
-        if (positiveKeyCommands != null) {
-            if (positiveKeyCommands.length == 1 && defaultCommand == null) {
-                OS.QWidget_addAction(Internal_PackageSupport
-                        .topHandle(positiveKeyCommands[0].control),
-                        topHandle(positiveKeyCommands[0]));
-            } else {
-                CommandUtils.sort(positiveKeyCommands);
-                for (int i = 0; i < positiveKeyCommands.length; i++) {
-                    OS.QMenuBar_addAction(positiveKeyCommands[i].control
-                            .getShell().internal_getOwnMenuBar(),
-                            topHandle(positiveKeyCommands[i]));
-                }
-            }
-        }
-    }
-
-    protected void handleMenuBarChanged(int newMenuBar,
-            CommandCollection commands) {
-        placePositiveCommands();
-    }
-
-
-    private static final int topHandle(Widget w) {
-        return Internal_PackageSupport.topHandle(w);
-    }
-}
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/webkit/org/eclipse/swt/internal/qt/webkit/OS_webkit.java	Fri Jun 11 13:33:44 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Nokia Corporation - initial implementation
- *******************************************************************************/
-package org.eclipse.swt.internal.qt.webkit;
-
-import org.eclipse.swt.internal.Library;
-
-/**
- * Native methods requiring QtWebkit. They are separated to avoid
- * loading the related libraries until they are needed. 
- */
-public final class OS_webkit {
-    static {
-        Library.loadLibrary("eswtqtwebkit");
-    }
-
-    //
-    // QWebView
-    //
-    public static final native int QWebView_new();
-    public static final native void QWebView_back(int handle);
-    public static final native void QWebView_forward(int handle);
-    public static final native void QWebView_reload(int handle);
-    public static final native void QWebView_setHtml(int handle, String html);
-    public static final native void QWebView_setUrl(int handle, String url);
-    public static final native void QWebView_stop(int handle);
-    public static final native String QWebView_swt_backUrl(int handle);
-    public static final native boolean QWebView_swt_canGoBack(int handle);
-    public static final native boolean QWebView_swt_canGoForward(int handle);
-    public static final native boolean QWebView_swt_evaluateJavaScript(int handle, String script);
-    public static final native String QWebView_swt_forwardUrl(int handle);
-    public static final native String QWebView_url(int handle);
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/webkit/org/eclipse/swt/internal/qt/webkit/WebkitOS.java	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Nokia Corporation - initial implementation
+ *******************************************************************************/
+package org.eclipse.swt.internal.qt.webkit;
+
+import org.eclipse.swt.internal.Library;
+
+/**
+ * Native methods requiring QtWebkit. They are separated to avoid
+ * loading the related libraries until they are needed. 
+ */
+public final class WebkitOS {
+    static {
+        Library.loadLibrary("eswtqtwebkit");
+    }
+
+    //
+    // QWebView
+    //
+    public static final native int QWebView_new();
+    public static final native void QWebView_back(int handle);
+    public static final native void QWebView_forward(int handle);
+    public static final native void QWebView_reload(int handle);
+    public static final native void QWebView_setHtml(int handle, String html);
+    public static final native void QWebView_setUrl(int handle, String url);
+    public static final native void QWebView_stop(int handle);
+    public static final native String QWebView_swt_backUrl(int handle);
+    public static final native boolean QWebView_swt_canGoBack(int handle);
+    public static final native boolean QWebView_swt_canGoForward(int handle);
+    public static final native boolean QWebView_swt_evaluateJavaScript(int handle, String script);
+    public static final native String QWebView_swt_forwardUrl(int handle);
+    public static final native String QWebView_url(int handle);
+}
--- a/javauis/javalegacyutils/build/build.xml	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/javalegacyutils/build/build.xml	Wed Jun 23 18:07:10 2010 +0300
@@ -31,5 +31,11 @@
                    com.nokia.mj.impl.rt.legacy.MemoryUtil,
                    com.nokia.mj.impl.rt.legacy.MIDEventServer,
                    com.nokia.mj.impl.rt.legacy.NativeError"/>
+
+  <target name="create.internal.api.jar">
+    <omj.internal.apis includes="com/nokia/mj/impl/rt/legacy/MIDEventServer.class,
+                                 com/nokia/mj/impl/rt/legacy/Security.class"/>
+  </target>
+
 </project>
 
--- a/javauis/lcdui_qt/src/javax/microedition/lcdui/Buffer.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/lcdui_qt/src/javax/microedition/lcdui/Buffer.java	Wed Jun 23 18:07:10 2010 +0300
@@ -56,12 +56,16 @@
     final static int HOST_TYPE_CUSTOMITEM = 3;
 
     // Flags for raising settings validation
-    private final static int NONE            = 0;
-    private final static int COLOR           = 1;
-    private final static int CLIP            = 2;
-    private final static int FONT            = 4;
-    private final static int STROKESTYLE     = 8;
-    private final static int COORS_TRANSLATION = 16;
+    // FORCE_SETTINGS Forces settings to validated also in case
+    // there's only one Graphics instance as client, normally 
+    // settings are not checked in such case
+    final static int NONE            = 0;
+    final static int COLOR           = 1;
+    final static int CLIP            = 2;
+    final static int FONT            = 4;
+    final static int STROKESTYLE     = 8;
+    final static int COORDS_TRANSLATION = 16; 
+    final static int FORCE_SETTINGS    = 32; 
 
     // Graphics settings active in buffer
     // all values are comparable to those
@@ -107,35 +111,35 @@
      */
     static Buffer createInstance(Object host, Control control)
     {
-    	if(host instanceof Canvas) 
-    	{
-    		if(OS.windowServer == OS.WS_SYMBIAN_S60)
-    		{	
-    		    return new CanvasBufferSymbian((Canvas) host, control);
-    		}
-    		else if(OS.windowServer == OS.WS_X11)
-    		{
-    			return new CanvasBufferLinux((Canvas) host, control);
-    		}
-  			return null;
-    	} 
-    	else if(host instanceof CustomItem)
-    	{
-    		if(OS.windowServer == OS.WS_SYMBIAN_S60)
-    		{	
-    		    return new CustomItemBufferSymbian((CustomItem) host, control);
-    		}
-    		else if(OS.windowServer == OS.WS_X11)
-    		{
-    			return new CustomItemBufferLinux((CustomItem) host, control);
-    		}
-  			return null;
-    	} 
-    	else if(host instanceof Image) 
-    	{
-    	    return new ImageBuffer((Image) host);	
-    	}
-    	return null;
+        if(host instanceof Canvas) 
+        {
+            if(OS.windowServer == OS.WS_SYMBIAN_S60)
+            {   
+                return new CanvasBufferSymbian((Canvas) host, control);
+            }
+            else if(OS.windowServer == OS.WS_X11)
+            {
+                return new CanvasBufferLinux((Canvas) host, control);
+            }
+            return null;
+        } 
+        else if(host instanceof CustomItem)
+        {
+            if(OS.windowServer == OS.WS_SYMBIAN_S60)
+            {   
+                return new CustomItemBufferSymbian((CustomItem) host, control);
+            }
+            else if(OS.windowServer == OS.WS_X11)
+            {
+                return new CustomItemBufferLinux((CustomItem) host, control);
+            }
+            return null;
+        } 
+        else if(host instanceof Image) 
+        {
+            return new ImageBuffer((Image) host);   
+        }
+        return null;
     }
     
     /**
@@ -154,8 +158,7 @@
     /**
      * Defines the bounds of the host.
      * Bounds are used for restricting the rendering in
-     * the area of the control that is being updated. With Images
-     * the bounds are not used.
+     * the area of the control that is being updated. 
      *
      * @param crtl The Control of the host
      * @param clienArea The area of the control which can be drawn by Graphics
@@ -177,6 +180,20 @@
     }
 
     /**
+     * Defines the bounds of the host.
+     *
+     * @param crtl The Control of the host
+     * @param clienArea The area of the control which can be drawn by Graphics
+     */
+    void setImageBounds(int width, int height)
+    {
+        hostBounds.x = 0;
+        hostBounds.y = 0;
+        hostBounds.width = width;
+        hostBounds.height = height;
+    }
+
+    /**
      * Prepares surface for a new frame and starts paint session. 
      * Must be called in UI thread (sync calls this automatically)
      * and at the start of new frame. The rectangle provided as 
@@ -189,11 +206,11 @@
      */
     void startFrame(int x, int y, int w, int h)
     {
-    	if(!isSurfaceSessionOpen)
-    	{
-    	    beginPaint(x, y, w, h);
-    	    isSurfaceSessionOpen = true;
-    	}
+        if(!isSurfaceSessionOpen)
+        {
+            beginPaint(x, y, w, h);
+            isSurfaceSessionOpen = true;
+        }
     }
     
     /**
@@ -202,11 +219,11 @@
      */
     void endFrame()
     {
-    	if(isSurfaceSessionOpen)
-    	{
-    		endPaint();
-    	    isSurfaceSessionOpen = false;
-    	}
+        if(isSurfaceSessionOpen)
+        {
+            endPaint();
+            isSurfaceSessionOpen = false;
+        }
     }
     
     /**
@@ -216,8 +233,8 @@
      */
     void blitToDisplay(GraphicsContext gc, Widget widget)
     {
-  	    endFrame();
-    	blit(gc, widget);
+        endFrame();
+        blit(gc, widget);
     }
     
     /** 
@@ -286,7 +303,7 @@
         // write the default values to the buffer
         if(clientCount == 1) 
         {
-            writeDefaultValuesToBuffer();	
+            writeDefaultValuesToBuffer();   
         }
         return new Graphics(this, hostBounds );
     }
@@ -299,7 +316,7 @@
      */
     void sync() 
     {
-    	sync(true);
+        sync(true);
     }
     
     /**
@@ -325,7 +342,7 @@
         }
         
         // Start surface session if not started yet
-       	startFrame(hostBounds.x, hostBounds.y , hostBounds.width , hostBounds.height);
+        startFrame(hostBounds.x, hostBounds.y , hostBounds.width , hostBounds.height);
         
         doRelease();
         bindToHost(gc);
@@ -365,12 +382,12 @@
      */
     void dispose()
     {
-    	if(gc != null) 
-    	{
+        if(gc != null) 
+        {
             doRelease();
             gc.dispose();
             gc = null;
-    	}
+        }
         commandBuffer = null;
     }
 
@@ -381,31 +398,31 @@
 
     void fillRect(int x, int y, int w, int h, Graphics client)
     {
-        validateAndApplySettings((COLOR|CLIP|COORS_TRANSLATION), client);
+        validateAndApplySettings((COLOR|CLIP|COORDS_TRANSLATION), client);
         gc.fillRect(x, y, w, h);
     }
 
     void fillRoundRect(int x, int y, int w, int h, int arcW, int arcH, Graphics client)
     {
-        validateAndApplySettings((COLOR|CLIP|COORS_TRANSLATION), client);
+        validateAndApplySettings((COLOR|CLIP|COORDS_TRANSLATION), client);
         gc.fillRoundRect(x, y, w, h, arcW, arcH);
     }
 
     void fillArc(int x, int y, int w, int h, int startAngle, int arcAngle, Graphics client)
     {
-        validateAndApplySettings((COLOR|CLIP|COORS_TRANSLATION), client);
+        validateAndApplySettings((COLOR|CLIP|COORDS_TRANSLATION), client);
         gc.fillArc(x, y, w, h, startAngle, arcAngle);
     }
 
     void fillTriangle(int[] points, Graphics client)
     {
-        validateAndApplySettings((COLOR|CLIP|COORS_TRANSLATION), client);
+        validateAndApplySettings((COLOR|CLIP|COORDS_TRANSLATION), client);
         gc.fillPolygon(points);
     }
 
     void setClip(int x, int y, int w, int h, Graphics client)
     {
-        validateAndApplySettings(COORS_TRANSLATION, client);
+        validateAndApplySettings(COORDS_TRANSLATION, client);
         // check if given clip is already active in buffer
         if((bufferClip.x == x) && (bufferClip.y == y) &&
                 (bufferClip.width == w) && (bufferClip.height== h))
@@ -420,7 +437,7 @@
         }
 
         // translate clip to display coordinates and apply
-        Rectangle rect = clipToDisplayCoords(x, y, w, h);
+        Rectangle rect = clipToWindowCoords(x, y, w, h);
         if(rect.isEmpty())
         {
             // check is buffer clip is already up to date
@@ -452,6 +469,11 @@
         gc.setClip(rect.x, rect.y, rect.width, rect.height, false);
     }
 
+    void setGraphicsDefaults(Graphics client)
+    {
+    	validateAndApplySettings((FONT|COLOR|STROKESTYLE|COORDS_TRANSLATION|FORCE_SETTINGS), client);
+    }
+    
     void setColor(int r, int g, int b, Graphics client)
     {
         // check if given color is already active in buffer
@@ -503,37 +525,37 @@
 
     void drawLine(int xStart, int yStart, int xEnd, int yEnd, Graphics client)
     {
-        validateAndApplySettings((COLOR|CLIP|COORS_TRANSLATION|STROKESTYLE), client);
+        validateAndApplySettings((COLOR|CLIP|COORDS_TRANSLATION|STROKESTYLE), client);
         gc.drawLine(xStart, yStart, xEnd, yEnd);
     }
 
     void drawRect(int x, int y, int w, int h, Graphics client)
     {
-        validateAndApplySettings((COLOR|CLIP|COORS_TRANSLATION|STROKESTYLE), client);
+        validateAndApplySettings((COLOR|CLIP|COORDS_TRANSLATION|STROKESTYLE), client);
         gc.drawRect(x, y, w, h);
     }
 
     void drawRoundRect(int x, int y, int w, int h, int arcW, int arcH, Graphics client)
     {
-        validateAndApplySettings((COLOR|CLIP|COORS_TRANSLATION|STROKESTYLE), client);
+        validateAndApplySettings((COLOR|CLIP|COORDS_TRANSLATION|STROKESTYLE), client);
         gc.drawRoundRect(x, y, w, h, arcW, arcH);
     }
 
     void drawArc(int x, int y, int w, int h, int startAngle, int arcAngle, Graphics client)
     {
-        validateAndApplySettings((COLOR|CLIP|COORS_TRANSLATION|STROKESTYLE), client);
+        validateAndApplySettings((COLOR|CLIP|COORDS_TRANSLATION|STROKESTYLE), client);
         gc.drawArc(x, y, w, h, startAngle, arcAngle);
     }
 
     void drawString(String string, int x, int y, Graphics client)
     {
-        validateAndApplySettings((COLOR|CLIP|COORS_TRANSLATION|FONT), client);
+        validateAndApplySettings((COLOR|CLIP|COORDS_TRANSLATION|FONT), client);
         gc.drawString(string, x, y, true);
     }
 
     void drawImage(org.eclipse.swt.internal.qt.graphics.Image image, int x,int y, Graphics client)
     {
-        validateAndApplySettings((CLIP|COORS_TRANSLATION), client);
+        validateAndApplySettings((CLIP|COORDS_TRANSLATION), client);
         gc.drawImage(image, x, y);
     }
 
@@ -541,7 +563,7 @@
                    int wDst, int hDst, int xSrc, int ySrc, int wSrc, int hSrc,
                    int transform, Graphics client)
     {
-        validateAndApplySettings((CLIP|COORS_TRANSLATION), client);
+        validateAndApplySettings((CLIP|COORDS_TRANSLATION), client);
         gc.drawImage(image, xDst, yDst, wDst, hDst, xSrc, ySrc, wSrc, hSrc, transform);
     }
 
@@ -555,7 +577,7 @@
                  boolean alpha,
                  Graphics client)
     {
-        validateAndApplySettings((CLIP|COORS_TRANSLATION), client);
+        validateAndApplySettings((CLIP|COORDS_TRANSLATION), client);
         gc.drawRGB(rgb, offset, scanlength, x, y, w, h, alpha);
     }
 
@@ -570,7 +592,7 @@
                  int manipulation,
                  Graphics client)
     {
-        validateAndApplySettings((CLIP|COORS_TRANSLATION), client);
+        validateAndApplySettings((CLIP|COORDS_TRANSLATION), client);
         gc.drawRGB(rgb, offset, scanlength, x, y, w, h, alpha, manipulation);
     }
 
@@ -586,7 +608,7 @@
                  int format,
                  Graphics client)
     {
-        validateAndApplySettings((CLIP|COORS_TRANSLATION), client);
+        validateAndApplySettings((CLIP|COORDS_TRANSLATION), client);
         gc.drawRGB(rgb, transparencyMask, offset, scanlength, x, y, w, h, manipulation, format);
     }
 
@@ -602,19 +624,19 @@
                  int format,
                  Graphics client)
     {
-        validateAndApplySettings((CLIP|COORS_TRANSLATION), client);
+        validateAndApplySettings((CLIP|COORDS_TRANSLATION), client);
         gc.drawRGB(rgb, offset, scanlength, x, y, w, h, alpha, manipulation, format);
     }
 
     void drawPolygon(int[] points, Graphics client)
     {
-        validateAndApplySettings((COLOR|CLIP|COORS_TRANSLATION|STROKESTYLE), client);
+        validateAndApplySettings((COLOR|CLIP|COORDS_TRANSLATION|STROKESTYLE), client);
         gc.drawPolygon(points);
     }
 
     void fillPolygon(int[] points, Graphics client)
     {
-        validateAndApplySettings((COLOR|CLIP|COORS_TRANSLATION), client);
+        validateAndApplySettings((COLOR|CLIP|COORDS_TRANSLATION), client);
         gc.fillPolygon(points);
     }
 
@@ -658,8 +680,16 @@
         return null;
     }
     
+    boolean containsDrawnPrimitives() {
+        boolean result = false;
+        if(commandBuffer != null) {
+            result = commandBuffer.containsDrawnPrimitives();
+        }
+        return result;
+    }
+    
     /**
-     * Translates given rectangle to display/window surface coordinates
+     * Translates given rectangle to window surface coordinates
      * and outlines the clip inside the control bounds.
      *
      * @param x The x-coordinate of the rectangle
@@ -668,7 +698,7 @@
      * @param h The height of the rectangle
      *
      */
-    private Rectangle clipToDisplayCoords(int x, int y, int w, int h)
+    private Rectangle clipToWindowCoords(int x, int y, int w, int h)
     {
         // Bottom-right corner of control bounds in window coordinates
         final int hostX2 = hostBounds.x + hostBounds.width;
@@ -701,7 +731,7 @@
         clipY2 = clipY2Dpy < hostBounds.y ? (clipY2 + (hostBounds.y - clipY1Dpy)) : clipY2;
         clipY2 = clipY2Dpy > hostY2 ? (clipY2 - (clipY1Dpy - hostY2)) : clipY2;
 
-        return new Rectangle(clipX1, clipY1, (clipX2 - clipX1) , (clipY1 - clipY2));
+        return new Rectangle(clipX1, clipY1, (clipX2 - clipX1) , (clipY2 - clipY1));
     }
 
     /**
@@ -715,7 +745,7 @@
      */
     private void validateAndApplySettings(int flags, Graphics client)
     {
-        if(!clientChanged(client))
+        if(!clientChanged(client) && (FORCE_SETTINGS & flags) == 0)
         {
             return;
         }
@@ -736,7 +766,7 @@
                     client.currentClip[3] != bufferClip.height)
             {
 
-                Rectangle rect = clipToDisplayCoords(client.currentClip[0], client.currentClip[1],
+                Rectangle rect = clipToWindowCoords(client.currentClip[0], client.currentClip[1],
                                                      client.currentClip[2], client.currentClip[3]);
                 gc.setClip(rect.x, rect.y, rect.width, rect.height, false);
                 bufferClip.x = client.currentClip[0];
@@ -745,7 +775,7 @@
                 bufferClip.height = client.currentClip[3];
             }
         }
-        if((COORS_TRANSLATION & flags) != 0)
+        if((COORDS_TRANSLATION & flags) != 0)
         {
             if((bufferTranslateX != client.translateX) && (bufferTranslateY != client.translateY))
             {
@@ -815,6 +845,9 @@
 
    /**
     * Writes Graphics default values to buffer
+    * @param force If true defaults are written unconditionally to buffer, 
+    *              otherwise only values that different than the ones in buffer
+    *              are written
     */
     private void writeDefaultValuesToBuffer()
     {
--- a/javauis/lcdui_qt/src/javax/microedition/lcdui/Canvas.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/lcdui_qt/src/javax/microedition/lcdui/Canvas.java	Wed Jun 23 18:07:10 2010 +0300
@@ -16,9 +16,11 @@
 */
 package javax.microedition.lcdui;
 
+import java.util.Enumeration;
 import java.util.Vector;
 import java.util.Timer;
 import java.util.TimerTask;
+import javax.microedition.lcdui.game.GameCanvas;
 import javax.microedition.lcdui.EventDispatcher.LCDUIEvent;
 import org.eclipse.ercp.swt.mobile.MobileShell;
 import org.eclipse.swt.SWT;
@@ -148,6 +150,21 @@
      */
     public static final int KEY_POUND = 35;
 
+
+    private static final int GAME_CANVAS = 1;
+    private static final int NO_BACKGROUND = 1 << 1;
+    private static final int FULLSCREEN_MODE = 1 << 2;
+
+    private static final int DISABLE_TAPDETECTION = 1 << 3;
+    private static final int SUPPRESS_GAMEKEYS = 1 << 4;
+    private static final int SUPPRESS_DRAGEVENT = 1 << 5;
+    private static final int CLEANUP_NEEDED = 1 << 6;
+    private static final int REPAINT_PENDING = 1 << 7;
+    private static final int SELECTIONKEY_COMPATIBILITY = 1 << 8;
+
+    private static final int CURRENTLY_VISIBLE = 1 << 9;
+
+
     // Listeners for various events.
     private org.eclipse.swt.events.PaintListener paintListener =
         new CanvasShellPaintListener();
@@ -163,24 +180,31 @@
     private Graphics tempGraphics;
     
     // Graphics command buffer for this instance
-	Buffer graphicsBuffer;
-	
+    Buffer graphicsBuffer;
+    
     //On Screen Keypad
     //private Composite keypadComposite;
     private CanvasKeypad onScreenkeypad;
+    private static CanvasKeypad sharedKeypad;
     private int oskHeight;
 
     // Vector of flags that a certain key was pressed but was not released.
     // Used to implement keyRepeated since eSWT does not support
     // key repeat events.
     private Vector keysPressed;
+    private int gameKeyState;
 
-    private boolean suppressGameKeys;
-    private boolean suppressDragEvent;
-    private boolean cleanupNeeded;
+    private static int objectCount;
+    private static Shell sharedShell;
+    private Shell mShell;
+    private Composite canvasComp;
+    private Label tickerLabel;
+
+    private int mode;
+    private Object modeLock;
     private Object cleanupLock;
-    private boolean noBackground;
-    private int gameKeyState;
+    private Object repaintLock;
+    private Object flushLock;
 
     private Timer timer = new Timer();
     private CanvasTimerTask timerTask;
@@ -192,35 +216,151 @@
     private int pointerDownY;
     private int twips;
     private int timeout;
-    private boolean disableTapDetection;
 
-    private boolean repaintPending;
     private int repaintX1;
     private int repaintY1;
     private int repaintX2;
     private int repaintY2;
-    private Object repaintLock;
 
-    private boolean selectionKeyCompatibility;
-    private boolean finalMode;
+
     /**
      * Constructs <code>Canvas</code> object.
      */
     public Canvas()
     {
         super(null);
+        synchronized(this)
+        {
+            objectCount++;
+        }
+
+        modeLock = new Object();
         repaintLock = new Object();
         cleanupLock = new Object();
+        flushLock = new Object();
+        setMode(GAME_CANVAS, this instanceof GameCanvas);
         construct();
         keysPressed = new Vector();
     }
 
+
+    /**
+     * Disposes this instance
+     * Called when finalizer is destroying this instance.
+     */
+    void dispose()
+    {
+        ESWTUIThreadRunner.update(getClass().getName(), -1);
+        ESWTUIThreadRunner.safeSyncExec(new Runnable()
+        {
+            public void run()
+            {
+                if(graphicsBuffer != null)
+                {
+                    graphicsBuffer.dispose();
+                    graphicsBuffer = null;
+                }
+
+                synchronized(this)
+                {
+                    objectCount--;
+                    
+                    if((objectCount == 0) || isMode(GAME_CANVAS))
+                    {
+                        mShell.dispose();
+                        sharedShell = null;
+                        sharedKeypad = null;
+                    }
+                    else
+                    {
+                        Ticker ticker = getTicker();
+                        if (ticker != null)
+                        {
+                            ticker.removeLabel(tickerLabel);
+                        }
+                        if(tickerLabel != null)
+                        {
+                            tickerLabel.dispose();
+                        }
+
+                        canvasComp.dispose();
+                    }
+                }
+            }
+        });
+    }
+
+
     /* (non-Javadoc)
      * @see Displayable#eswtConstructShell(int)
      */
     Shell eswtConstructShell(int style)
     {
-        return super.eswtConstructShell(style /*| SWT.RESIZE*/);
+        if(isMode(GAME_CANVAS))
+        {
+            mShell = super.eswtConstructShell(style);
+        }
+        else
+        {
+            if(sharedShell == null)
+            {
+                sharedShell = super.eswtConstructShell(style);
+            }
+            mShell = sharedShell;
+        }
+
+        // Give the Shell the maximized size already before it becomes visible
+        // so that it will return the correct size.
+        mShell.setBounds(org.eclipse.swt.widgets.Display.getCurrent().getClientArea());
+
+        // Make the Shell maximized. On Symbian it's automatically maximized
+        // so this has no effect but on other platforms explicit maximizing
+        // might be needed.
+        mShell.setMaximized(true);
+        
+        return mShell;
+    }
+
+    /**
+     * Sets ticker. If ticker is added already to other canvas(es),
+     * it continues running from position where it was. Otherwise
+     * it will start running from beginning when this method returns.
+     *
+     * @param newTicker New ticker. If null, current ticker is removed.
+     */
+    public void setTicker(Ticker newTicker)
+    {
+        super.setTicker(newTicker);
+
+        ESWTUIThreadRunner.syncExec(new Runnable()
+        {
+            public void run()
+            {
+                tickerLabel.setVisible(isMode(CURRENTLY_VISIBLE));
+            }
+        });
+    }
+
+    /**
+     * Creates singleton Label instance used by Ticker.
+     * Creates tickerLabel on shell and sets the visibility of the same.
+     */
+    Label getTickerLabel()
+    {
+        tickerLabel = super.getTickerLabel();
+
+        if (!isMode(CURRENTLY_VISIBLE))
+        {
+            ESWTUIThreadRunner.syncExec(new Runnable()
+            {
+                public void run()
+                {
+                    tickerLabel.setVisible(false);
+                }
+            });
+        }
+
+        return tickerLabel;
     }
 
     /* (non-Javadoc)
@@ -229,16 +369,16 @@
     Composite eswtConstructContent(int style)
     {
         // Get JAD attribute
-        noBackground = JadAttributeUtil.isValue(JadAttributeUtil.ATTRIB_NOKIA_UI_ENHANCEMENT,
-                                                JadAttributeUtil.VALUE_CANVAS_HAS_BACKGROUND);
-        if(noBackground)
+        setMode(NO_BACKGROUND, JadAttributeUtil.isValue(JadAttributeUtil.ATTRIB_NOKIA_UI_ENHANCEMENT,
+                                                JadAttributeUtil.VALUE_CANVAS_HAS_BACKGROUND));
+        if(isMode(NO_BACKGROUND))
         {
             style |= SWT.NO_BACKGROUND;
         }
 
         // Get JAD attribute for S60 Selection Key Compatibility
-        selectionKeyCompatibility = JadAttributeUtil.isValue(JadAttributeUtil.ATTRIB_NOKIA_MIDLET_S60_SELECTION_KEY_COMPATIBILITY,
-                                    JadAttributeUtil.VALUE_TRUE);
+        setMode(SELECTIONKEY_COMPATIBILITY, JadAttributeUtil.isValue(JadAttributeUtil.ATTRIB_NOKIA_MIDLET_S60_SELECTION_KEY_COMPATIBILITY,
+                                    JadAttributeUtil.VALUE_TRUE));
 
         // Get JAD attribute for MIDlet Tap Detection
         String tapAttr = JadAttributeUtil.getValue(JadAttributeUtil.ATTRIB_NOKIA_MIDLET_TAP_DETECTION_OPTIONS);
@@ -266,7 +406,7 @@
 
                     if((twips == 0)  && (timeout == 0))
                     {
-                        disableTapDetection = true;
+                        setMode(DISABLE_TAPDETECTION, true);
                     }
 
                     // if any one of the value is zero, set defaults
@@ -287,8 +427,25 @@
             setDefaultTapValues();
         }
 
-        Composite canvasComp = super.eswtConstructContent(style);
+        canvasComp = super.eswtConstructContent(style);
+        canvasComp.setVisible(false);
+        
+        createOnScreenKeypad();
+
+        return canvasComp;
+    }
 
+    void eswtInitGraphics() {
+        // create graphics buffer
+        graphicsBuffer = Buffer.createInstance(this, canvasComp);
+    }
+	
+    /**
+     * Creates OSK(OnScreenKeypad), shared Keypad will be created for Canvas, 
+     * seperate OSK will be created for each GameCanvas.
+     */
+    CanvasKeypad createOnScreenKeypad()
+    {
         // Read the on screen keypad settings from the jad attribute
         String oskAttr = JadAttributeUtil
                          .getValue(JadAttributeUtil.ATTRIB_NOKIA_MIDLET_ON_SCREEN_KEYPAD);
@@ -298,23 +455,63 @@
                      .equalsIgnoreCase(JadAttributeUtil.VALUE_GAMEACTIONS)) || (oskAttr
                              .equalsIgnoreCase(JadAttributeUtil.VALUE_NAVIGATIONKEYS))))
         {
-
             // On screen keypad is required, On devices without keyboard it can
             // be either navigation keys or navigation and game keys
-            onScreenkeypad = new CanvasKeypad(this, canvasComp, oskAttr);
+
+            if(isMode(GAME_CANVAS))
+            {
+                onScreenkeypad = new CanvasKeypad(this, oskAttr);
+                return onScreenkeypad;
+            }
+
+            if(sharedKeypad == null)
+            {
+                sharedKeypad = new CanvasKeypad(this, oskAttr);
+            }
+            onScreenkeypad = sharedKeypad;
+            return onScreenkeypad;
         }
 
-        // create graphics buffer
-        graphicsBuffer = Buffer.createInstance(this, canvasComp);
+        return null;
+    }
+
 
-        return canvasComp;
+    Rectangle eswtLayoutShellContent()
+    {
+        Rectangle shellArea = mShell.getClientArea();
+        int oskHeight = (onScreenkeypad != null ? onScreenkeypad.getHeight() : 0);
+        int tickerHeight = (tickerLabel != null ? tickerLabel.getBounds().height : 0);
+
+        canvasComp.setBounds(0, tickerHeight,
+                              shellArea.width, shellArea.height - tickerHeight - oskHeight);
+
+        canvasComp.setFocus();
+        return canvasComp.getClientArea();
     }
 
+
     /* (non-Javadoc)
      * @see Displayable#eswtHandleShowCurrentEvent()
      */
     void eswtHandleShowCurrentEvent()
     {
+        setMode(CURRENTLY_VISIBLE, true);
+        eswtSetTitle();
+        ((MobileShell) mShell).setFullScreenMode(isMode(FULLSCREEN_MODE));
+        if(onScreenkeypad != null)
+        {
+            if(!isMode(GAME_CANVAS))
+            {
+                onScreenkeypad.setCurrentCanvas(this);
+            }
+            onScreenkeypad.setFullScreenMode(isMode(FULLSCREEN_MODE));
+        }
+        canvasComp.setVisible(true);
+        if(tickerLabel != null)
+        {
+            tickerLabel.setVisible(!isMode(FULLSCREEN_MODE));
+        }
+        addCommands();
         super.eswtHandleShowCurrentEvent();
         getContentComp().addPaintListener(paintListener);
         getContentComp().addMouseListener(mouseListener);
@@ -326,6 +523,13 @@
      */
     void eswtHandleHideCurrentEvent()
     {
+        setMode(CURRENTLY_VISIBLE, false);
+        canvasComp.setVisible(false);
+        if(tickerLabel != null)
+        {
+            tickerLabel.setVisible(false);
+        }
+        removeCommands();
         super.eswtHandleHideCurrentEvent();
         getContentComp().removePaintListener(paintListener);
         getContentComp().removeMouseListener(mouseListener);
@@ -333,6 +537,48 @@
     }
 
     /**
+     * eSWT callback to add a Command.
+     */
+    void eswtAddCommand(Command cmd) {
+        if (isMode(CURRENTLY_VISIBLE)) {
+            cmd.eswtAddESWTCommand(mShell, false);
+        }
+        if (eswtIsShown()) {
+            cmd.eswtAddCommandSelectionListener(mShell, getCommandListener());
+        }
+    }
+
+    /**
+     * Adds the commands to this Canvas.
+     * Adds all the commands of displayable to the shell.
+     */
+    void addCommands()
+    {
+        Command cmd = null;
+        for (Enumeration e = getCommands().elements(); e.hasMoreElements();)
+        {
+            cmd = (Command) e.nextElement();
+            final Command finalCommand = cmd;
+            finalCommand.eswtAddESWTCommand(mShell, false);
+        }
+    }
+
+    /**
+     * Removes the commands from this Canvas.
+     * Removes all the commands of displayable from the shell.
+     */
+    void removeCommands()
+    {
+        Command cmd = null;
+        for (Enumeration e = getCommands().elements(); e.hasMoreElements();)
+        {
+            cmd = (Command) e.nextElement();
+            final Command finalCommand = cmd;
+            finalCommand.eswtRemoveESWTCommand(mShell);
+        }
+    }
+
+    /**
      * Issues the request to repaint the whole Canvas.
      */
     public void repaint()
@@ -368,14 +614,14 @@
                 // removed from the queue but repaintPending is still true. In
                 // that case it's currently being processed and we can still
                 // add to the invalid area.
-                if(!repaintPending)
+                if(!isMode(REPAINT_PENDING))
                 {
                     EventDispatcher eventDispatcher = EventDispatcher.instance();
                     LCDUIEvent event = eventDispatcher.newEvent(
                                            LCDUIEvent.CANVAS_PAINT_MIDLET_REQUEST, this);
                     event.widget = getContentComp();
                     eventDispatcher.postEvent(event);
-                    repaintPending = true;
+                    setMode(REPAINT_PENDING, true);
                 }
             }
         }
@@ -386,18 +632,39 @@
      *
      * @param mode - true switches the Canvas to the full-screen mode.
      */
-    public void setFullScreenMode(boolean mode)
+    public void setFullScreenMode(boolean aMode)
     {
-        finalMode = mode;
+        setMode(FULLSCREEN_MODE, aMode);
         ESWTUIThreadRunner.syncExec(new Runnable()
         {
             public void run()
             {
-                ((MobileShell) getShell()).setFullScreenMode(finalMode);
-                //set the CanvasKeypad to the required mode
-                if(onScreenkeypad != null)
+                if(tickerLabel != null)
                 {
-                    onScreenkeypad.setFullScreenMode(finalMode);
+                    if(isMode(FULLSCREEN_MODE))
+                    {
+                        tickerLabel.setBounds(Integer.MIN_VALUE, 0, 0, 0);
+                    }
+                    else
+                    {
+                        tickerLabel.pack();
+                        tickerLabel.setLocation(Integer.MIN_VALUE, 0);
+                    }
+
+					if(isMode(CURRENTLY_VISIBLE))
+					{
+	                    tickerLabel.setVisible(!isMode(FULLSCREEN_MODE));
+					}
+                }
+
+                if(isMode(CURRENTLY_VISIBLE))
+                {
+                    ((MobileShell)mShell).setFullScreenMode(isMode(FULLSCREEN_MODE));
+                    //set the CanvasKeypad to the required mode
+                    if(onScreenkeypad != null)
+                    {
+                        onScreenkeypad.setFullScreenMode(isMode(FULLSCREEN_MODE));
+                    }
                 }
             }
         });
@@ -619,23 +886,35 @@
      */
     final void initGameCanvas(boolean suppressKeys)
     {
-        this.suppressGameKeys = suppressKeys;
+        setMode(SUPPRESS_GAMEKEYS, suppressKeys);
     }
 
+
+    /**
+     * Gets composite that contains Canvas content.
+     *
+     * @return Composite.
+     */
+    Composite getContentComp()
+    {
+        return canvasComp;
+    }
+
+
     /**
      * Get game canvas frame buffer graphics.
      */
     final Graphics getGameBufferGraphics()
     {
-    	tempGraphics = null;
-   		ESWTUIThreadRunner.safeSyncExec(new Runnable() 
-		{
-			public void run()
-			{
-				tempGraphics =  graphicsBuffer.getGraphics();
-			}
-		});
-    	return tempGraphics;
+        tempGraphics = null;
+        ESWTUIThreadRunner.safeSyncExec(new Runnable() 
+        {
+            public void run()
+            {
+                tempGraphics =  graphicsBuffer.getGraphics();
+            }
+        });
+        return tempGraphics;
     }
 
     CanvasKeypad getCanvasKeypad()
@@ -645,7 +924,7 @@
 
     boolean IsFullScreenMode()
     {
-        return finalMode;
+        return isMode(FULLSCREEN_MODE);
     }
 
     /**
@@ -679,18 +958,23 @@
     void flushGameBuffer(final int x, final int y, final int width,
                          final int height)
     {
-    	synchronized(graphicsBuffer)
+        // This is serialized with the 
+        // paint callback processing
+        synchronized(flushLock)
         {
-    		ESWTUIThreadRunner.safeSyncExec(new Runnable() 
-			{
-				public void run()
-				{
-					graphicsBuffer.sync();
-					graphicsBuffer.blitToDisplay(null, getContentComp());
-				}
-            });
+            synchronized(graphicsBuffer)
+            {
+                 ESWTUIThreadRunner.safeSyncExec(new Runnable() 
+                {
+                    public void run()
+                    {
+                        graphicsBuffer.sync();
+                        graphicsBuffer.blitToDisplay(null, getContentComp());
+                    }
+                });
+            }
         }
-    }	
+    }    
 
     /**
      * Called by ShellListener when shell gets activated.
@@ -704,7 +988,7 @@
 
         synchronized(cleanupLock)
         {
-            cleanupNeeded = true;
+            setMode(CLEANUP_NEEDED, true);
         }
 
         LCDUIEvent event = EventDispatcher.instance().newEvent(LCDUIEvent.CANVAS_SHOWNOTIFY, this);
@@ -733,7 +1017,7 @@
         graphicsBuffer.setControlBounds(getContentComp());
         synchronized(cleanupLock)
         {
-            cleanupNeeded = true;
+            setMode(CLEANUP_NEEDED, true);
         }
     }
 
@@ -753,6 +1037,26 @@
         }
     }
 
+    private void setMode(final int aMode, boolean value)
+    {
+        synchronized(modeLock)
+        {
+            if(value)
+            {
+                mode |= aMode;
+            }
+            else
+            {
+                mode &= ~aMode;
+            }
+        }
+    }
+
+    private boolean isMode(final int aMode)
+    {
+        return ((mode & aMode) != 0);
+    }
+
     /*
      * UI thread calls. Paint listener of the eSWT widget.
      */
@@ -761,12 +1065,12 @@
         public void paintControl(PaintEvent pe)
         {
             // Check if we got here from buffer flush
-        	if(graphicsBuffer.isPaintingActive()) 
-        	{
-        	    graphicsBuffer.blitToDisplay(pe.gc.getGCData().internalGc, null);
-        	}
-        	else
-        	{
+            if(graphicsBuffer.isPaintingActive()) 
+            {
+                graphicsBuffer.blitToDisplay(pe.gc.getGCData().internalGc, null);
+            }
+            else
+            {
                 // Native toolkit is requesting an update of an area that has
                 // become invalid. Can't do anything here because the contents
                 // need to be queried from the MIDlet in another thread by
@@ -784,7 +1088,7 @@
                 event.height = pe.height;
                 event.widget = pe.widget;
                 eventDispatcher.postEvent(event);
-        	}
+            }
         }
     }
 
@@ -834,97 +1138,104 @@
      */
     private final void doPaintCallback(final LCDUIEvent event)
     {
-        // Decide the area going to be painted by the callback.
-        final int redrawNowX;
-        final int redrawNowY;
-        final int redrawNowW;
-        final int redrawNowH;
-        // Before this thread obtains the repaintLock any repaint() calls
-        // will still be adding to the invalid area that is going to be
-        // painted by this callback.
-        synchronized(repaintLock)
+        synchronized(flushLock)
         {
-            if(event.type == LCDUIEvent.CANVAS_PAINT_NATIVE_REQUEST)
-            {
-                // Merge with possibly existing repaint() requests
-                invalidate(event.x, event.y, event.width, event.height);
-            }
-            else
-            {
-                // Need to add a new event to the queue in subsequent repaint()
-                // calls.
-                repaintPending = false;
-            }
-
-            // Store the current area to be painted
-            redrawNowX = repaintX1;
-            redrawNowY = repaintY1;
-            redrawNowW = repaintX2-repaintX1;
-            redrawNowH = repaintY2-repaintY1;
-
-
-            // After releasing the lock the repaint() calls will start with
-            // new invalid area.
-            repaintX1 = repaintX2 = repaintY1 = repaintY2 = 0;
-
-            // Don't do the callback if there's nothing to paint
-            if(!((redrawNowW > 0) && (redrawNowH > 0)))
+            // It's possible that this Canvas is sent to background
+            // right after the visibility is checked here, however
+            // it is okay as in such case we just do one extra paint 
+            // callback. The visibility change cannot be synchronized with
+            // this method, since it would expose implementation to deadlock
+            if(!isMode(CURRENTLY_VISIBLE))
             {
                 return;
             }
-        }
+            
+            // Decide the area going to be painted by the callback.
+            final int redrawNowX;
+            final int redrawNowY;
+            final int redrawNowW;
+            final int redrawNowH;
+            // Before this thread obtains the repaintLock any repaint() calls
+            // will still be adding to the invalid area that is going to be
+            // painted by this callback.
+            synchronized(repaintLock)
+            {
+                if(event.type == LCDUIEvent.CANVAS_PAINT_NATIVE_REQUEST)
+                {
+                    // Merge with possibly existing repaint() requests
+                    invalidate(event.x, event.y, event.width, event.height);
+                }
+                else
+                {
+                    // Need to add a new event to the queue in subsequent repaint()
+                    // calls.
+                    setMode(REPAINT_PENDING, false);
+                }
 
-        // Create instance of Graphics if not created yet
-        if(canvasGraphics == null)
-        {
-        	 ESWTUIThreadRunner.safeSyncExec(new Runnable() 
-             {
-          	    public void run()
-         	    {
-                    canvasGraphics = graphicsBuffer.getGraphics();
-                    canvasGraphics.setSyncStrategy(Graphics.SYNC_LEAVE_SURFACE_SESSION_OPEN);
-         	    }
-             });
-        }
+                // Store the current area to be painted
+                redrawNowX = repaintX1;
+                redrawNowY = repaintY1;
+                redrawNowW = repaintX2-repaintX1;
+                redrawNowH = repaintY2-repaintY1;
 
-        // Clean the background if dirty, buffer the operations.
-        synchronized(cleanupLock)
-        {
-            if(cleanupNeeded && noBackground)
-            {
-                // UI thread can change the contentArea object reference at
-                // any time. Store the object reference locally to ensure it
-                // points to the same rectangle all the time.
-                Rectangle contentArea = getContentArea();
+                // After releasing the lock the repaint() calls will start with
+                // new invalid area.
+                repaintX1 = repaintX2 = repaintY1 = repaintY2 = 0;
+
+                // Don't do the callback if there's nothing to paint
+                if(!((redrawNowW > 0) && (redrawNowH > 0)))
+                {
+                    return;
+                }
+            }
 
-                canvasGraphics.setClip(contentArea.x, contentArea.y,
-                                       contentArea.width, contentArea.height);
-                canvasGraphics.cleanBackground(contentArea);
-                cleanupNeeded = false;
+            // Create instance of Graphics if not created yet
+            if(canvasGraphics == null)
+            {
+                canvasGraphics = graphicsBuffer.getGraphics();
+                canvasGraphics.setSyncStrategy(Graphics.SYNC_LEAVE_SURFACE_SESSION_OPEN);
             }
-        }
 
-        // Clip must define the invalid area
-        canvasGraphics.setClip(redrawNowX, redrawNowY, redrawNowW, redrawNowH);
+            // Clean the background if dirty, buffer the operations.
+            synchronized(cleanupLock)
+            {
+                if(isMode(CLEANUP_NEEDED) && isMode(NO_BACKGROUND))
+                {
+                    // UI thread can change the contentArea object reference at
+                    // any time. Store the object reference locally to ensure it
+                    // points to the same rectangle all the time.
+                    Rectangle contentArea = getContentArea();
 
-        // The callback
-        paint(canvasGraphics);
+                    canvasGraphics.setClip(contentArea.x, contentArea.y,
+                                           contentArea.width, contentArea.height);
+                    canvasGraphics.cleanBackground(contentArea);
+                    setMode(CLEANUP_NEEDED, false);
+                }
+            }
 
-        // Blit frame to display
-        synchronized(graphicsBuffer) 
-        {
-            ESWTUIThreadRunner.safeSyncExec(new Runnable() 
+            // Clip must define the invalid area
+            canvasGraphics.reset();
+            canvasGraphics.setClip(redrawNowX, redrawNowY, redrawNowW, redrawNowH);
+
+            // The callback
+            paint(canvasGraphics);
+
+            // Blit frame to display
+            synchronized(graphicsBuffer) 
             {
-         	    public void run()
-        	    {
-        		    if(event.widget.isDisposed())
-        		    {
-        			    return;
-        		    }
-        		    graphicsBuffer.sync();
-        		    graphicsBuffer.blitToDisplay(null, event.widget);
-                }
-            });
+                ESWTUIThreadRunner.safeSyncExec(new Runnable() 
+                {
+                     public void run()
+                    {
+                        if(event.widget.isDisposed())
+                        {
+                            return;
+                        }
+                        graphicsBuffer.sync();
+                        graphicsBuffer.blitToDisplay(null, event.widget);
+                    }
+                });
+            }
         }
     }
 
@@ -944,11 +1255,11 @@
         Logger.method(this, "doKeyPressed", String.valueOf(keyCode));
         boolean sendCallback = false;
 
-        if(!(updateGameKeyState(keyCode, true) && suppressGameKeys))
+        if(!(updateGameKeyState(keyCode, true) && isMode(SUPPRESS_GAMEKEYS)))
         {
-            if((selectionKeyCompatibility == true) && (keyCode == -5))
+            if(isMode(SELECTIONKEY_COMPATIBILITY) && (keyCode == -5))
             {
-                if(finalMode == true)
+                if(isMode(FULLSCREEN_MODE))
                 {
                     if(!((getNumCommands() > 0) && hasCommandListener()))
                     {
@@ -964,7 +1275,7 @@
                     sendCallback = true;
                 }
             }
-            else if((selectionKeyCompatibility == false) && (keyCode == -5))
+            else if((!isMode(SELECTIONKEY_COMPATIBILITY)) && (keyCode == -5))
             {
                 sendCallback = false;
             }
@@ -1004,11 +1315,11 @@
     {
         Logger.method(this, "doKeyReleased", String.valueOf(keyCode));
         boolean sendCallback = false;
-        if(!(updateGameKeyState(keyCode, true) && suppressGameKeys))
+        if(!(updateGameKeyState(keyCode, true) && isMode(SUPPRESS_GAMEKEYS)))
         {
-            if((selectionKeyCompatibility == true) && (keyCode == -5))
+            if(isMode(SELECTIONKEY_COMPATIBILITY) && (keyCode == -5))
             {
-                if(finalMode == true)
+                if(isMode(FULLSCREEN_MODE))
                 {
                     if(!((getNumCommands() > 0) && hasCommandListener()))
                     {
@@ -1024,7 +1335,7 @@
                     sendCallback = true;
                 }
             }
-            else if((selectionKeyCompatibility == false) && (keyCode == -5))
+            else if((!isMode(SELECTIONKEY_COMPATIBILITY)) && (keyCode == -5))
             {
                 sendCallback = false;
             }
@@ -1097,10 +1408,10 @@
             e.y = event.y;
             EventDispatcher.instance().postEvent(e);
 
-            if(!disableTapDetection)
+            if(!isMode(DISABLE_TAPDETECTION))
             {
                 // Supress Drag events
-                suppressDragEvent = true;
+                setMode(SUPPRESS_DRAGEVENT, true);
 
                 pointerDownX = event.x;
                 pointerDownY = event.y;
@@ -1116,7 +1427,7 @@
             int pointerUpX = event.x;
             int pointerUpY = event.y;
 
-            if(!disableTapDetection)
+            if(!isMode(DISABLE_TAPDETECTION))
             {
                 if(timerTask != null)
                 {
@@ -1126,11 +1437,11 @@
 
                 // If Timer not expired and Mouseup is withing rectangle assign
                 // PointercDown to Pinter Up
-                if(suppressDragEvent && checkWithinRect(event.x, event.y))
+                if(isMode(SUPPRESS_DRAGEVENT) && checkWithinRect(event.x, event.y))
                 {
                     pointerUpX = pointerDownX;
                     pointerUpY = pointerDownY;
-                    suppressDragEvent = false;
+                    setMode(SUPPRESS_DRAGEVENT, false);
                 }
             }
 
@@ -1144,7 +1455,7 @@
         public void mouseMove(MouseEvent event)
         {
             // Check for timeout expiration and if PointerUp falls outside the rectangle
-            if(disableTapDetection || (!suppressDragEvent) || !checkWithinRect(event.x, event.y))
+            if(isMode(DISABLE_TAPDETECTION) || (!isMode(SUPPRESS_DRAGEVENT)) || !checkWithinRect(event.x, event.y))
             {
                 LCDUIEvent e = EventDispatcher.instance().newEvent(LCDUIEvent.CANVAS_POINTERDRAGGED,
                                javax.microedition.lcdui.Canvas.this);
@@ -1243,32 +1554,12 @@
         return valid;
     }
 
-    /**
-     * Disposes this instance
-     * Called when finalizer is destroying this instance.
-     */
-    void dispose()
-    {
-        super.dispose();
-        ESWTUIThreadRunner.safeSyncExec(new Runnable()
-        {
-            public void run()
-            {
-                if(graphicsBuffer != null)
-                {
-                    graphicsBuffer.dispose();
-                    graphicsBuffer = null;
-                }
-            }
-        });
-    }
-
     class CanvasTimerTask extends TimerTask
     {
 
         public void run()
         {
-            suppressDragEvent = false;
+            setMode(SUPPRESS_DRAGEVENT, false);
         }
     }
 }
--- a/javauis/lcdui_qt/src/javax/microedition/lcdui/CanvasBufferLinux.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/lcdui_qt/src/javax/microedition/lcdui/CanvasBufferLinux.java	Wed Jun 23 18:07:10 2010 +0300
@@ -40,19 +40,22 @@
         host = canvas;
 	}
     
-	protected void init() 
-    {
-    	super.init();
-    	surface = Internal_PackageSupport.getWindowsurface(host.getShell());
-    }
-	
 	void bindToHost(GraphicsContext gc) 
 	{
 		gc.bindTarget(surface);
 	}
 
+    void ensureWindowSurface() 
+    {
+    	if(surface == null)
+    	{
+    		surface = Internal_PackageSupport.getWindowsurface(host.getShell());
+    	}
+    }
+	
 	void beginPaint(int x, int y, int w, int h) 
 	{
+		ensureWindowSurface();
 		paintX = x; 
 		paintY = y;
 		paintW = w;
--- a/javauis/lcdui_qt/src/javax/microedition/lcdui/CanvasKeypad.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/lcdui_qt/src/javax/microedition/lcdui/CanvasKeypad.java	Wed Jun 23 18:07:10 2010 +0300
@@ -189,10 +189,9 @@
              * Constructs a canvas kepad based on the JAD attribute
              *
              * @param canvas - canvas for which the keypad is required.
-             * @param canvasComp - Composite corresponding to the canvas.
              * @param mode- the jad attribute as a string.
              */
-    CanvasKeypad(Canvas canvas, Composite canvasComp, String mode)
+    CanvasKeypad(Canvas canvas, String mode)
     {
 
         this.canvas = canvas;
@@ -244,7 +243,7 @@
         canvasData.left = new FormAttachment(0);
         canvasData.top = new FormAttachment(0);
         canvasData.bottom = new FormAttachment(keypadComposite);
-        canvasComp.setLayoutData(canvasData);
+        canvas.getContentComp().setLayoutData(canvasData);
 
         FormData navKeyData = new FormData();
         navKeyData.right = new FormAttachment(100);
@@ -438,6 +437,7 @@
         gameKeysComposite.layout();
     }
 
+
     /**
              * Handles orientation changes.
              */
@@ -448,6 +448,16 @@
 
 
     /**
+             * Sets the currect Canvas for Key events.
+             * @param canvas - Current Canvas to which the key events needs to be delivered.
+             */
+    void setCurrentCanvas(Canvas canvas)
+    {
+        this.canvas = canvas;
+    }
+
+
+    /**
              * Adds LSk and RSK keys to navigation keypad if the canvas is set to full screen mode.
              * @param mode- Indicates if the canvas is in fullscreen mode or not. True if fullscreen, False otherwise.
              */
--- a/javauis/lcdui_qt/src/javax/microedition/lcdui/CustomItem.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/lcdui_qt/src/javax/microedition/lcdui/CustomItem.java	Wed Jun 23 18:07:10 2010 +0300
@@ -68,7 +68,7 @@
 
     // Graphics command buffer for this instance
     Buffer graphicsBuffer;
-    Graphics CustomItemGraphics;
+    Graphics customItemGraphics;
 
     CustomItemLayouter layouter;
 
@@ -550,11 +550,11 @@
                     widgetDisposed = true;
                     return;
                 }
-                if(CustomItemGraphics == null)
+                if(customItemGraphics == null)
                 {
                     graphicsBuffer = Buffer.createInstance(self, (Control)event.widget);
-                    CustomItemGraphics = graphicsBuffer.getGraphics();
-                    CustomItemGraphics.setSyncStrategy(Graphics.SYNC_LEAVE_SURFACE_SESSION_OPEN);
+                    customItemGraphics = graphicsBuffer.getGraphics();
+                    customItemGraphics.setSyncStrategy(Graphics.SYNC_LEAVE_SURFACE_SESSION_OPEN);
                 }
                 else
                 {
@@ -583,17 +583,18 @@
                     contentHeight = this.contentHeight;
                 }
 
-                CustomItemGraphics.setClip(0, 0, contentWidth, contentHeight);
-                CustomItemGraphics.cleanBackground(new Rectangle(0, 0, contentWidth, contentHeight));
+                customItemGraphics.setClip(0, 0, contentWidth, contentHeight);
+                customItemGraphics.cleanBackground(new Rectangle(0, 0, contentWidth, contentHeight));
                 cleanupNeeded = false;
             }
         }
 
         // Clip must define the invalid area
-        CustomItemGraphics.setClip(redrawNowX, redrawNowY, redrawNowW, redrawNowH);
+        customItemGraphics.reset();
+        customItemGraphics.setClip(redrawNowX, redrawNowY, redrawNowW, redrawNowH);
 
         // The callback
-        paint(CustomItemGraphics, contentWidth, contentHeight);
+        paint(customItemGraphics, contentWidth, contentHeight);
 
         // Wait until the UI thread is available. Then in the UI thread
         // synchronously send a paint event.
--- a/javauis/lcdui_qt/src/javax/microedition/lcdui/Displayable.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/lcdui_qt/src/javax/microedition/lcdui/Displayable.java	Wed Jun 23 18:07:10 2010 +0300
@@ -126,10 +126,11 @@
         {
             public void run()
             {
-                shell = eswtConstructShell(SWT.SYSTEM_MODAL);
+                shell = eswtConstructShell(SWT.SHELL_TRIM | SWT.PRIMARY_MODAL);
                 eswtSetTitle();
                 contentComp = eswtConstructContent(SWT.NONE);
                 contentArea = eswtLayoutShellContent();
+                eswtInitGraphics();
             }
         });
     }
@@ -184,6 +185,13 @@
     }
 
     /**
+     * Initializes the Displayable for Graphics drawing. 
+     */
+    void eswtInitGraphics() {
+    
+    }
+    
+    /**
      * Called by Display when Displayable should become visible.
      */
     void eswtHandleShowCurrentEvent()
@@ -191,6 +199,10 @@
         if(!shell.isDisposed())
         {
             eswtUpdateSizes();
+            if(ticker != null)
+            {
+                ticker.start();
+            }
             shell.addShellListener(eswtShellListener);
             shell.addDisposeListener(eswtDisposeListener);
             shell.addControlListener(eswtControlListener);
@@ -343,6 +355,7 @@
         if(tickerLabel != null)
         {
             int tickerHeight = tickerLabel.getBounds().height;
+
             contentComp.setBounds(0, tickerHeight,
                                   shellArea.width, shellArea.height - tickerHeight);
         }
@@ -620,6 +633,26 @@
     }
 
     /**
+     * Gets the commands array.
+     *
+     * @return the commands
+     */
+    Vector getCommands()
+    {
+        return commands;
+    }
+
+    /**
+     * Gets the command listener.
+     *
+     * @return the eswt command listener.
+     */
+    final EswtCommandListener getCommandListener()
+    {
+        return eswtCommandListener;
+    }
+
+    /**
      * Gets width.
      *
      * @return Width of the Displayable in pixels.
@@ -690,10 +723,13 @@
         });
         if(ticker != null)
         {
-            // Start to scroll the ticker. Ticker may be already running
-            // if it exists in some other displayable already, but
-            // calling this again wont do any harm:
-            ticker.start();
+            if(isLcduiVisible)
+            {
+                // Start to scroll the ticker. Ticker may be already running
+                // if it exists in some other displayable already, but
+                // calling this again wont do any harm:
+                ticker.start();
+            }
         }
     }
 
@@ -746,7 +782,7 @@
     /**
      * Creates singleton Label instance used by Ticker.
      */
-    private Label getTickerLabel()
+    Label getTickerLabel()
     {
         if(tickerLabel == null)
         {
@@ -856,13 +892,17 @@
      */
     class EswtShellListener implements ShellListener
     {
-
+    
         public void shellActivated(ShellEvent e)
         {
-            if(!isShellActive)
+            ESWTUIThreadRunner.getInstance().getDisplay()
+            .asyncExec(new Runnable()
             {
-                handleShellActivatedEvent();
-            }
+                public void run()
+                {
+                    handleShellActivatedEvent();
+                }
+            });
         }
 
         public void shellDeactivated(ShellEvent e)
@@ -907,6 +947,7 @@
      */
     class EswtControlListener implements ControlListener
     {
+    
         public void controlResized(ControlEvent e)
         {
             eswtUpdateSizes();
--- a/javauis/lcdui_qt/src/javax/microedition/lcdui/Graphics.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/lcdui_qt/src/javax/microedition/lcdui/Graphics.java	Wed Jun 23 18:07:10 2010 +0300
@@ -95,15 +95,19 @@
     
     private DirectGraphics directGraphics;
     private Buffer graphicsBuffer;
-
-    // Current font for rendering texts.
+    
+    // Cache for settings
+    // these members have package visibility,
+    // however they meant to be accessed only by 
+    // this (Graphics) instance or related (Buffer) 
+    // greaphicsBuffer instance
     Font currentFont;
     int currentColor;
     int translateX;
     int translateY;
     int[] currentClip = new int[4];
     int currentStrokeStyle;
-
+    
     private com.nokia.mj.impl.rt.support.Finalizer finalizer;
 
     //Constructor
@@ -135,8 +139,8 @@
         currentClip[1] = clipRect.y;
         currentClip[2] = clipRect.width;
         currentClip[3] = clipRect.height;
+        setDefaultSettings();
         graphicsBuffer = buffer;
-        reset();
     }
 
 
@@ -154,16 +158,29 @@
 
     /**
      * Resets Graphics state to initial.
+     * Reset does not set the clip.
      */
     void reset()
     {
+    	synchronized(graphicsBuffer) {
+    		// setDefaultSettings() must be called 
+    		// before the setGraphicsDefaults() since
+    		// graphicsBuffer (Buffer implementation) uses 
+    		// the member values of this instance when setting the defaults
+    		setDefaultSettings();
+    		graphicsBuffer.setGraphicsDefaults(this);
+    	}
+    }
+
+    void setDefaultSettings() 
+    {
         currentFont = Buffer.defaultFont;
         currentColor = Buffer.defaultColor;
         currentStrokeStyle = Buffer.defaultStrokeStyle;
         translateX = Buffer.defaultTranslateX;
         translateY = Buffer.defaultTranslateY;
     }
-
+    
     /**
      * Cleans the Canvas background.
      */
@@ -193,11 +210,11 @@
      */
     void setSyncStrategy(int strategy)
     {
-    	if((strategy != SYNC_LEAVE_SURFACE_SESSION_CLOSED) && (strategy != SYNC_LEAVE_SURFACE_SESSION_OPEN)) 
-    	{
-    		throw new IllegalArgumentException("Internal: Invalid strategy value");
-    	}
-    	syncStrategy = strategy;
+        if((strategy != SYNC_LEAVE_SURFACE_SESSION_CLOSED) && (strategy != SYNC_LEAVE_SURFACE_SESSION_OPEN)) 
+        {
+            throw new IllegalArgumentException("Internal: Invalid strategy value");
+        }
+        syncStrategy = strategy;
     }
 
     /**
@@ -264,7 +281,7 @@
     {
         synchronized(graphicsBuffer)
         {
-            return currentColor >> 16;
+            return (currentColor >> 16) & COMPONENT_MASK;
         }
     }
 
@@ -875,20 +892,15 @@
             {
                 final Image localLcduiImage = image;
                 final org.eclipse.swt.internal.qt.graphics.Image localCgfxImage = 
-                	Internal_GfxPackageSupport.getImage(Image.getESWTImage(image));
+                    Internal_GfxPackageSupport.getImage(Image.getESWTImage(image));
                 final int localX = x;
                 final int localY = y;
                 final Graphics self = this;
                 
-                ESWTUIThreadRunner.safeSyncExec(new Runnable() 
-    			{
-    				public void run()
-    				{
-    					localLcduiImage.sync(false);
-    					graphicsBuffer.drawImage(localCgfxImage, localX, localY, self);
-    				}
-    			});
-                
+                if(image.graphicsBuffer.containsDrawnPrimitives()) {
+                    localLcduiImage.sync(true);
+                }
+                graphicsBuffer.drawImage(localCgfxImage, localX, localY, self);
             }
         }
     }
@@ -1182,26 +1194,22 @@
             final int gcTransform = Image.getCgTransformValue(transform);
             synchronized(srcImage.graphicsBuffer)
             {
-            	final Image localLcduiSrcImage = srcImage;
-            	final org.eclipse.swt.internal.qt.graphics.Image localCgfxImage = 
-                	Internal_GfxPackageSupport.getImage(Image.getESWTImage(srcImage));
-            	final int localX = x;
-            	final int localY = y;
-            	final int localW = width;
-            	final int localH = height;
-            	final int localXSrc = xSrc;
-            	final int localYSrc = ySrc;
-            	final int localGcTransform = gcTransform;
-            	final Graphics self = this;
-            	ESWTUIThreadRunner.safeSyncExec(new Runnable()
-                {
-                    public void run()
-                    {
-                    	localLcduiSrcImage.sync(false);
-                        graphicsBuffer.drawImage(localCgfxImage,
-                        		localX, localY, localW, localH, localXSrc, localYSrc, localW, localH, localGcTransform, self);
-                    }
-                });
+                final Image localLcduiSrcImage = srcImage;
+                final org.eclipse.swt.internal.qt.graphics.Image localCgfxImage = 
+                    Internal_GfxPackageSupport.getImage(Image.getESWTImage(srcImage));
+                final int localX = x;
+                final int localY = y;
+                final int localW = width;
+                final int localH = height;
+                final int localXSrc = xSrc;
+                final int localYSrc = ySrc;
+                final int localGcTransform = gcTransform;
+                final Graphics self = this;
+                if(srcImage.graphicsBuffer.containsDrawnPrimitives()) {
+                    localLcduiSrcImage.sync(true);
+                }
+                graphicsBuffer.drawImage(localCgfxImage,
+                    localX, localY, localW, localH, localXSrc, localYSrc, localW, localH, localGcTransform, self);
             }
         }
     }
@@ -1212,21 +1220,21 @@
      */
     void sync()
     {
-    	synchronized(graphicsBuffer) 
-    	{
-    		if(syncStrategy == SYNC_LEAVE_SURFACE_SESSION_OPEN)
-    		{
-    			// This instance is used only with paint callbacks, thus  
-    			// sync is called with the indication that surface paint  
-    			// session can be left open as it will be closed when the 
-    			// callback returns.
-    		    graphicsBuffer.sync(false);
-    		}
-    		else 
-    		{
-    			graphicsBuffer.sync(true);
-    		} 
-    	}
+        synchronized(graphicsBuffer) 
+        {
+            if(syncStrategy == SYNC_LEAVE_SURFACE_SESSION_OPEN)
+            {
+                // This instance is used only with paint callbacks, thus  
+                // sync is called with the indication that surface paint  
+                // session can be left open as it will be closed when the 
+                // callback returns.
+                graphicsBuffer.sync(false);
+            }
+            else 
+            {
+                graphicsBuffer.sync(true);
+            } 
+        }
     }
     
     
@@ -1243,14 +1251,14 @@
     }
 
     /**
-	 * Getter for graphics buffer.
-	 * @return The Buffer.
-	 */
+     * Getter for graphics buffer.
+     * @return The Buffer.
+     */
     Buffer getGraphicsBuffer()
     {
         return graphicsBuffer;
     }
-	
+    
     /**
      * Maps stroke style constant from values used by
      * Graphics to values defined in GraphicsContext
--- a/javauis/lcdui_qt/src/javax/microedition/lcdui/ImageBuffer.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/lcdui_qt/src/javax/microedition/lcdui/ImageBuffer.java	Wed Jun 23 18:07:10 2010 +0300
@@ -29,6 +29,7 @@
     ImageBuffer(Image image)
     {
         host = image;
+        setImageBounds(image.getWidth(), image.getHeight());
     }
 
     int getHostType()
--- a/javauis/m3g_qt/src/jni/graphics3d.inl	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/m3g_qt/src/jni/graphics3d.inl	Wed Jun 23 18:07:10 2010 +0300
@@ -22,7 +22,7 @@
 JNIEXPORT jboolean JNICALL Java_javax_microedition_m3g_Graphics3D__1isProperRenderer
 (JNIEnv* /*aEnv*/, jclass)
 {
-    EGLContext ctx;
+/*    EGLContext ctx;
     EGLConfig config;
     EGLSurface surf;
     EGLint attrib[5];
@@ -78,7 +78,8 @@
     eglDestroySurface(eglGetDisplay(0), surf);
     eglDestroyContext(eglGetDisplay(0), ctx);
 
-    return isProperRenderer;
+    return isProperRenderer;*/
+    return false;
 }
 
 /*
--- a/javauis/m3g_qt/src/jni/interface.inl	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/m3g_qt/src/jni/interface.inl	Wed Jun 23 18:07:10 2010 +0300
@@ -39,6 +39,14 @@
  */
 JNIEXPORT jint JNICALL Java_javax_microedition_m3g_Interface__1ctor(JNIEnv* aEnv, jclass)
 {
+    EGLDisplay oldDisplay = eglGetCurrentDisplay();
+    EGLSurface oldDrawSurface = eglGetCurrentSurface(EGL_DRAW);
+    EGLSurface oldReadSurface = eglGetCurrentSurface(EGL_READ);
+    EGLContext oldContext = eglGetCurrentContext();
+    EGLenum oldAPI = eglQueryAPI();
+    eglMakeCurrent( EGL_DEFAULT_DISPLAY, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT );
+    eglBindAPI( EGL_OPENGL_ES_API );
+    
     M3Gparams cs;
     memset(&cs, 0, sizeof(cs));
     cs.mallocFunc = malloc;
@@ -51,6 +59,10 @@
     //jint handle = eventSource->Execute(&createInterface, &cs);
     jint handle = (unsigned)m3gCreateInterface(&cs);
     M3G_DO_UNLOCK(aEnv);
+    
+    eglMakeCurrent( EGL_DEFAULT_DISPLAY, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT );
+    eglBindAPI( oldAPI );
+    eglMakeCurrent( oldDisplay, oldDrawSurface, oldReadSurface, oldContext );
     return handle;
 }
 
--- a/javauis/mmapi_qt/audiostreaming/src.mmf/cmmaaudiostreamplayer.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/audiostreaming/src.mmf/cmmaaudiostreamplayer.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -21,10 +21,10 @@
 #include <audiopreference.h>
 #include <logger.h>
 
-#include "CMMAAudioStreamPlayer.h"
-#include "CMMADataSourceStream.h"
-#include "MMAFunctionServer.h"
-#include "CMMAStreamHandler.h"
+#include "cmmaaudiostreamplayer.h"
+#include "cmmadatasourcestream.h"
+#include "mmafunctionserver.h"
+#include "cmmastreamhandler.h"
 
 const TInt KPlayerPriority = KAudioPriorityRecording;
 _LIT(KMMAStreamErrorMessage, "Internal error: %d");
--- a/javauis/mmapi_qt/audiostreaming/src.mmf/cmmaaudiostreamplayerfactory.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/audiostreaming/src.mmf/cmmaaudiostreamplayerfactory.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -19,7 +19,7 @@
 //  INCLUDE FILES
 #include <logger.h>
 #include "CMMAAudioStreamPlayerFactory.h"
-#include "CMMAAudioStreamPlayer.h"
+#include "cmmaaudiostreamplayer.h"
 #include "CMMAAudioVolumeControl.h"
 #include "CMMAStopTimeControl.h"
 #include "CMMAMMFResolver.h"
--- a/javauis/mmapi_qt/audiostreaming/src.mmf/cmmastreamhandler.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/audiostreaming/src.mmf/cmmastreamhandler.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -21,9 +21,9 @@
 #include <audiopreference.h>
 #include <logger.h>
 
-#include "CMMAStreamHandler.h"
-#include "CMMADataSourceStream.h"
-#include "MMAFunctionServer.h"
+#include "cmmastreamhandler.h"
+#include "cmmadatasourcestream.h"
+#include "mmafunctionserver.h"
 
 CMMAStreamHandler* CMMAStreamHandler::NewL(
     MMMAStreamHandlerListener& aListener,
--- a/javauis/mmapi_qt/baseline/inc/cmmadisplay.h	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/baseline/inc/cmmadisplay.h	Wed Jun 23 18:07:10 2010 +0300
@@ -50,7 +50,7 @@
     // Default constructor, protected to allow derivation
     CMMADisplay();
 
-    void Construct(MMAFunctionServer* eventSource ,jobject javadisplayref);
+    void Construct(MMAFunctionServer* eventSource ,JNIEnv* aJni, jobject javadisplayref);
 
 public: // Methods derived from MMMADisplay
     void DrawFrameL(const CFbsBitmap* aBitmap);
@@ -66,7 +66,8 @@
     void SetUIPlayer(MMMAGuiPlayer* player);
     TSize SourceSize();
     virtual void SourceSizeChanged(TInt aJavaControlWidth, TInt aJavaControlHeight,TInt x,TInt y, TRect aBoundsRect) = 0;
-
+    TBool iseSWT();
+    void SetFullscreenSize(TSize& aSize);
     /**
      * Gets notification that there is container to draw assigned
      *
@@ -267,9 +268,19 @@
     MMAFunctionServer* iEventSource;
     JNIEnv* iJni;
     jobject iJavaDisplayObject;
-		jclass iJavaDisplayClass;
-		TSize iFullScreenSize;
-		MMMAGuiPlayer* iUiPlayer;
+	jclass iJavaDisplayClass;
+	TSize iFullScreenSize;
+	MMMAGuiPlayer* iUiPlayer;
+	TBool iIseSWT;
+	jmethodID setRectID;
+	jfieldID iRectDimensionField;
+	jfieldID iDisplayboundarrField;
+	jmethodID setContentBoundID;
+	jmethodID removeContentBoundID;
+	jmethodID redrawControlID;
+	jmethodID getCallBackMethodID;
+	jobject iJavadisplayref;
+	jmethodID getBoundRectID;
 };
 
 #endif // CMMADISPLAY_H
--- a/javauis/mmapi_qt/baseline/inc/cmmaplayer.h	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/baseline/inc/cmmaplayer.h	Wed Jun 23 18:07:10 2010 +0300
@@ -134,7 +134,7 @@
      * @param aPlayer Player to use.
      * @param aIndex Control's index.
      */
-    IMPORT_C static CMMAControl* StaticControl(CMMAPlayer* aPlayer,
+    static CMMAControl* StaticControl(CMMAPlayer* aPlayer,
             TInt aIndex);
 
 public: // New methods
@@ -335,9 +335,9 @@
      */
     IMPORT_C void PostActionCompleted(TInt aError);
     
-    IMPORT_C void PostActionCompletedFile();   //LC work for S60 3.2
+    void PostActionCompletedFile();   //LC work for S60 3.2
     
-    IMPORT_C void PostActionCompletedStart();
+    void PostActionCompletedStart();
 protected: // new methods
     /**
      * @see StaticAddSourceStreamL
--- a/javauis/mmapi_qt/baseline/inc/cmmavideocontrol.h	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/baseline/inc/cmmavideocontrol.h	Wed Jun 23 18:07:10 2010 +0300
@@ -102,6 +102,7 @@
      * @param aDeleteRefEvent Event posted in the destructor.
      */
     static void StaticInitDynamicModeL(CMMAVideoControl* aVideoControl,
+                                       JNIEnv* aJni,
                                        TInt* aContentHandle,
                                        MMAFunctionServer* aEventSource,
                                        jobject aGUIObject,
@@ -171,7 +172,16 @@
 private:
 
     void SetForeground(TBool aForeground, TBool aUseEventServer);
-
+    
+public:
+    
+    enum TDisplaytype
+    {
+        EDISPLAY_CANVAS=0,
+        EDISPLAY_VIDEOITEM=1,
+        EDISPLAY_ESWT=2
+    };
+    
 protected:
     /**
      * Not owned.
--- a/javauis/mmapi_qt/baseline/inc/mmmadisplay.h	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/baseline/inc/mmmadisplay.h	Wed Jun 23 18:07:10 2010 +0300
@@ -202,6 +202,12 @@
     * arg 'placeholder' is used to identify the function, to be called back from UI Thread
     */ 
     virtual void CalledBackInUiThread(TInt placeholder) = 0;
+    
+    /**
+     * To check if the Display is eSWT or not 
+     */
+    virtual TBool iseSWT() = 0;
+    virtual void SetFullscreenSize(TSize& aFullscreenSize) = 0;
 };
 
 #endif // MMMADISPLAY_H
--- a/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/control/BaseDisplay.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/control/BaseDisplay.java	Wed Jun 23 18:07:10 2010 +0300
@@ -28,9 +28,11 @@
 {
     // represents native side of display and initialized by derived class
     protected int nativeDisplayHandle;
-    protected org.eclipse.swt.widgets.Control eswtCanvasControl;
+    protected org.eclipse.swt.widgets.Control iControl;
     private Rectangle rect;
     private int[] rectDimension = new int[ 4 ];
+    protected boolean iseSWT;
+
     public BaseDisplay()
     {
         rect = new Rectangle(0,0,0,0);
@@ -42,12 +44,20 @@
         */
     public void GetCallbackInUiThread(int aPlaceHolder)
     {
-        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"_+inside BaseDisplay : GetCallbackInUiThread");
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"_+inside BaseDisplay : GetCallbackInUiThread ++");
         final int val = aPlaceHolder;
         Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"_+inside BaseDisplay : GetCallbackInUiThread - aPlaceHolder = "+aPlaceHolder+"nativeDisplayHandle = "+nativeDisplayHandle);
         try
         {
-            final org.eclipse.swt.widgets.Display disp = com.nokia.mj.impl.nokialcdui.LCDUIInvoker.getEswtDisplay();
+            org.eclipse.swt.widgets.Display disp = null;
+            if (iseSWT)
+            {
+                disp = org.eclipse.swt.widgets.Display.getDefault();
+            }
+            else
+            {
+                disp = com.nokia.mj.impl.nokialcdui.LCDUIInvoker.getEswtDisplay();
+            }
             Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"_+inside BaseDisplay : GetCallbackInUiThread - got eswtdisplay");
             disp.syncExec(new Runnable()
             {
@@ -62,82 +72,112 @@
         {
             Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside BaseDisplay : GetCallbackInUiThread....exception is " + e.toString());
         }
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"_+inside BaseDisplay : GetCallbackInUiThread --");
 
     }
 
     public void setContentBound()
     {
-        System.out.println("inside BaseDisplay : setContentBound +");
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside BaseDisplay : setContentBound +");
         try
         {
 
-            final org.eclipse.swt.widgets.Display disp = com.nokia.mj.impl.nokialcdui.LCDUIInvoker.getEswtDisplay();
+            org.eclipse.swt.widgets.Display disp = null;
+            if (iseSWT)
+            {
+                disp = org.eclipse.swt.widgets.Display.getDefault();
+            }
+            else
+            {
+                disp = com.nokia.mj.impl.nokialcdui.LCDUIInvoker.getEswtDisplay();
+            }
             disp.syncExec(new Runnable()
             {
                 public void run()
                 {
-                    eswtCanvasControl.setBounds(rect);
+                    Rectangle arect = iControl.getBounds();
+                    rect.x = rect.x + arect.x;
+                    rect.y = rect.y + arect.y;
+                    iControl.setBounds(rect);
                 }
             });
         }
         catch (Exception e)
         {
-            System.out.println("inside BaseDisplay : setContentBound....exception is  " + e.toString());
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside BaseDisplay : setContentBound....exception is  " + e.toString());
         }
-        System.out.println("inside BaseDisplay : setContentBound -");
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside BaseDisplay : setContentBound -");
     }
 
 
     public void removeContentBound()
     {
-        System.out.println("inside BaseDisplay : removeContentBound +");
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside BaseDisplay : removeContentBound +");
         try
         {
 
-            final org.eclipse.swt.widgets.Display disp = com.nokia.mj.impl.nokialcdui.LCDUIInvoker.getEswtDisplay();
+            org.eclipse.swt.widgets.Display disp = null;
+            if (iseSWT)
+            {
+                disp = org.eclipse.swt.widgets.Display.getDefault();
+            }
+            else
+            {
+                disp = com.nokia.mj.impl.nokialcdui.LCDUIInvoker.getEswtDisplay();
+            }
             disp.syncExec(new Runnable()
             {
                 public void run()
                 {
                     Rectangle emptyRect = new Rectangle(0,0,0,0);
-                    eswtCanvasControl.setBounds(emptyRect);
+                    iControl.setBounds(emptyRect);
                 }
             });
         }
         catch (Exception e)
         {
-            System.out.println("inside BaseDisplay : removeContentBound....exception is  " + e.toString());
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside BaseDisplay : removeContentBound....exception is  " + e.toString());
         }
-        System.out.println("inside BaseDisplay : removeContentBound -");
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside BaseDisplay : removeContentBound -");
     }
 
     public void redrawControl()
     {
-        System.out.println("inside BaseDisplay : redrawControl +");
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside BaseDisplay : redrawControl +");
         try
         {
 
-            final org.eclipse.swt.widgets.Display disp = com.nokia.mj.impl.nokialcdui.LCDUIInvoker.getEswtDisplay();
+            org.eclipse.swt.widgets.Display disp = null;
+            if (iseSWT)
+            {
+                disp = org.eclipse.swt.widgets.Display.getDefault();
+            }
+            else
+            {
+                disp = com.nokia.mj.impl.nokialcdui.LCDUIInvoker.getEswtDisplay();
+            }
             disp.syncExec(new Runnable()
             {
                 public void run()
                 {
+                    Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside BaseDisplay : redrawControl before redraw");
                     // redraw entire bounds of receiver
-                    eswtCanvasControl.redraw();
+                    iControl.redraw();
                 }
             });
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside BaseDisplay : redrawControl after redraw");
         }
         catch (Exception e)
         {
-            System.out.println("inside BaseDisplay : redrawControl....exception is  " + e.toString());
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside BaseDisplay : redrawControl....exception is  " + e.toString());
         }
-        System.out.println("inside BaseDisplay : redrawControl -");
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside BaseDisplay : redrawControl -");
     }
     /* called from native to reset the java side rect
-       Before the call of this function array is updated from native side
-       which can be used to refresh the UI screen rect and/or
-       set/remove bound rect
-      */
+    Before the call of this function array is updated from native side
+    which can be used to refresh the UI screen rect and/or
+    set/remove bound rect
+    */
     public void setRect()
     {
 
@@ -146,10 +186,39 @@
         rect.width = rectDimension[2];
         rect.height = rectDimension[3];
 
-        System.out.println("BaseDisplay : setRect rect is reset with values: x =" + rect.x +"y ="+ rect.y +"width ="+rect.width+"height = "+ rect.height);
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"BaseDisplay : setRect rect is reset with values: x =" + rect.x +"y ="+ rect.y +"width ="+rect.width+"height = "+ rect.height);
 
     }
 
+    public Rectangle getBounds()
+    {
+        try
+        {
+
+            org.eclipse.swt.widgets.Display disp = null;
+            if (iseSWT)
+            {
+                disp = org.eclipse.swt.widgets.Display.getDefault();
+            }
+            else
+            {
+                disp = com.nokia.mj.impl.nokialcdui.LCDUIInvoker.getEswtDisplay();
+            }
+            disp.syncExec(new Runnable()
+            {
+                public void run()
+                {
+
+                    rect = iControl.getBounds();
+                }
+            });
+        }
+        catch (Exception e)
+        {
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"  " + e.toString());
+        }
+        return rect;
+    }
     // abstract functions implemented by concrete class
     protected abstract void setDisplaySize(int aWidth, int aHeight);
     protected abstract void setDisplayFullScreen(final boolean aFullScreenMode);
@@ -162,7 +231,7 @@
     protected abstract int getSourceWidth();
     protected abstract int getSourceHeight();
     protected abstract void getBoundRect();
-    protected abstract void setWindowResources(VideoItem aVideoItem);
+    public abstract void setWindowResources(VideoItem aVideoItem);
     protected abstract void setNativeHandle(int handle);
     public abstract void setContainerVisibilityToNative(final boolean active);
     // Native methods
--- a/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/control/ItemDisplay.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/control/ItemDisplay.java	Wed Jun 23 18:07:10 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002 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"
@@ -36,12 +36,13 @@
 {
 
     private int iEventSourceHandle;
-    private org.eclipse.swt.widgets.Control iEswtItemControl;
+
     private MMAPIeSWTObserver iEswtObserver;
     private int x;
     private int y;
     private int qwidgetHandle;
     Rectangle iFormRect;
+    private boolean iQWidgetHandleSet = false;
 
     // index 0 : x-coordinate of topleft corner of display
     // index 1 : y-coordinate of topleft corner of display
@@ -65,7 +66,7 @@
 
 
         iEswtObserver = new MMAPIeSWTObserver();
-        //iEswtItemControl = com.nokia.mj.impl.nokialcdui.LCDUIInvoker.getEswtControl(item);
+        //iControl = com.nokia.mj.impl.nokialcdui.LCDUIInvoker.getEswtControl(item);
         com.nokia.mj.impl.nokialcdui.LCDUIInvoker.setItemControlStateChangeListener((ItemControlStateChangeListener)this,(javax.microedition.lcdui.Item) aVideoItem);
         Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"ItemDisplay.java - ");
 
@@ -74,9 +75,9 @@
 
     private void addListeners()
     {
-        iEswtObserver.addControlListenerToControl(iEswtItemControl);
-        iEswtObserver.addShellListenerToControl(iEswtItemControl);
-        iEswtObserver.addDisposeListenerToControl(iEswtItemControl);
+        iEswtObserver.addControlListenerToControl(iControl);
+        iEswtObserver.addShellListenerToControl(iControl);
+        iEswtObserver.addDisposeListenerToControl(iControl);
     }
 
     public void setNativeHandle(int handle)
@@ -107,13 +108,13 @@
                 public void run()
                 {
                     org.eclipse.swt.graphics.Point size = new org.eclipse.swt.graphics.Point(width,height);
-                    iEswtItemControl.setSize(size);
+                    iControl.setSize(size);
                 }
             });
         }
         catch (Exception e)
         {
-            System.out.println("inside videoControl's setDisplaySize....exception is " + e.toString());
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplaySize....exception is " + e.toString());
             e.printStackTrace();
         }
         Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"ItemDisplay.java: setDisplaySize - ");
@@ -130,7 +131,7 @@
             {
                 public void run()
                 {
-                    iEswtItemControl.setBounds(disp.getClientArea());
+                    iControl.setBounds(disp.getClientArea());
                     new MobileShell(disp).setFullScreenMode(aFullScreenMode);
                     // instruct native to switch to full screen mode
                     _setFullScreenMode(nativeDisplayHandle,aFullScreenMode);
@@ -160,13 +161,13 @@
             {
                 public void run()
                 {
-                    iEswtItemControl.setLocation(x , y);
+                    iControl.setLocation(x , y);
                 }
             });
         }
         catch (Exception e)
         {
-            System.out.println("inside videoControl's setDisplaySize....exception is " + e.toString());
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplaySize....exception is " + e.toString());
             e.printStackTrace();
         }
         Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"ItemDisplay.java: setDisplayLocation - ");
@@ -177,6 +178,9 @@
     public void setVisible(boolean aVisible)
     {
         Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"ItemDisplay.java: setVisible + ");
+        // call native side to set the visibiity
+        _setVisible(nativeDisplayHandle,aVisible);
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"ItemDisplay.java: setVisible after _setVisible ");
         try
         {
             final boolean visible = aVisible;
@@ -185,15 +189,16 @@
             {
                 public void run()
                 {
-                    // iEswtItemControl.setVisible(visible);
-                    // call native side to set the visibiity
-                    _setVisible(nativeDisplayHandle,visible);
+
+
+                    Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"before calling iControl.setVisible");
+                    iControl.setVisible(visible);
                 }
             });
         }
         catch (Exception e)
         {
-            System.out.println("inside videoControl's setDisplaySize....exception is " + e.toString());
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplaySize....exception is " + e.toString());
             e.printStackTrace();
         }
         Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"ItemDisplay.java: setVisible - ");
@@ -211,13 +216,13 @@
 
                 public void run()
                 {
-                    y = iEswtItemControl.getSize().y;
+                    y = iControl.getSize().y;
                 }
             });
         }
         catch (Exception e)
         {
-            System.out.println("inside videoControl's setDisplaySize....exception is " + e.toString());
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplaySize....exception is " + e.toString());
             e.printStackTrace();
         }
         Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"ItemDisplay.java: getDisplayHeight - ");
@@ -235,14 +240,14 @@
             {
                 public void run()
                 {
-                    x = iEswtItemControl.getSize().x;
+                    x = iControl.getSize().x;
 
                 }
             });
         }
         catch (Exception e)
         {
-            System.out.println("inside videoControl's setDisplaySize....exception is " + e.toString());
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplaySize....exception is " + e.toString());
             e.printStackTrace();
         }
         Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"ItemDisplay.java: getDisplayWidth - ");
@@ -259,14 +264,14 @@
             {
                 public void run()
                 {
-                    x = iEswtItemControl.getLocation().x;
+                    x = iControl.getLocation().x;
 
                 }
             });
         }
         catch (Exception e)
         {
-            System.out.println("inside videoControl's setDisplaySize....exception is " + e.toString());
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplaySize....exception is " + e.toString());
             e.printStackTrace();
         }
         Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"ItemDisplay.java: getDisplayX - ");
@@ -286,14 +291,14 @@
             {
                 public void run()
                 {
-                    y = iEswtItemControl.getLocation().y;
+                    y = iControl.getLocation().y;
 
                 }
             });
         }
         catch (Exception e)
         {
-            System.out.println("inside videoControl's setDisplaySize....exception is " + e.toString());
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplaySize....exception is " + e.toString());
             e.printStackTrace();
         }
         Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"ItemDisplay.java: getDisplayY - ");
@@ -326,13 +331,13 @@
             {
                 public void run()
                 {
-                    Rectangle boundrect  = iEswtItemControl.getBounds();
+                    Rectangle boundrect  = iControl.getBounds();
                     displayboundarr[0] = boundrect.x ;
                     displayboundarr[1] = boundrect.y ;
                     displayboundarr[2] = boundrect.width ;
                     displayboundarr[3] = boundrect.height ;
 
-                    Shell shell = iEswtItemControl.getShell();
+                    Shell shell = iControl.getShell();
                     iFormRect = shell.getBounds();
 
 
@@ -348,7 +353,7 @@
         }
         catch (Exception e)
         {
-            System.out.println("inside videoControl's setDisplaySize....exception is " + e.toString());
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplaySize....exception is " + e.toString());
             e.printStackTrace();
         }
         Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"ItemDisplay.java :getBoundRect() x =" + displayboundarr[0] + "y ="+ displayboundarr[1] +"width ="+ displayboundarr[2] +"height =" + displayboundarr[3]);
@@ -373,6 +378,8 @@
     public void setWindowResources(VideoItem aVideoItem)
     {
         Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"ItemDisplay.java: setWindowResources windowHandle ");
+
+        iQWidgetHandleSet = true;
         if (aVideoItem == null)
             Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"ItemDisplay.java: setWindowResources aVideoItem is null");
         // set the item size to be that of the video size if the video size is known.
@@ -382,9 +389,9 @@
 
         Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"ItemDisplay.java: after setting the size of item to source size ");
 
-        if (iEswtItemControl == null)
+        if (iControl == null)
         {
-            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"+ItemDisplay() -  iEswtItemControl is null");
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"+ItemDisplay() -  iControl is null");
         }
         try
         {
@@ -394,10 +401,10 @@
             {
                 public void run()
                 {
-                    Shell shell = iEswtItemControl.getShell();
+                    Shell shell = iControl.getShell();
                     qwidgetHandle = Internal_PackageSupport.topHandle(shell);
-                    x = iEswtItemControl.getSize().x;
-                    y = iEswtItemControl.getSize().y;
+                    x = iControl.getSize().x;
+                    y = iControl.getSize().y;
                     _setWindowToNative(nativeDisplayHandle,qwidgetHandle);
                     Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"ItemDisplay.java: setWindowResources qwidgetHandle is " + qwidgetHandle);
                 }
@@ -405,7 +412,7 @@
         }
         catch (Exception e)
         {
-            System.out.println("inside videoControl's setDisplaySize....exception is " + e.toString());
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplaySize....exception is " + e.toString());
             e.printStackTrace();
         }
         Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"ItemDisplay.java: setWindowResources qwidgetHandle(x,y) " +x+"," +y);
@@ -440,12 +447,15 @@
     public void notifyControlAvailable(org.eclipse.swt.widgets.Control ctrl,Item item)
     {
         Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"ItemDisplay.java : notifyControlAvailable + ");
-        iEswtItemControl = ctrl;
+        iControl = ctrl;
         /* now use the control and addobserver to the control
         and setwindowresources
         */
-        NativeResources nativeres = new NativeResources(this,iVideoItem);
-        nativeres.start();
+        if (iQWidgetHandleSet == false)
+        {
+            NativeResources nativeres = new NativeResources(this,iVideoItem);
+            nativeres.start();
+        }
 
         Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"ItemDisplay.java : notifyControlAvailable - ");
     }
@@ -472,8 +482,8 @@
                 final org.eclipse.swt.widgets.Display disp = com.nokia.mj.impl.nokialcdui.LCDUIInvoker.getEswtDisplay();
                  disp.syncExec(new Runnable() {
                                  public void run() {
-                                      x = iEswtItemControl.getSize().x;
-                                      y = iEswtItemControl.getSize().y;
+                                      x = iControl.getSize().x;
+                                      y = iControl.getSize().y;
 
                                  }
                     });
--- a/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/control/MMACanvasDisplay.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/control/MMACanvasDisplay.java	Wed Jun 23 18:07:10 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002 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"
@@ -24,7 +24,7 @@
 import org.eclipse.ercp.swt.mobile.MobileShell;
 import org.eclipse.swt.graphics.Rectangle;
 import com.nokia.microedition.media.control.VideoItem;
-
+import com.nokia.mj.impl.utils.Logger;
 
 
 public class MMACanvasDisplay extends BaseDisplay
@@ -51,20 +51,20 @@
     {
         iEventSourceHandle = aEventSourceHandle;
         eswtObserver = new MMAPIeSWTObserver();
-        eswtCanvasControl = com.nokia.mj.impl.nokialcdui.LCDUIInvoker.getEswtControl(canvas);
+        iControl = com.nokia.mj.impl.nokialcdui.LCDUIInvoker.getEswtControl(canvas);
         //super.setESWTControl(eswtCanvasControl);
     }
 
     private void addListeners()
     {
-        eswtObserver.addControlListenerToControl(eswtCanvasControl);
-        eswtObserver.addShellListenerToControl(eswtCanvasControl);
-        eswtObserver.addDisposeListenerToControl(eswtCanvasControl);
+        eswtObserver.addControlListenerToControl(iControl);
+        eswtObserver.addShellListenerToControl(iControl);
+        eswtObserver.addDisposeListenerToControl(iControl);
     }
 
     public void setNativeHandle(int handle)
     {
-        System.out.println("MMACanvasDisplay.java : setNativeHandle :" + handle);
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMACanvasDisplay.java : setNativeHandle :" + handle);
         nativeDisplayHandle = handle;
         eswtObserver.setDisplayToObserver(this);
         addListeners();
@@ -82,24 +82,24 @@
                 public void run()
                 {
                     org.eclipse.swt.graphics.Point size = new org.eclipse.swt.graphics.Point(width,height);
-                    eswtCanvasControl.redraw();
+                    iControl.redraw();
 
-                    System.out.println("inside videoControl's setDisplaySize redraw called");
+                    Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplaySize redraw called");
                 }
             });
         }
         catch (Exception e)
         {
-            System.out.println("inside videoControl's setDisplaySize....exception is " + e.toString());
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplaySize....exception is " + e.toString());
         }
 
 
-        System.out.println("inside videoControl's setDisplaySize +");
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplaySize +");
         _setDisplaySize(nativeDisplayHandle,
                         iEventSourceHandle,
                         aWidth,
                         aHeight);
-        System.out.println("inside videoControl's setDisplaySize -");
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplaySize -");
     }
 
     public void setDisplayFullScreen(final boolean aFullScreenMode)
@@ -112,16 +112,16 @@
             {
                 public void run()
                 {
-                    eswtCanvasControl.setBounds(disp.getClientArea());
-                    new MobileShell(disp).setFullScreenMode(aFullScreenMode);
+                    iControl.setBounds(disp.getClientArea());
+                    //new MobileShell(disp).setFullScreenMode(aFullScreenMode);
                     // instruct native to switch to full screen mode
-                    _setFullScreenMode(nativeDisplayHandle,aFullScreenMode);
+                    //_setFullScreenMode(nativeDisplayHandle,aFullScreenMode);
                 }
             });
         }
         catch (Exception e)
         {
-            System.out.println("inside videoControl's setDisplaySize....exception is " + e.toString());
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplaySize....exception is " + e.toString());
         }
 
     }
@@ -139,7 +139,7 @@
             {
                 public void run()
                 {
-                    org.eclipse.swt.graphics.Point topleftposition = eswtCanvasControl.getLocation();
+                    org.eclipse.swt.graphics.Point topleftposition = iControl.getLocation();
                     eSWTcontrolLocationX = topleftposition.x;
                     eSWTcontrolLocationY = topleftposition.y;
 
@@ -148,17 +148,17 @@
         }
         catch (Exception e)
         {
-            System.out.println("inside videoControl's setDisplaySize....exception is " + e.toString());
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplaySize....exception is " + e.toString());
         }
         // To Avoid UI thread block
-        System.out.println("inside videoControl's setDisplaySize before calling _setPosition ");
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplaySize before calling _setPosition ");
         _setPosition(nativeDisplayHandle,
                      iEventSourceHandle,
                      eSWTcontrolLocationX,
                      eSWTcontrolLocationY,
                      videoControlLocationX,
                      videoControlLocationY);
-        System.out.println("inside videoControl's setDisplaySize after calling _setPosition ");
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplaySize after calling _setPosition ");
 
         try
         {
@@ -167,19 +167,19 @@
             {
                 public void run()
                 {
-                    System.out.println("inside videoControl's setDisplaySize before redraw() ");
-                    eswtCanvasControl.redraw();
-                    System.out.println("inside videoControl's setDisplaySize after redraw() ");
+                    Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplaySize before redraw() ");
+                    iControl.redraw();
+                    Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplaySize after redraw() ");
                 }
             });
         }
         catch (Exception e)
         {
-            System.out.println("inside videoControl's setDisplayLocation in redraw()....exception is " + e.toString());
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplayLocation in redraw()....exception is " + e.toString());
         }
 
 
-        System.out.println("inside videoControl's setDisplayLocation coming out of setDisplayLocation()");
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplayLocation coming out of setDisplayLocation()");
     }
 
 
@@ -201,7 +201,7 @@
         }
         catch (Exception e)
         {
-            System.out.println("inside videoControl's setDisplaySize....exception is " + e.toString());
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplaySize....exception is " + e.toString());
         }
         //System.out.println("inside videoControl's setVisible before native call");
         // _setVisible(nativeDisplayHandle,aVisible);
@@ -220,13 +220,13 @@
 
                 public void run()
                 {
-                    y = eswtCanvasControl.getSize().y;
+                    y = iControl.getSize().y;
                 }
             });
         }
         catch (Exception e)
         {
-            System.out.println("inside videoControl's setDisplaySize....exception is " + e.toString());
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplaySize....exception is " + e.toString());
         }
         return y;
 
@@ -241,14 +241,14 @@
             {
                 public void run()
                 {
-                    x = eswtCanvasControl.getSize().x;
+                    x = iControl.getSize().x;
 
                 }
             });
         }
         catch (Exception e)
         {
-            System.out.println("inside videoControl's setDisplaySize....exception is " + e.toString());
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplaySize....exception is " + e.toString());
         }
 
         return x;
@@ -263,14 +263,14 @@
             {
                 public void run()
                 {
-                    x = eswtCanvasControl.getLocation().x;
+                    x = iControl.getLocation().x;
 
                 }
             });
         }
         catch (Exception e)
         {
-            System.out.println("inside videoControl's setDisplaySize....exception is " + e.toString());
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplaySize....exception is " + e.toString());
         }
         return x;
 
@@ -288,14 +288,14 @@
             {
                 public void run()
                 {
-                    y = eswtCanvasControl.getLocation().y;
+                    y = iControl.getLocation().y;
 
                 }
             });
         }
         catch (Exception e)
         {
-            System.out.println("inside videoControl's setDisplaySize....exception is " + e.toString());
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplaySize....exception is " + e.toString());
         }
         return y;
     }
@@ -317,7 +317,7 @@
 
     public void getBoundRect()
     {
-        System.out.println("MMACanvasDisplay.java :getBoundRect()");
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMACanvasDisplay.java :getBoundRect()");
 
         try
         {
@@ -326,7 +326,7 @@
             {
                 public void run()
                 {
-                    Rectangle boundrect  = eswtCanvasControl.getBounds();
+                    Rectangle boundrect  = iControl.getBounds();
                     displayboundarr[0] = boundrect.x ;
                     displayboundarr[1] = boundrect.y ;
                     displayboundarr[2] = boundrect.width ;
@@ -337,9 +337,9 @@
         }
         catch (Exception e)
         {
-            System.out.println("inside videoControl's setDisplaySize....exception is " + e.toString());
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplaySize....exception is " + e.toString());
         }
-        System.out.println("MMACanvasDisplay.java :getBoundRect() x =" + displayboundarr[0] + "y ="+ displayboundarr[1] +"width ="+ displayboundarr[2] +"height =" + displayboundarr[3]);
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMACanvasDisplay.java :getBoundRect() x =" + displayboundarr[0] + "y ="+ displayboundarr[1] +"width ="+ displayboundarr[2] +"height =" + displayboundarr[3]);
     }
 
 
@@ -353,22 +353,22 @@
 
     public void setContainerVisibilityToNative(final boolean active)
     {
-        System.out.println("MMACanvasDisplay.java : SetContainerVisibilityToNative + ");
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMACanvasDisplay.java : SetContainerVisibilityToNative + ");
         new Thread()
         {
             public void run()
             {
-                System.out.println("MMACanvasDisplay.java : SetContainerVisibilityToNative execute the native function in new thread ");
+                Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMACanvasDisplay.java : SetContainerVisibilityToNative execute the native function in new thread ");
                 _setContainerVisible(iEventSourceHandle,nativeDisplayHandle,active);
             }
         } .start();
 
-        System.out.println("MMACanvasDisplay.java : SetContainerVisibilityToNative - ");
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMACanvasDisplay.java : SetContainerVisibilityToNative - ");
     }
 
     public void setWindowResources(VideoItem aVideoItem)
     {
-        System.out.println("MMACanvasDisplay.java: setWindowResources windowHandle ");
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMACanvasDisplay.java: setWindowResources windowHandle ");
         try
         {
             final org.eclipse.swt.widgets.Display disp = com.nokia.mj.impl.nokialcdui.LCDUIInvoker.getEswtDisplay();
@@ -377,18 +377,18 @@
             {
                 public void run()
                 {
-                    Shell shell = eswtCanvasControl.getShell();
+                    Shell shell = iControl.getShell();
                     qwidgetHandle = Internal_PackageSupport.topHandle(shell);
-                    x = eswtCanvasControl.getSize().x;
-                    y = eswtCanvasControl.getSize().y;
+                    x = iControl.getSize().x;
+                    y = iControl.getSize().y;
                     _setWindowToNative(nativeDisplayHandle,qwidgetHandle);
-                    System.out.println("MMACanvasDisplay.java: setWindowResources qwidgetHandle is " + qwidgetHandle);
+                    Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMACanvasDisplay.java: setWindowResources qwidgetHandle is " + qwidgetHandle);
                 }
             });
         }
         catch (Exception e)
         {
-            System.out.println("inside videoControl's setDisplaySize....exception is " + e.toString());
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplaySize....exception is " + e.toString());
         }
         _setNativeWindowSize(nativeDisplayHandle,iEventSourceHandle,x,y);
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/control/MMAeSWTDisplay.java	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,455 @@
+/*
+* 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:
+*
+*/
+
+package com.nokia.microedition.media.control;
+
+import org.eclipse.ercp.swt.mobile.MobileShell;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Internal_PackageSupport;
+import org.eclipse.swt.widgets.Shell;
+import com.nokia.mj.impl.utils.Logger;
+
+public class MMAeSWTDisplay extends BaseDisplay
+{
+    private int iEventSourceHandle;
+    private int qwidgetHandle;
+    private int x;
+    private int y;
+    private int eSWTcontrolLocationX;
+    private int eSWTcontrolLocationY;
+
+    // index 0 : x-coordinate of topleft corner of display
+    // index 1 : y-coordinate of topleft corner of display
+    // index 3 : width of display
+    // index 4 : height of display
+
+    private int[] displayboundarr = new int[ 4 ];
+
+    //private org.eclipse.swt.widgets.Control iControl;
+    private MMAPIeSWTObserver eswtObserver;
+
+    public MMAeSWTDisplay(int aEventServerHandle, org.eclipse.swt.widgets.Control aControl)
+    {
+        iEventSourceHandle = aEventServerHandle;
+        iControl = aControl;
+        eswtObserver = new MMAPIeSWTObserver();
+        iseSWT = true;
+    }
+
+    private void addListeners()
+    {
+        eswtObserver.addControlListenerToControl(iControl);
+        eswtObserver.addShellListenerToControl(iControl);
+        eswtObserver.addDisposeListenerToControl(iControl);
+    }
+
+    /**
+     * Inherited from BaseDisplay.
+     */
+    /*public void GetCallbackInUiThread(int placeholder)
+    {
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside BaseDisplay : GetCallbackInUiThread +");
+        final int val = placeholder;
+        try{
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: BaseDisplay.java: GetCallbackInUiThread(): before Display.getDefault()");
+            final org.eclipse.swt.widgets.Display disp = org.eclipse.swt.widgets.Display.getDefault();
+            if(disp == null)
+            {
+                Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: BaseDisplay.java: GetCallbackInUiThread(): disp is null");
+            }
+            disp.syncExec(new Runnable() {
+             public void run() {
+                 Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: BaseDisplay.java: GetCallbackInUiThread(): Before native call");
+                          _nativeMethodCallInUiThread(nativeDisplayHandle , val);
+                        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: BaseDisplay.java: GetCallbackInUiThread(): After native call");
+                             }
+                         });
+           }
+         catch(Exception e)
+         {
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside BaseDisplay : GetCallbackInUiThread....exception is " + e.toString());
+         }
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside BaseDisplay : GetCallbackInUiThread -");
+    }*/
+
+    public void setNativeHandle(int handle)
+    {
+        nativeDisplayHandle = handle;
+        //eswtObserver.setDisplayToObserver(this);
+        //addListeners();
+    }
+
+    public void getBoundRect()
+    {
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMACanvasDisplay.java :getBoundRect()");
+
+        try
+        {
+            final org.eclipse.swt.widgets.Display display = org.eclipse.swt.widgets.Display.getDefault();
+            display.syncExec(new Runnable()
+            {
+                public void run()
+                {
+                    Rectangle boundrect  = iControl.getBounds();
+                    displayboundarr[0] = boundrect.x ;
+                    displayboundarr[1] = boundrect.y ;
+                    displayboundarr[2] = boundrect.width ;
+                    displayboundarr[3] = boundrect.height ;
+
+                }
+            });
+        }
+        catch (Exception e)
+        {
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside videoControl's setDisplaySize....exception is " + e.toString());
+        }
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMACanvasDisplay.java :getBoundRect() x =" + displayboundarr[0] + "y ="+ displayboundarr[1] +"width ="+ displayboundarr[2] +"height =" + displayboundarr[3]);
+    }
+
+    public int getDisplayHeight()
+    {
+        try
+        {
+            final org.eclipse.swt.widgets.Display display = org.eclipse.swt.widgets.Display.getDefault();
+
+            display.syncExec(new Runnable()
+            {
+                public void run()
+                {
+                    y = iControl.getSize().y;
+
+                }
+            });
+        }
+        catch (Exception e)
+        {
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: MMAeSWTDisplay.java: getDisplayHeight() ....exception is "
+                       + e.toString());
+        }
+
+        return y;
+    }
+
+    public int getDisplayWidth()
+    {
+        try
+        {
+            final org.eclipse.swt.widgets.Display display = org.eclipse.swt.widgets.Display.getDefault();
+
+            display.syncExec(new Runnable()
+            {
+
+                public void run()
+                {
+                    x = iControl.getSize().x;
+                }
+            });
+        }
+        catch (Exception e)
+        {
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: MMAeSWTDisplay.java: getDisplayWidth() ....exception is "
+                       + e.toString());
+        }
+        return x;
+    }
+
+    public int getDisplayX()
+    {
+
+        try
+        {
+            final org.eclipse.swt.widgets.Display display = org.eclipse.swt.widgets.Display.getDefault();
+            display.syncExec(new Runnable()
+            {
+                public void run()
+                {
+                    x = iControl.getLocation().x;
+
+                }
+            });
+        }
+        catch (Exception e)
+        {
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside MMAeSWTDisplay.java's getDisplayX....exception is " + e.toString());
+        }
+        return x;
+    }
+
+    protected int getDisplayY()
+    {
+        try
+        {
+            final org.eclipse.swt.widgets.Display display = org.eclipse.swt.widgets.Display.getDefault();
+            display.syncExec(new Runnable()
+            {
+                public void run()
+                {
+                    y = iControl.getLocation().y;
+
+                }
+            });
+        }
+        catch (Exception e)
+        {
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside MMAeSWTDisplay.java's getDisplayY....exception is " + e.toString());
+        }
+        return y;
+    }
+
+    public int getSourceHeight()
+    {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    public int getSourceWidth()
+    {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    public void setDisplayFullScreen(final boolean aFullScreenMode)
+    {
+        try
+        {
+
+            final org.eclipse.swt.widgets.Display display = org.eclipse.swt.widgets.Display.getDefault();
+
+            //display.syncExec(new Runnable() {
+            //public void run() {
+            iControl.setBounds(display.getClientArea());
+            System.out.println("enetr in to the full screen mode setDisplayFullScreen %d"+iControl.getBounds());
+//                  new MobileShell(display).setFullScreenMode(aFullScreenMode);
+            //((MobileShell)iControl.getShell()).setFullScreenMode(aFullScreenMode);
+            //  new Shell(display).setFullScreenMode(aFullScreenMode);
+            //((Shell)iControl.getShell()).setFullScreenMode(aFullScreenMode);
+            //TODO
+            // instruct native to switch to full screen mode
+            //_setFullScreenMode(nativeDisplayHandle, aFullScreenMode);
+            //}
+            //});
+        }
+        catch (Exception e)
+        {
+            System.out
+            .println("inside MMAeSWTDisplay.java: setDisplayFullScreen....exception is "
+                     + e.toString());
+            e.printStackTrace();
+        }
+
+
+    }
+
+    public void setDisplayLocation(int aX, int aY)
+    {
+
+        //Not required for eSWT since this function does not work for USE_GUI_PRIMITIVE
+
+        //Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: MMAeSWTDisplay.java: setDisplayLocation() +");
+        //final int videoControlLocationX = aX;
+        //final int videoControlLocationY = aY;
+
+        //try {
+        //  final org.eclipse.swt.widgets.Display display = org.eclipse.swt.widgets.Display.getDefault();
+        //  display.syncExec(new Runnable() {
+        //      public void run() {
+        ///         org.eclipse.swt.graphics.Point topleftposition = iControl
+        //                  .getLocation();
+        //          eSWTcontrolLocationX = topleftposition.x;
+        //          eSWTcontrolLocationY = topleftposition.y;
+        //          Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: MMAeSWTDisplay.java: setDisplayLocation(): eSWTcontrolLocationX="+eSWTcontrolLocationX +
+        //                  " eSWTcontrolLocationY=" + eSWTcontrolLocationY);
+        //  }
+        //});
+        //} catch (Exception e) {
+        //  System..println("inside MMAeSWTDisplay's setDisplayLocation....exception is "
+        //+ e.toString());
+        //}
+        // To Avoid UI thread block
+        //System.out
+        //      .println("inside MMAeSWTDisplay's setDisplayLocation before calling _setPosition ");
+        //_setPosition(nativeDisplayHandle, iEventSourceHandle,
+        //      eSWTcontrolLocationX, eSWTcontrolLocationY,
+        //      videoControlLocationX, videoControlLocationY);
+        //System.out
+        //.println("inside MMAeSWTDisplay's setDisplayLocation after calling _setPosition ");
+
+        //try {
+        //  final org.eclipse.swt.widgets.Display display = org.eclipse.swt.widgets.Display.getDefault();
+        //  display.syncExec(new Runnable() {
+        //      public void run() {
+        //          //System.out
+        //.println("inside MMAeSWTDisplay's setDisplayLocation before redraw() ");
+        //iControl.redraw();
+        //  System.out
+        //.println("inside MMAeSWTDisplay's setDisplayLocation after redraw() ");
+        //  }
+        //  });
+        //} catch (Exception e) {
+        //System.out
+        //.println("inside MMAeSWTDisplay's setDisplayLocation in redraw()....exception is "
+        //+ e.toString());
+        //  }
+
+        //Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: MMAeSWTDisplay.java: setDisplayLocation() -");
+
+
+
+    }
+
+    public void setDisplaySize(int aWidth, int aHeight)
+    {
+        final int width = aWidth;
+        final int height = aHeight;
+        try
+        {
+            final org.eclipse.swt.widgets.Display disp = org.eclipse.swt.widgets.Display.getDefault();
+
+            //disp.syncExec(new Runnable() {
+            //  public void run() {
+            org.eclipse.swt.graphics.Point size = new org.eclipse.swt.graphics.Point(
+                width, height);
+            //eswtCanvasControl.setSize(size);
+            iControl.setSize(size);
+            iControl.redraw();
+
+            System.out
+            .println("inside MMAeSWTDisplay.java's setDisplaySize redraw called");
+            //}
+            //});
+        }
+        catch (Exception e)
+        {
+            System.out
+            .println("inside MMAeSWTDisplay.java's setDisplaySize....exception is "
+                     + e.toString());
+        }
+
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside MMAeSWTDisplay.java's setDisplaySize");
+        //_setDisplaySize(nativeDisplayHandle, iEventSourceHandle, aWidth,
+        //      aHeight);
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside MMAeSWTDisplay.java's setDisplaySize -");
+
+    }
+
+
+
+    public void setVisible(boolean aVisible)
+    {
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: MMAeSWTDisplay.java: setVisible() + " + aVisible);
+        try
+        {
+            final boolean visible = aVisible;
+            final org.eclipse.swt.widgets.Display display = org.eclipse.swt.widgets.Display.getDefault();
+            display.asyncExec(new Runnable()
+            {
+                public void run()
+                {
+                    Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: MMAeSWTDisplay.java: setVisible() inside asyncExec run()");
+                    //eswtCanvasControl.setVisible(visible);
+                    // call native side to set the visibiity
+                    _setVisible(nativeDisplayHandle, visible);
+                    Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: MMAeSWTDisplay.java: _setVisible() native call completed");
+                }
+            });
+        }
+        catch (Exception e)
+        {
+            System.out
+            .println("MMAPI: MMAeSWTDisplay.java: setVisible() ....exception is "
+                     + e.toString());
+        }
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: MMAeSWTDisplay.java: setVisible() -");
+    }
+
+    public void setWindowResources(VideoItem aVideoItem)
+    {
+
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAeSWTDisplay.java: setWindowResources windowHandle + " + Thread.currentThread().getName());
+        try
+        {
+            final org.eclipse.swt.widgets.Display display = org.eclipse.swt.widgets.Display.getDefault();
+            display.syncExec(new Runnable()
+            {
+                public void run()
+                {
+                    Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAeSWTDisplay.java: setWindowResources() run() runnable = " + this.hashCode());
+                    Shell shell = iControl.getShell();
+                    qwidgetHandle = Internal_PackageSupport.topHandle(shell);
+                    x = iControl.getSize().x;
+                    y = iControl.getSize().y;
+                    _setWindowToNative(nativeDisplayHandle, qwidgetHandle);
+                    Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: MMAeSWTDisplay.java: setWindowResources(): calling _setNativeWindowSize() + " + Thread.currentThread().getName());
+                    _setNativeWindowSize(nativeDisplayHandle, iEventSourceHandle, x, y);
+                    Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAeSWTDisplay.java: setWindowResources last statement of syncExec");
+                }
+            });
+        }
+        catch (Exception e)
+        {
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside MMAeSWTDisplay.java's setWindowResources() ....exception is "
+                       + e.toString());
+        }
+        //Removed from here and added to syncexec above, since setWindowResources is called from new Thread this
+        //function is no longer in UI THREAD.
+
+        //Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: MMAeSWTDisplay.java: setWindowResources(): calling _setNativeWindowSize() + " + Thread.currentThread().getName() );
+        //_setNativeWindowSize(nativeDisplayHandle, iEventSourceHandle, x, y);
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: MMAeSWTDisplay.java: setWindowResources() - ");
+    }
+
+    public void getCallbackSourceSizeChanged(int width, int height)
+    {
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: MMAeSWTDisplay.java: getCallbackSourceSizeChanged() +");
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: MMAeSWTDisplay.java: getCallbackSourceSizeChanged() width = " + width + " height = " + height);
+        iControl.setSize(width, height);
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: MMAeSWTDisplay.java: getCallbackSourceSizeChanged() +");
+    }
+
+    public void setContainerVisibilityToNative(boolean active)
+    {
+        // TODO Auto-generated method stub
+
+    }
+
+    private native void _setVisible(int nativeDisplayHandle, boolean value);
+
+    private native void _setContainerVisible(int nativeDisplayHandle,
+            boolean value);
+
+    private native void _setFullScreenMode(int nativeDisplayHandle,
+                                           boolean value);
+
+    private native void _setWindowToNative(int nativeDisplayHandle,
+                                           int qwidgetHandle);
+
+    private native void _setNativeWindowSize(int nativeDisplayHandle,
+            int iEventSourceHandle, int width, int height);
+
+    private native void _setPosition(int nativeDisplayHandle,
+                                     int iEventSourceHandle, int uiControlLocationX,
+                                     int uiControlLocationY, int videoControlLocationX,
+                                     int videoControlLocationY);
+
+    private native void _setDisplaySize(int nativeDisplayHandle,
+                                        int iEventSourceHandle, int eSWTcontrolLocationX,
+                                        int eSWTcontrolLocationY);
+
+
+
+}
\ No newline at end of file
--- a/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/control/VideoControl.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/control/VideoControl.java	Wed Jun 23 18:07:10 2010 +0300
@@ -24,6 +24,7 @@
 import javax.microedition.midlet.MIDlet;
 import javax.microedition.lcdui.Item;
 import com.nokia.microedition.media.NativeError;
+import com.nokia.mj.impl.utils.Logger;
 
 //import com.symbian.midp.runtime.MIDletExecutor;
 import com.nokia.mj.impl.media.PlayerPermission;
@@ -102,6 +103,11 @@
     // class name used to check if eswt is included
     private static String ESWT_CONTROL = ".control";
 
+    //Contants for display type
+    private static final int DISPLAY_CANVAS = 0;
+    private static final int DISPLAY_VIDEOITEM = 1;
+    private static final int DISPLAY_ESWT = 2;
+
     protected int iStatus = NOT_INITIALIZED;
 
     // Needed for getting native handle from lcdui components
@@ -110,6 +116,7 @@
     private VideoItem iVideoItem;
     private Canvas iVideoCanvas;
     private Item iItem ;
+    private int iGuiType;
 
     BaseDisplay iDisplay;
 //    private MIDletInstance iMIDletInstance;
@@ -125,6 +132,11 @@
     // for midlet foreground statelistening
     //ToolkitInvoker iTlkitInvoker;
 
+    //ESWT
+    private org.eclipse.swt.widgets.Display eswtDisplay;
+    private Control iControl;
+    private ESWTProxyControl control;
+
     private Finalizer mFinalizer = new Finalizer()
     {
         public void finalizeImpl()
@@ -191,24 +203,26 @@
 
         Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside setDisplaySize()");
 
+        //canvasdisplay.setDisplaySize( aWidth, aHeight);
+        //iDisplay.setDisplaySize(aWidth, aHeight);
 
-        //canvasdisplay.setDisplaySize( aWidth, aHeight);
-        iDisplay.setDisplaySize(aWidth, aHeight);
-
-        /*
+        if (iGuiType == DISPLAY_ESWT)
+        {
+            iDisplay.setDisplaySize(aWidth, aHeight);
+        }
         int ret = setDisplayProperty(aWidth, aHeight, SET_DISPLAY_SIZE);
         if (ret < 0)
         {
             throw new MediaException("setDisplaySize() failed, SymbianOS error: "
-                                                    + ret);
+                                     + ret);
         }
         if (iStatus == USE_GUI_PRIMITIVE &&
                 iVideoItem != null)  // with dynamic display mode item can be null
         {
-            iVideoItem.privateInvalidate();
+            //iVideoItem.privateInvalidate();
         }
 
-        */
+
     }
 
     /**
@@ -217,17 +231,19 @@
      */
     public void setDisplayFullScreen(boolean aFullScreenMode) throws MediaException
     {
-        // checkState();
+        checkState();
+
         if (iStatus == NOT_INITIALIZED)
         {
             throw new IllegalStateException(
                 "VideoControl.initDisplayMode() not called yet");
         }
-        /*
+
         int ret;
         if (aFullScreenMode)
         {
-            ret = setDisplayProperty(SET_DISPLAY_FULLSCREEN_TRUE);
+            iDisplay.setDisplayFullScreen(aFullScreenMode);
+            ret = setDisplayProperty(360,487,SET_DISPLAY_FULLSCREEN_TRUE);
         }
         else
         {
@@ -239,10 +255,10 @@
             throw new MediaException();
         }
 
-        */
+
         Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside setDisplayFullScreen()");
         //canvasdisplay.setDisplayFullScreen( aFullScreenMode);
-        iDisplay.setDisplayFullScreen(aFullScreenMode);
+//       iDisplay.setDisplayFullScreen(aFullScreenMode);
 
 
     }
@@ -253,7 +269,7 @@
      */
     public void setDisplayLocation(int aX, int aY)
     {
-        // checkState();
+        checkState();
         Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"VideoControl.java :: setDisplayLocation x, y = " + aX + ","+ aY);
         if (iStatus == USE_GUI_PRIMITIVE)
         {
@@ -265,14 +281,14 @@
             // This method only works when the USE_DIRECT_VIDEO mode is set.
             throw new IllegalStateException();
         }
-        /*
-            // cannot fail -> ignore return value
-            setDisplayProperty(aX, aY, SET_DISPLAY_LOCATION);
-        */
+
+        // cannot fail -> ignore return value
+        setDisplayProperty(aX, aY, SET_DISPLAY_LOCATION);
+
 
         Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside setDisplayLocation()");
         //canvasdisplay.setDisplayLocation( aX , aY);
-        iDisplay.setDisplayLocation(aX , aY);
+        //iDisplay.setDisplayLocation(aX , aY);
 
     }
 
@@ -288,11 +304,11 @@
             throw new IllegalStateException(
                 "VideoControl.initDisplayMode() not called yet");
         }
-        /*if (aVisible)
+        if (aVisible)
         {
             // Update the foreground or background state of the midlet before
             // setting the visibility of the control
-            updateForeground();
+            //updateForeground();
             // cannot fail -> ignore return value
             setDisplayProperty(SET_DISPLAY_VISIBLE_TRUE);
         }
@@ -301,12 +317,12 @@
             // cannot fail -> ignore return value
             setDisplayProperty(SET_DISPLAY_VISIBLE_FALSE);
         }
-        */
+
         Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,
                    " before iDisplay.setVisible()");
         Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"inside setVisible()");
-        // canvasdisplay.setVisible( aVisible );
-        iDisplay.setVisible(aVisible);
+
+        //iDisplay.setVisible(aVisible);
         Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,
                    "after iDisplay.setVisible()");
 
@@ -320,18 +336,14 @@
      */
     public int getDisplayWidth()
     {
-        /*
-           checkState();
-           if (iStatus == NOT_INITIALIZED)
-           {
-               throw new IllegalStateException(
-               "VideoControl.initDisplayMode() not called yet");
-           }
-           int width = getControlProperty(PROPERTY_DISPLAY_WIDTH);
-           return width;
-           */
-        //return  canvasdisplay.getDisplayWidth( );
-        return iDisplay.getDisplayWidth();
+        checkState();
+        if (iStatus == NOT_INITIALIZED)
+        {
+            throw new IllegalStateException(
+                "VideoControl.initDisplayMode() not called yet");
+        }
+        int width = getControlProperty(PROPERTY_DISPLAY_WIDTH);
+        return width;
     }
 
     /**
@@ -340,17 +352,17 @@
      */
     public int getDisplayHeight()
     {
-        /* checkState();
-         if (iStatus == NOT_INITIALIZED)
-         {
-             throw new IllegalStateException(
-             "VideoControl.initDisplayMode() not called yet");
-         }
-         int height = getControlProperty(PROPERTY_DISPLAY_HEIGHT);
-         return height;
+        checkState();
+        if (iStatus == NOT_INITIALIZED)
+        {
+            throw new IllegalStateException(
+                "VideoControl.initDisplayMode() not called yet");
+        }
+        int height = getControlProperty(PROPERTY_DISPLAY_HEIGHT);
+        return height;
 
-         */
-        return  iDisplay.getDisplayHeight();
+
+        //return  iDisplay.getDisplayHeight();
     }
 
     /**
@@ -359,15 +371,15 @@
      */
     public int getDisplayX()
     {
-        /* checkState();
-         if (iStatus == NOT_INITIALIZED)
-         {
-             return UNDEFINED_RETURN_VALUE;
-         }
-         int x = getControlProperty(PROPERTY_DISPLAY_X);
-         return x;
-         */
-        return  iDisplay.getDisplayX();
+        checkState();
+        if (iStatus == NOT_INITIALIZED)
+        {
+            return UNDEFINED_RETURN_VALUE;
+        }
+        int x = getControlProperty(PROPERTY_DISPLAY_X);
+        return x;
+
+        //return  iDisplay.getDisplayX();
     }
 
     /**
@@ -376,7 +388,7 @@
      */
     public int getDisplayY()
     {
-        /*
+
         checkState();
         if (iStatus == NOT_INITIALIZED)
         {
@@ -385,8 +397,8 @@
         int y = getControlProperty(PROPERTY_DISPLAY_Y);
         return y;
 
-        */
-        return  iDisplay.getDisplayY();
+
+        // return  iDisplay.getDisplayY();
     }
 
     /**
@@ -395,16 +407,16 @@
      */
     public int getSourceWidth()
     {
-        /* checkState();
-         int width = getControlProperty(PROPERTY_SOURCE_WIDTH);
-         if (width <= 0)
-         {
-             width = 1;
-         }
-         return width;
+        checkState();
+        int width = getControlProperty(PROPERTY_SOURCE_WIDTH);
+        if (width <= 0)
+        {
+            width = 1;
+        }
+        return width;
 
-         */
-        return  iDisplay.getSourceWidth();
+
+        //return  0;//iDisplay.getSourceWidth();
     }
 
     /**
@@ -413,15 +425,15 @@
      */
     public int getSourceHeight()
     {
-        /*checkState();
+        checkState();
         int height = getControlProperty(PROPERTY_SOURCE_HEIGHT);
         if (height <= 0)
         {
             height = 1;
         }
         return height;
-        */
-        return  iDisplay.getSourceHeight();
+
+        //return  0;//iDisplay.getSourceHeight();
 
     }
 
@@ -492,6 +504,14 @@
                 "initDisplayMode() already called successfully");
         }
 
+        if (aArg != null && aArg.equals(Control.class.getName()))
+        {
+            eswtDisplay = org.eclipse.swt.widgets.Display.getDefault();
+        }
+        else
+        {
+            eswtDisplay = com.nokia.mj.impl.nokialcdui.LCDUIInvoker.getEswtDisplay();
+        }
         if (aMode == USE_GUI_PRIMITIVE)
         {
             Object guiObject = null;
@@ -508,6 +528,20 @@
                 else // try load dynamic display mode
                 {
                     guiObject = initDynamicDisplayMode(aArg);
+
+                    iControl = (Control)guiObject;
+
+                    iDisplay = new MMAeSWTDisplay(iEventSource, iControl);
+                    int handle = initNativeDisplay(iControl, iDisplay, iGuiType);
+                    Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: VideoControl.java: initDisplayMode(): nativeDisplayHandle = " + handle);
+                    iDisplay.setNativeHandle(handle);
+                    ESWTProxyControl proxyControl = (ESWTProxyControl)iControl;
+                    proxyControl.seteSWTDisplay(iDisplay);
+                    proxyControl.setNativeDisplayHandle(handle);
+                    //display.setWindowResources();
+
+                    iStatus = USE_GUI_PRIMITIVE;
+                    return iControl;
                 }
             }
 
@@ -521,7 +555,7 @@
             Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,
                        "VideoControl : creation of ItemDisplay");
 
-            int handle = initNativeDisplay(iVideoItem, iDisplay, true);
+            int handle = initNativeDisplay(iVideoItem, iDisplay, DISPLAY_VIDEOITEM);
             // here actual listener is added to iDisplay
             iDisplay.setNativeHandle(handle);
             iVideoItem.setNativeHandle(handle);
@@ -548,13 +582,14 @@
                     "For USE_DIRECT_VIDEO mode argument should not be null");
             }
             iVideoCanvas = (Canvas)aArg;
+            iGuiType = DISPLAY_CANVAS;
             // MMAPI UI 3.x req.
 
             iDisplay = new MMACanvasDisplay(iEventSource , iVideoCanvas);
 
             Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"VideoControl.java: after eswt control got from canvas has added observer");
 
-            int handle = initNativeDisplay(iVideoCanvas, iDisplay, false);
+            int handle = initNativeDisplay(iVideoCanvas, iDisplay, DISPLAY_CANVAS);
             // here actual listener is added to iDisplay
             iDisplay.setNativeHandle(handle);
             // Window resource initialization is done to the native video player
@@ -593,7 +628,7 @@
      * Initializes native display.
      *
      */
-    private int initNativeDisplay(Object aGuiObject, Object mmadisplay, boolean aGuiType)
+    private int initNativeDisplay(Object aGuiObject, Object mmadisplay, int aGuiType)
     {
         int handle = _initDisplayMode(iControlHandle,
                                       iEventSource,
@@ -613,7 +648,8 @@
     {
         return _getControlProperty(iControlHandle,
                                    iEventSource,
-                                   aPropertyType);
+                                   aPropertyType,
+                                   iGuiType);
     }
 
     /**
@@ -629,7 +665,8 @@
                                    iEventSource,
                                    aParamA,
                                    aParamB,
-                                   aPropertyType);
+                                   aPropertyType,
+                                   iGuiType);
     }
 
     /**
@@ -643,7 +680,8 @@
                                    iEventSource,
                                    0,
                                    0,
-                                   aPropertyType);
+                                   aPropertyType,
+                                   iGuiType);
     }
 
     /**
@@ -669,13 +707,23 @@
      */
     private Object initDynamicDisplayMode(Object aMode)
     {
-        MMAGUIFactory guiFactory = null;
+        //MMAGUIFactory guiFactory = null;
         try
         {
-            String className = ((String)aMode).toLowerCase() +
-                               GUI_FACTORY_CLASS_NAME;
-            Class guiClass = Class.forName(className);
-            guiFactory = (MMAGUIFactory)guiClass.newInstance();
+            // String className = ((String)aMode).toLowerCase();
+            //GUI_FACTORY_CLASS_NAME;*/
+            Class guiClass = Class.forName((String)aMode);
+            //guiFactory = (MMAGUIFactory)guiClass.newInstance();
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: VideoControl.java: After loading class");
+            eswtDisplay.syncExec(new Runnable()
+            {
+                public void run()
+                {
+                    Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: VideoControl.java: Before creating ESWTProxyControl.");
+                    control = new ESWTProxyControl();
+                    Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: VideoControl.java: ESWTProxyControl created.");
+                }
+            });
         }
         catch (ClassNotFoundException cnfe)
         {
@@ -684,19 +732,19 @@
                 "Mode not supported or invalid, " +
                 "valid modes are USE_DIRECT_VIDEO and USE_GUI_PRIMITIVE");
         }
-        catch (IllegalAccessException iae)
-        {
-            // if the class or initializer is not accessible
-            throw new IllegalArgumentException("Mode: " + aMode +
-                                               " caused " + iae);
-        }
-        catch (InstantiationException ie)
-        {
-            // if an application tries to instantiate an abstract class or an
-            // interface, or if the instantiation fails for some other reason
-            throw new IllegalArgumentException("Mode: " + aMode +
-                                               " caused " + ie);
-        }
+        /*       catch (IllegalAccessException iae)
+               {
+                   // if the class or initializer is not accessible
+                   throw new IllegalArgumentException("Mode: " + aMode +
+                                                      " caused " + iae);
+               }
+               catch (InstantiationException ie)
+               {
+                   // if an application tries to instantiate an abstract class or an
+                   // interface, or if the instantiation fails for some other reason
+                   throw new IllegalArgumentException("Mode: " + aMode +
+                                                      " caused " + ie);
+               }*/
         catch (ClassCastException cce)
         {
             // Thrown to indicate that the code has attempted to cast an
@@ -705,12 +753,13 @@
                                                " caused " + cce);
         }
 
-        Object guiObject = guiFactory.initDisplayMode();
+        //Object guiObject = guiFactory.initDisplayMode();
         // initNativeDisplay return handle MMMADirectContainer, 0 parameter
         // indicates that dynamic display will be used
         // MMAPI UI 3.x req.
         //  guiFactory.setContentHandle(initNativeDisplay(guiObject, 0));
-        return guiObject;
+        iGuiType = DISPLAY_ESWT;
+        return control;
     }
 
     /**
@@ -871,13 +920,15 @@
 
     private native int _getControlProperty(int aControlHandle,
                                            int aEventSourceHandle,
-                                           int aPropertyType);
+                                           int aPropertyType,
+                                           int aGuiType);
 
     private native int _setDisplayProperty(int aControlHandle,
                                            int aEventSourceHandle,
                                            int aParamA,
                                            int aParamB,
-                                           int aPropertyType);
+                                           int aPropertyType,
+                                           int aGuiType);
 
     private native int _getSnapshot(int aControlHandle,
                                     int aEventSourceHandle,
@@ -887,7 +938,7 @@
                                         int aEventSourceHandle,
                                         Object aJavaDisplay,
                                         Object aJavaDisplayObject,
-                                        boolean aGuiTYpe);
+                                        int aGuiTYpe);
     private native int _setForeground(int aControlHandle,
                                       int aEventSourceHandle,
                                       int aIsForeground);
--- a/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/control/VideoItem.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/control/VideoItem.java	Wed Jun 23 18:07:10 2010 +0300
@@ -23,6 +23,7 @@
 import javax.microedition.media.PlayerListener;
 import javax.microedition.media.Player;
 import javax.microedition.lcdui.*;
+import com.nokia.mj.impl.utils.Logger;
 
 /**
  * Item for VideoControl.
@@ -51,9 +52,10 @@
     // from PlayerListener
     public void playerUpdate(Player aPlayer, String aEvent, Object aEventData)
     {
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"VideoItem.Playerupdate +");
         if (aEvent == SIZE_CHANGED)
         {
-            invalidate();
+            //invalidate();
         }
     }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/mmapi_qt/baseline/javasrc/org/eclipse/swt/widgets/ESWTProxyControl.java	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,436 @@
+/*
+* 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:
+*
+*/
+
+package org.eclipse.swt.widgets;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ControlListener;
+import org.eclipse.swt.events.FocusListener;
+import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.events.MouseMoveListener;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.events.TraverseListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Shell;
+import com.nokia.mj.impl.utils.Logger;
+
+import com.nokia.microedition.media.control.BaseDisplay;
+
+
+public class ESWTProxyControl extends Control
+{
+    /**
+     *  this will be actual Shell, for which this class is acting like proxy
+     */
+    Control iControl;
+    BaseDisplay mmaDisplay;
+    private int iNativeDisplayHandle;
+
+    public ESWTProxyControl()
+    {
+        //super(Display.getDefault().getActiveShell(), SWT.BORDER);
+    }
+
+    public void setNativeDisplayHandle(int aNativeDisplayHandle)
+    {
+        this.iNativeDisplayHandle = aNativeDisplayHandle;
+    }
+    public void seteSWTDisplay(BaseDisplay aDisplay)
+    {
+        this.mmaDisplay = aDisplay;
+    }
+
+    /**
+     * Actual Control will be created here
+     */
+    public boolean setParent(Composite parent)
+    {
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: ESWTProxyControl.java: setParent()+");
+        int sourceWidth=0;
+        int sourceHeight=0;
+        //TODO Throw exception if null
+        if (parent == null)
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: ESWTProxyControl.java: setParent(): parent is null");
+        iControl= new Shell((Shell)parent);
+        int sourceSize[] = _getSourceSize(iNativeDisplayHandle);
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: ESWTProxyControl.java: setParent(): int[] length: " + sourceSize.length);
+
+        sourceWidth = sourceSize[0];
+        sourceHeight = sourceSize[1];
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: ESWTProxyControl.java: setParent(): sourceWidth= " + sourceWidth + " sourceHeight= " + sourceHeight);
+
+        ((Shell)iControl).open();
+        ((Shell)iControl).setSize(sourceWidth, sourceHeight);
+
+        new Thread(new Runnable()
+        {
+            public void run()
+            {
+                mmaDisplay.setWindowResources(null);
+            }
+        }).start();
+
+        return true;
+    }
+
+    /**
+     *
+     */
+    public void addControlListener(ControlListener aListener)
+    {
+        if (iControl!=null)
+        {
+            iControl.addControlListener(aListener);
+        }
+    }
+    /**
+     *
+     */
+    public void addFocusListener(FocusListener listener)
+    {
+        if (iControl!=null)iControl.addFocusListener(listener);
+    }
+    /**
+     *
+     */
+    public void addKeyListener(KeyListener listener)
+    {
+        if (iControl!=null)iControl.addKeyListener(listener);
+    }
+    public void addMouseListener(MouseListener listener)
+    {
+        if (iControl!=null)iControl.addMouseListener(listener);
+    }
+    public void addMouseMoveListener(MouseMoveListener listener)
+    {
+        if (iControl!=null)iControl.addMouseMoveListener(listener);
+    }
+    /**
+     *
+     */
+    public void addPaintListener(PaintListener aListener)
+    {
+        if (iControl!=null)iControl.addPaintListener(aListener);
+
+    }
+
+    public void addTraverseListener(TraverseListener listener)
+    {
+        if (iControl!=null)iControl.addTraverseListener(listener);
+    }
+    public Point computeSize(int wHint,
+                             int hHint)
+    {
+        Point point=null;
+        if (iControl!=null)point=iControl.computeSize(wHint, hHint);
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"ProxyControl::computeSize()"+point);
+        return point;
+    }
+
+    public Point computeSize(int wHint,
+                             int hHint,
+                             boolean changed)
+    {
+        Point point=null;
+        if (iControl!=null)point=iControl.computeSize(wHint, hHint,changed);
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"ProxyControl::computeSize()"+point+"Bolean changed "+changed);
+        return point;
+    }
+
+    public Color getBackground()
+    {
+        Color color=null;
+        if (iControl!=null)color=iControl.getBackground();
+        Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"ProxyControl::getBackground()");
+        return color;
+    }
+    public int getBorderWidth()
+    {
+        if (iControl!=null)return iControl.getBorderWidth();
+        else return 0;
+    }
+    public Rectangle getBounds()
+    {
+        if (iControl!=null) return iControl.getBounds();
+        else return null;
+    }
+    public boolean getEnabled()
+    {
+        if (iControl!=null) return iControl.getEnabled();
+        else return false;
+    }
+    public Font getFont()
+    {
+        if (iControl!=null)return iControl.getFont();
+        else return null;
+    }
+    public Color getForeground()
+    {
+        if (iControl!=null) return iControl.getForeground();
+        else return null;
+    }
+
+    public java.lang.Object getLayoutData()
+    {
+        if (iControl!=null) return iControl.getLayoutData();
+        else return null;
+    }
+
+    public Point getLocation()
+    {
+        if (iControl!=null) return iControl.getLocation();
+        else return null;
+    }
+
+    public Menu getMenu()
+    {
+        if (iControl!=null) return iControl.getMenu();
+        else return null;
+    }
+    public Composite getParent()
+    {
+        if (iControl!=null) return iControl.getParent();
+        else return null;
+    }
+    public Shell getShell()
+    {
+        if (iControl!=null)
+        {
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: ESWTProxyControl.java: getShell(): iControl is not null");
+            return (Shell)iControl;//.getShell();
+        }
+        else
+        {
+            Logger.LOG(Logger.EJavaMMAPI,Logger.EInfo,"MMAPI: ESWTProxyControl.java: getShell(): iControl is null");
+            return null;
+        }
+    }
+    public Point getSize()
+    {
+        if (iControl!=null) return iControl.getSize();
+        else return null;
+    }
+
+    public java.lang.String getToolTipText()
+    {
+        if (iControl!=null) return iControl.getToolTipText();
+        else return null;
+    }
+    public boolean getVisible()
+    {
+        if (iControl!=null)  return iControl.getVisible();
+        else return false;
+    }
+    public boolean isEnabled()
+    {
+        if (iControl!=null) return iControl.isEnabled();
+        else return false;
+    }
+
+    public boolean isFocusControl()
+    {
+        if (iControl!=null) return iControl.isFocusControl();
+        else return false;
+    }
+    public boolean isReparentable()
+    {
+        if (iControl!=null) return iControl.isReparentable();
+        else return false;
+    }
+
+    public boolean isVisible()
+    {
+        if (iControl!=null)return iControl.isVisible();
+        else return false;
+    }
+    public void moveAbove(Control control)
+    {
+        if (iControl!=null) iControl.moveAbove(control);
+    }
+    public void moveBelow(Control control)
+    {
+        if (iControl!=null) iControl.moveBelow(control);
+    }
+    public void pack()
+    {
+        if (iControl!=null) iControl.pack();
+    }
+    public void pack(boolean changed)
+    {
+        if (iControl!=null) iControl.pack(changed);
+    }
+    public void redraw()
+    {
+        if (iControl!=null) iControl.redraw();
+    }
+    public void redraw(int x,
+                       int y,
+                       int width,
+                       int height,
+                       boolean all)
+    {
+        if (iControl!=null) iControl.redraw(x,y,width,height, all);
+    }
+    public void removeControlListener(ControlListener listener)
+    {
+        if (iControl!=null) iControl.removeControlListener(listener);
+    }
+    public void removeFocusListener(FocusListener listener)
+    {
+        if (iControl!=null) iControl.removeFocusListener(listener);
+    }
+    public void removeMouseListener(MouseListener listener)
+    {
+        if (iControl!=null) iControl.removeMouseListener(listener);
+    }
+    public void removeMouseMoveListener(MouseMoveListener listener)
+    {
+        if (iControl!=null) iControl.removeMouseMoveListener(listener);
+    }
+    public void removePaintListener(PaintListener listener)
+    {
+        if (iControl!=null)iControl.removePaintListener(listener);
+    }
+    public void removeTraverseListener(TraverseListener listener)
+    {
+        if (iControl!=null)iControl.removeTraverseListener(listener);
+    }
+    public void setBounds(int x,
+                          int y,
+                          int width,
+                          int height)
+    {
+        if (iControl!=null)iControl.setBounds(x, y, width, height);
+    }
+    public void setBounds(Rectangle rect)
+    {
+        if (iControl!=null)iControl.setBounds(rect);
+    }
+    public void setCapture(boolean capture)
+    {
+        if (iControl!=null)iControl.setCapture(capture);
+    }
+    public void setEnabled(boolean enabled)
+    {
+        if (iControl!=null)iControl.setEnabled(enabled);
+    }
+    public boolean setFocus()
+    {
+        if (iControl!=null) return iControl.setFocus();
+        else return false;
+    }
+    public void setFont(Font font)
+    {
+        if (iControl!=null)iControl.setFont(font);
+    }
+    public void setForeground(Color color)
+    {
+        if (iControl!=null)iControl.setForeground(color);
+    }
+    public void setLayoutData(java.lang.Object layoutData)
+    {
+        if (iControl!=null)iControl.setLayoutData(layoutData);
+    }
+    public void setLocation(int x,
+                            int y)
+    {
+        if (iControl!=null)iControl.setLocation(x, y);
+    }
+
+    public void setLocation(Point location)
+    {
+        if (iControl!=null)iControl.setLocation(location);
+    }
+    public void setMenu(Menu menu)
+    {
+        if (iControl!=null)iControl.setMenu(menu);
+    }
+    public void setRedraw(boolean redraw)
+    {
+        if (iControl!=null)iControl.setRedraw(redraw);
+    }
+    public void setSize(int width,
+                        int height)
+    {
+        if (iControl!=null) iControl.setSize(width, height);
+    }
+
+    public void setSize(Point size)
+    {
+        if (iControl!=null) iControl.setSize(size);
+    }
+    public void setToolTipText(java.lang.String string)
+    {
+        if (iControl!=null)iControl.setToolTipText(string);
+    }
+    public void setVisible(boolean visible)
+    {
+        if (iControl!=null)iControl.setVisible(visible);
+    }
+    public Point toControl(int x,
+                           int y)
+    {
+        if (iControl!=null)return iControl.toControl(x, y);
+        else return null;
+    }
+    public Point toControl(Point point)
+    {
+        if (iControl!=null) return iControl.toControl(point);
+        else return null;
+    }
+    public Point toDisplay(int x,
+                           int y)
+    {
+        if (iControl!=null)return iControl.toDisplay(x,y);
+        else return null;
+    }
+    public Point toDisplay(Point point)
+    {
+        if (iControl!=null)return iControl.toDisplay(point);
+        else return null;
+    }
+    public boolean traverse(int traversal)
+    {
+        if (iControl!=null)return iControl.traverse(traversal);
+        else return false;
+    }
+    public void update()
+    {
+        if (iControl!=null)iControl.update();
+    }
+
+    public void checkSubclass()
+    {
+        // do nothing,sub-classing allowed
+    }
+
+    protected void internal_createHandle()
+    {
+        // TODO Auto-generated method stub
+
+    }
+
+    private native int[] _getSourceSize(int aNativeDisplayHandle);
+}
--- a/javauis/mmapi_qt/baseline/javasrc/org/eclipse/swt/widgets/ProxyControl.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/baseline/javasrc/org/eclipse/swt/widgets/ProxyControl.java	Wed Jun 23 18:07:10 2010 +0300
@@ -31,43 +31,46 @@
 
 /**
  * A Proxy Class for eSWT control.
- * 
+ *
  * Since re-parenting is not supported, thats why this class were needed.
  * When user will call the setParent function of Control(means this class), this class will create
- * the actual Control, for which it will be acting like a proxy. All further call to any function of  
- * this class will be delegated to the Control object, created in the setParent method. 
- * 
+ * the actual Control, for which it will be acting like a proxy. All further call to any function of
+ * this class will be delegated to the Control object, created in the setParent method.
+ *
  * @author d35kumar
  */
-public class ProxyControl extends Control {
+public class ProxyControl extends Control
+{
+
+    /**
+     *  this is actual Control(Shell), for which this class is acting like proxy
+     */
+    Control iControl;
+
+    /**
+     * Dimesion of this shell needs to be set
+     */
+    Point iDimension;
 
-	/**
-	 *  this is actual Control(Shell), for which this class is acting like proxy
-	 */
-	Control iControl;
-	
-	/**
-	 * Dimesion of this shell needs to be set 
-	 */
-	Point iDimension;
-	
-	/**
-	 * @param aDimension Dimension to be set for the control class
-	 */
-	public ProxyControl(Point aDimension) {
-		iDimension=aDimension;
-	}
-	
-	/**
-	 * Creates the actual control
-	 * @return true if it returns properly, 
-	 * 	or false if any exception is thrown during the execution of this function   
-	 */
-	public boolean setParent(Composite aParent){
-		if (aParent == null)
+    /**
+     * @param aDimension Dimension to be set for the control class
+     */
+    public ProxyControl(Point aDimension)
+    {
+        iDimension=aDimension;
+    }
+
+    /**
+     * Creates the actual control
+     * @return true if it returns properly,
+     *  or false if any exception is thrown during the execution of this function
+     */
+    public boolean setParent(Composite aParent)
+    {
+        if (aParent == null)
         {
-			SWT.error(SWT.ERROR_NULL_ARGUMENT);
-			return false;
+            SWT.error(SWT.ERROR_NULL_ARGUMENT);
+            return false;
         }
         if (aParent.isDisposed())
         {
@@ -78,278 +81,348 @@
 //        {
 //            return true;
 //        }
-		iControl= new Shell((Shell)aParent);
-		((Shell)iControl).open();
-		iControl.setSize(iDimension);
-		return true;
-	}
-	
-	/**
-	 * Passes the call to iControl, if it is not null, otherwise return silently 
-	 */
-	public void addControlListener(ControlListener aListener){
-		if(iControl!=null){
-			iControl.addControlListener(aListener);
-		}
-	}
-	/**
-	 * 
-	 */
-	public void addFocusListener(FocusListener listener){
-		if(iControl!=null)iControl.addFocusListener(listener);
-	}
-	/**
-	 * 
-	 */
-	public void addKeyListener(KeyListener listener){
-		if(iControl!=null)iControl.addKeyListener(listener);
-	}
-	public void addMouseListener(MouseListener listener){
-		if(iControl!=null)iControl.addMouseListener(listener);
-	}
-	public void addMouseMoveListener(MouseMoveListener listener){
-		if(iControl!=null)iControl.addMouseMoveListener(listener);
-	}
-	/**
-	 * 
-	 */
-	public void addPaintListener(PaintListener aListener){
-		if(iControl!=null)iControl.addPaintListener(aListener);
-			
-	}
-	
-	public void addTraverseListener(TraverseListener listener){
-		if(iControl!=null)iControl.addTraverseListener(listener);
-	}
-	public Point computeSize(int wHint,
-            int hHint){
-		Point point=null;
-		if(iControl!=null)point=iControl.computeSize(wHint, hHint);
-		return point;
-	}
-	
-	public Point computeSize(int wHint,
-            int hHint,
-            boolean changed){
-		Point point=null;
-		if(iControl!=null)point=iControl.computeSize(wHint, hHint,changed);
-		return point;
-	}
-	
-	public Color getBackground(){
-		Color color=null;
-		if(iControl!=null)color=iControl.getBackground();
-		return color;
-	}
-	public int getBorderWidth(){
-		if(iControl!=null)return iControl.getBorderWidth();
-		else return 0;
-	}
-	public Rectangle getBounds(){
-		if(iControl!=null) return iControl.getBounds();
-		else return null;
-	}
-	public boolean getEnabled(){
-		if(iControl!=null) return iControl.getEnabled();
-		else return false;
-	}
-	public Font getFont(){
-		if(iControl!=null)return iControl.getFont();
-		else return null;
-	}
-	public Color getForeground(){
-		if(iControl!=null) return iControl.getForeground();
-		else return null;
-	}
-	
-	public java.lang.Object getLayoutData(){
-		if(iControl!=null) return iControl.getLayoutData();
-		else return null;
-	}
-	
-	public Point getLocation(){
-		if(iControl!=null) return iControl.getLocation();
-		else return null;
-	}
-	
-	public Menu getMenu(){
-		if(iControl!=null) return iControl.getMenu();
-		else return null;
-	}
-	public Composite getParent(){
-		if(iControl!=null) return iControl.getParent();
-		else return null;
-	}
-	public Shell getShell(){
-		if(iControl!=null) return (Shell)iControl;
-		else return null;
-	}
-	public Point getSize(){
-		if(iControl!=null) return iControl.getSize();
-		else return null;
-	}
-	
-	public java.lang.String getToolTipText(){
-		if(iControl!=null) return iControl.getToolTipText();
-		else return null;
-	}
-	public boolean getVisible(){
-		if(iControl!=null)  return iControl.getVisible();
-		else return false;
-	}
-	public boolean isEnabled(){
-		if(iControl!=null) return iControl.isEnabled();
-		else return false;
-	}
-	
-	public boolean isFocusControl(){
-		if(iControl!=null) return iControl.isFocusControl();
-		else return false;
-	}
-	public boolean isReparentable(){
-		if(iControl!=null) return iControl.isReparentable();
-		else return false;
-	}
-	
-	public boolean isVisible(){
-		if(iControl!=null)return iControl.isVisible(); 
-		else return false;
-	}
-	public void moveAbove(Control control){
-		if(iControl!=null) iControl.moveAbove(control);
-	}
-	public void moveBelow(Control control){
-		if(iControl!=null) iControl.moveBelow(control);
-	}
-	public void pack(){
-		if(iControl!=null) iControl.pack();
-	}
-	public void pack(boolean changed){
-		if(iControl!=null) iControl.pack(changed);
-	}
-	public void redraw(){
-		if(iControl!=null) iControl.redraw();
-	}
-	public void redraw(int x,
-            int y,
-            int width,
-            int height,
-            boolean all){
-		if(iControl!=null) iControl.redraw(x,y,width,height, all);
-	}
-	public void removeControlListener(ControlListener listener){
-		if(iControl!=null) iControl.removeControlListener(listener);
-	}
-	public void removeFocusListener(FocusListener listener){
-		if(iControl!=null) iControl.removeFocusListener(listener);
-	}
-	public void removeMouseListener(MouseListener listener){
-		if(iControl!=null) iControl.removeMouseListener(listener);
-	}
-	public void removeMouseMoveListener(MouseMoveListener listener){
-		if(iControl!=null) iControl.removeMouseMoveListener(listener);	
-	}
-	public void removePaintListener(PaintListener listener){
-		if(iControl!=null)iControl.removePaintListener(listener);	
-	}
-	public void removeTraverseListener(TraverseListener listener){
-		if(iControl!=null)iControl.removeTraverseListener(listener);	
-	}
-	public void setBounds(int x,
-            int y,
-            int width,
-            int height){
-		if(iControl!=null)iControl.setBounds(x, y, width, height);
-	}
-	public void setBounds(Rectangle rect){
-		if(iControl!=null)iControl.setBounds(rect);
-	}
-	public void setCapture(boolean capture){
-		if(iControl!=null)iControl.setCapture(capture);	
-	}
-	public void setEnabled(boolean enabled){
-		if(iControl!=null)iControl.setEnabled(enabled);
-	}
-	public boolean setFocus(){
-		if(iControl!=null) return iControl.setFocus();
-		else return false;
-	}
-	public void setFont(Font font){
-		if(iControl!=null)iControl.setFont(font);
-	}
-	public void setForeground(Color color){
-		if(iControl!=null)iControl.setForeground(color);	
-	}
-	public void setLayoutData(java.lang.Object layoutData){
-		if(iControl!=null)iControl.setLayoutData(layoutData);	
-	}
-	public void setLocation(int x,
-            int y){
-		if(iControl!=null)iControl.setLocation(x, y);	
-	}
-	
-	public void setLocation(Point location){
-		if(iControl!=null)iControl.setLocation(location);	
-	}
-	public void setMenu(Menu menu){
-		if(iControl!=null)iControl.setMenu(menu);	
-	}
-	public void setRedraw(boolean redraw){
-		if(iControl!=null)iControl.setRedraw(redraw);
-	}
-	public void setSize(int width,
-            int height){
-		if(iControl!=null) iControl.setSize(width, height);	
-	}
-	
-	public void setSize(Point size){
-		if(iControl!=null) iControl.setSize(size);
-	}
-	public void setToolTipText(java.lang.String string){
-		if(iControl!=null)iControl.setToolTipText(string);	
-	}
-	public void setVisible(boolean visible){
-		if(iControl!=null)iControl.setVisible(visible);	
-	}
-	public Point toControl(int x,
-            int y){
-		if(iControl!=null)return iControl.toControl(x, y);
-		else return null;
-	}
-	public Point toControl(Point point){
-		if(iControl!=null) return iControl.toControl(point);
-		else return null;
-	}
-	public Point toDisplay(int x,
-            int y){
-		if(iControl!=null)return iControl.toDisplay(x,y);
-		else return null;
-	}
-	public Point toDisplay(Point point){
-		if(iControl!=null)return iControl.toDisplay(point);
-		else return null;
-	}
-	public boolean traverse(int traversal){
-		if(iControl!=null)return iControl.traverse(traversal);
-		else return false;
-	}
-	public void update(){
-		if(iControl!=null)iControl.update();
-	}
-	
-	public void checkSubclass() {
-		// do nothing,sub-classing allowed
-	}
-	
-	/**
-	 * Used in toString function 
-	 * @return class name with full path
-	 */
-	String getNameText () {
-	    return "org.eclipse.swt.widgets.ProxyControl";
-	}
-	public String toString(){
-		return "org.eclipse.swt.widgets.ProxyControl";
-	}
+        iControl= new Shell((Shell)aParent);
+        ((Shell)iControl).open();
+        iControl.setSize(iDimension);
+        return true;
+    }
+
+    /**
+     * Passes the call to iControl, if it is not null, otherwise return silently
+     */
+    public void addControlListener(ControlListener aListener)
+    {
+        if (iControl!=null)
+        {
+            iControl.addControlListener(aListener);
+        }
+    }
+    /**
+     *
+     */
+    public void addFocusListener(FocusListener listener)
+    {
+        if (iControl!=null)iControl.addFocusListener(listener);
+    }
+    /**
+     *
+     */
+    public void addKeyListener(KeyListener listener)
+    {
+        if (iControl!=null)iControl.addKeyListener(listener);
+    }
+    public void addMouseListener(MouseListener listener)
+    {
+        if (iControl!=null)iControl.addMouseListener(listener);
+    }
+    public void addMouseMoveListener(MouseMoveListener listener)
+    {
+        if (iControl!=null)iControl.addMouseMoveListener(listener);
+    }
+    /**
+     *
+     */
+    public void addPaintListener(PaintListener aListener)
+    {
+        if (iControl!=null)iControl.addPaintListener(aListener);
+
+    }
+
+    public void addTraverseListener(TraverseListener listener)
+    {
+        if (iControl!=null)iControl.addTraverseListener(listener);
+    }
+    public Point computeSize(int wHint,
+                             int hHint)
+    {
+        Point point=null;
+        if (iControl!=null)point=iControl.computeSize(wHint, hHint);
+        return point;
+    }
+
+    public Point computeSize(int wHint,
+                             int hHint,
+                             boolean changed)
+    {
+        Point point=null;
+        if (iControl!=null)point=iControl.computeSize(wHint, hHint,changed);
+        return point;
+    }
+
+    public Color getBackground()
+    {
+        Color color=null;
+        if (iControl!=null)color=iControl.getBackground();
+        return color;
+    }
+    public int getBorderWidth()
+    {
+        if (iControl!=null)return iControl.getBorderWidth();
+        else return 0;
+    }
+    public Rectangle getBounds()
+    {
+        if (iControl!=null) return iControl.getBounds();
+        else return null;
+    }
+    public boolean getEnabled()
+    {
+        if (iControl!=null) return iControl.getEnabled();
+        else return false;
+    }
+    public Font getFont()
+    {
+        if (iControl!=null)return iControl.getFont();
+        else return null;
+    }
+    public Color getForeground()
+    {
+        if (iControl!=null) return iControl.getForeground();
+        else return null;
+    }
+
+    public java.lang.Object getLayoutData()
+    {
+        if (iControl!=null) return iControl.getLayoutData();
+        else return null;
+    }
+
+    public Point getLocation()
+    {
+        if (iControl!=null) return iControl.getLocation();
+        else return null;
+    }
+
+    public Menu getMenu()
+    {
+        if (iControl!=null) return iControl.getMenu();
+        else return null;
+    }
+    public Composite getParent()
+    {
+        if (iControl!=null) return iControl.getParent();
+        else return null;
+    }
+    public Shell getShell()
+    {
+        if (iControl!=null) return (Shell)iControl;
+        else return null;
+    }
+    public Point getSize()
+    {
+        if (iControl!=null) return iControl.getSize();
+        else return null;
+    }
+
+    public java.lang.String getToolTipText()
+    {
+        if (iControl!=null) return iControl.getToolTipText();
+        else return null;
+    }
+    public boolean getVisible()
+    {
+        if (iControl!=null)  return iControl.getVisible();
+        else return false;
+    }
+    public boolean isEnabled()
+    {
+        if (iControl!=null) return iControl.isEnabled();
+        else return false;
+    }
+
+    public boolean isFocusControl()
+    {
+        if (iControl!=null) return iControl.isFocusControl();
+        else return false;
+    }
+    public boolean isReparentable()
+    {
+        if (iControl!=null) return iControl.isReparentable();
+        else return false;
+    }
+
+    public boolean isVisible()
+    {
+        if (iControl!=null)return iControl.isVisible();
+        else return false;
+    }
+    public void moveAbove(Control control)
+    {
+        if (iControl!=null) iControl.moveAbove(control);
+    }
+    public void moveBelow(Control control)
+    {
+        if (iControl!=null) iControl.moveBelow(control);
+    }
+    public void pack()
+    {
+        if (iControl!=null) iControl.pack();
+    }
+    public void pack(boolean changed)
+    {
+        if (iControl!=null) iControl.pack(changed);
+    }
+    public void redraw()
+    {
+        if (iControl!=null) iControl.redraw();
+    }
+    public void redraw(int x,
+                       int y,
+                       int width,
+                       int height,
+                       boolean all)
+    {
+        if (iControl!=null) iControl.redraw(x,y,width,height, all);
+    }
+    public void removeControlListener(ControlListener listener)
+    {
+        if (iControl!=null) iControl.removeControlListener(listener);
+    }
+    public void removeFocusListener(FocusListener listener)
+    {
+        if (iControl!=null) iControl.removeFocusListener(listener);
+    }
+    public void removeMouseListener(MouseListener listener)
+    {
+        if (iControl!=null) iControl.removeMouseListener(listener);
+    }
+    public void removeMouseMoveListener(MouseMoveListener listener)
+    {
+        if (iControl!=null) iControl.removeMouseMoveListener(listener);
+    }
+    public void removePaintListener(PaintListener listener)
+    {
+        if (iControl!=null)iControl.removePaintListener(listener);
+    }
+    public void removeTraverseListener(TraverseListener listener)
+    {
+        if (iControl!=null)iControl.removeTraverseListener(listener);
+    }
+    public void setBounds(int x,
+                          int y,
+                          int width,
+                          int height)
+    {
+        if (iControl!=null)iControl.setBounds(x, y, width, height);
+    }
+    public void setBounds(Rectangle rect)
+    {
+        if (iControl!=null)iControl.setBounds(rect);
+    }
+    public void setCapture(boolean capture)
+    {
+        if (iControl!=null)iControl.setCapture(capture);
+    }
+    public void setEnabled(boolean enabled)
+    {
+        if (iControl!=null)iControl.setEnabled(enabled);
+    }
+    public boolean setFocus()
+    {
+        if (iControl!=null) return iControl.setFocus();
+        else return false;
+    }
+    public void setFont(Font font)
+    {
+        if (iControl!=null)iControl.setFont(font);
+    }
+    public void setForeground(Color color)
+    {
+        if (iControl!=null)iControl.setForeground(color);
+    }
+    public void setLayoutData(java.lang.Object layoutData)
+    {
+        if (iControl!=null)iControl.setLayoutData(layoutData);
+    }
+    public void setLocation(int x,
+                            int y)
+    {
+        if (iControl!=null)iControl.setLocation(x, y);
+    }
+
+    public void setLocation(Point location)
+    {
+        if (iControl!=null)iControl.setLocation(location);
+    }
+    public void setMenu(Menu menu)
+    {
+        if (iControl!=null)iControl.setMenu(menu);
+    }
+    public void setRedraw(boolean redraw)
+    {
+        if (iControl!=null)iControl.setRedraw(redraw);
+    }
+    public void setSize(int width,
+                        int height)
+    {
+        if (iControl!=null) iControl.setSize(width, height);
+    }
+
+    public void setSize(Point size)
+    {
+        if (iControl!=null) iControl.setSize(size);
+    }
+    public void setToolTipText(java.lang.String string)
+    {
+        if (iControl!=null)iControl.setToolTipText(string);
+    }
+    public void setVisible(boolean visible)
+    {
+        if (iControl!=null)iControl.setVisible(visible);
+    }
+    public Point toControl(int x,
+                           int y)
+    {
+        if (iControl!=null)return iControl.toControl(x, y);
+        else return null;
+    }
+    public Point toControl(Point point)
+    {
+        if (iControl!=null) return iControl.toControl(point);
+        else return null;
+    }
+    public Point toDisplay(int x,
+                           int y)
+    {
+        if (iControl!=null)return iControl.toDisplay(x,y);
+        else return null;
+    }
+    public Point toDisplay(Point point)
+    {
+        if (iControl!=null)return iControl.toDisplay(point);
+        else return null;
+    }
+    public boolean traverse(int traversal)
+    {
+        if (iControl!=null)return iControl.traverse(traversal);
+        else return false;
+    }
+    public void update()
+    {
+        if (iControl!=null)iControl.update();
+    }
+
+    public void checkSubclass()
+    {
+        // do nothing,sub-classing allowed
+    }
+
+    protected void internal_createHandle()
+    {
+        // TODO Auto-generated method stub
+
+    }
+    /**
+     * Used in toString function
+     * @return class name with full path
+     */
+    String getNameText()
+    {
+        return "org.eclipse.swt.widgets.ProxyControl";
+    }
+    public String toString()
+    {
+        return "org.eclipse.swt.widgets.ProxyControl";
+    }
 
 }
--- a/javauis/mmapi_qt/baseline/src.nga/cmmasurfacewindow.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/baseline/src.nga/cmmasurfacewindow.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -18,7 +18,7 @@
 
 //  Include Files
 #include <logger.h>
-#include <W32STD.H>
+#include <w32std.h>
 #include "cmmasurfacewindow.h"
 #include "cmmaplayer.h"
 
@@ -106,7 +106,15 @@
             //iDisplay->UIGetCallback(*this,
 //                                    CMMASurfaceWindow::ESetClipRect);
             // MMAPI UI 3.x req.
-            iDisplay->GetCallbackInUiThread((TInt)CMMASurfaceWindow::ESetClipRect);
+            TBool iseSWT = iDisplay->iseSWT();
+            if (iseSWT)
+            {
+                UICallback((TInt)CMMASurfaceWindow::ESetClipRect);
+            }
+            else
+            {
+                iDisplay->GetCallbackInUiThread((TInt)CMMASurfaceWindow::ESetClipRect);
+            }
         }
     }
     else if (MMMADisplay::EUiThread == aThreadType)
@@ -148,7 +156,7 @@
         // setting video draw rect and adjusting it to window
         TRect drawRect = contentRect;
         drawRect.Move(relativeParentRect.iTl);
-
+        LOG2(EJavaMMAPI, EInfo, "CMMASurfaceWindow::SetClipRect(): iRWindowRect size = %d x %d", iRWindowRect.Width(), iRWindowRect.Height());
         TRect clipRect(0,0,iRWindowRect.Width(),iRWindowRect.Height());
         TRAPD(error, iMediaClientVideoDisplay->AddDisplayWindowL(iWindow,
                 clipRect, // new clip rect
@@ -158,8 +166,8 @@
                 0.0f, // ignore
                 EVideoRotationNone,
                 EAutoScaleBestFit,
-                EHorizontalAlignLeft,
-                EVerticalAlignTop,
+                EHorizontalAlignCenter,
+                EVerticalAlignCenter,
                 (RWindow*)iWindow));
 
         LOG(EJavaMMAPI,EInfo,"MID::CMMASurfaceWindow::SetClipRect -");
@@ -176,12 +184,21 @@
          aRect.iBr.iX, aRect.iBr.iY);
 
     iContentRect = aRect;
+    LOG1(EJavaMMAPI,EInfo,"MID::CMMASurfaceWindow::SetDrawRect aRect %d",iContentRect);
     if (iDisplay)
     {
         // iDisplay->UIGetCallback( *this,
         //                         CMMASurfaceWindow::ESetDrawRect );
         // MMAPI UI 3.x req.
-        iDisplay->GetCallbackInUiThread((TInt)CMMASurfaceWindow::ESetDrawRect);
+        TBool iseSWT = iDisplay->iseSWT();
+        if (iseSWT)
+        {
+            UICallback((TInt)CMMASurfaceWindow::ESetDrawRect);
+        }
+        else
+        {
+            iDisplay->GetCallbackInUiThread((TInt)CMMASurfaceWindow::ESetDrawRect);
+        }
         LOG(EJavaMMAPI,EInfo,"MID::CMMASurfaceWindow::SetDrawRect, after GetCallbackInUiThread");
     }
 }
@@ -202,7 +219,7 @@
         LOG(EJavaMMAPI, EInfo,  "MID::CMMASurfaceWindow::RedrawVideoL: no MediaClientVideoDisplay set, aborting -");
         return;
     }
-    iVisible = true;
+    //iVisible = true;
     if (iWindow)
     {
         TRect contentRect;
@@ -318,23 +335,23 @@
 
             if (aUseEventServer)
             {
-                //TInt error = StaticRedrawVideo(*this);
-                iDisplay->GetCallbackInUiThread((TInt)CMMASurfaceWindow::ESetDrawRect);
-                //  if (KErrNone != error)
-                // {
-                //ELOG1( EJavaMMAPI, "MID::CMMASurfaceWindow::SetVisible, StaticRedrawVideo error = %d", error);
-                //   }
+                TInt error = StaticRedrawVideo(*this);
+                if (KErrNone != error)
+                {
+                    LOG1(EJavaMMAPI,EInfo,"MID::CMMASurfaceWindow::SetVisible, StaticRedrawVideo error = %d", error);
+                }
             }
-            else // in MMA thread, so switch to UI thread
+            else
             {
                 if (iDisplay)
                 {
-                    //iDisplay->UIGetCallback(*this,
-                    //                     CMMASurfaceWindow::ESetDrawRect );
-                    //MMAPI UI 3.x req.
+
+                    LOG(EJavaMMAPI,EInfo,"MID::CMMASurfaceWindow::SetVisible,calling GetCallbackInUiThread");
                     iDisplay->GetCallbackInUiThread((TInt)CMMASurfaceWindow::ESetDrawRect);
-                    LOG(EJavaMMAPI,EInfo,"MID::CMMASurfaceWindow::SetVisible,GetCallbackInUiThread");
+                    LOG(EJavaMMAPI,EInfo,"MID::CMMASurfaceWindow::SetVisible,after GetCallbackInUiThread");
+
                 }
+
             }
         }
     }
@@ -376,7 +393,15 @@
         if (iDisplay)
         {
             // Clear the resources created within the old Display
-            iDisplay->GetCallbackInUiThread((TInt)CMMASurfaceWindow::ECleanVideoDisplay);
+            TBool iseSWT = iDisplay->iseSWT();
+            if (iseSWT)
+            {
+                UICallback((TInt)CMMASurfaceWindow::ECleanVideoDisplay);
+            }
+            else
+            {
+                iDisplay->GetCallbackInUiThread((TInt)CMMASurfaceWindow::ECleanVideoDisplay);
+            }
         }
 
         // Set the new Display
@@ -529,6 +554,7 @@
     break;
     case ERemoveSurface:
     {
+        LOG(EJavaMMAPI, EInfo, "MID::CMMASurfaceWindow::MdcUICallback, ERemoveSurface ");
         DoRemoveSurface();
     }
     break;
@@ -607,7 +633,15 @@
         // iDisplay->UIGetCallback( *this, CMMASurfaceWindow::EResetSurfaceParameters );
         //MMAPI UI 3.x req.
         LOG(EJavaMMAPI,EInfo,"CMMASurfaceWindow::SetSurfaceParameters : switch case EUIResourcesAndSurfaceParametersSet +");
-        iDisplay->GetCallbackInUiThread((TInt)CMMASurfaceWindow::EResetSurfaceParameters);
+        TBool iseSWT = iDisplay->iseSWT();
+        if (iseSWT)
+        {
+            UICallback((TInt)CMMASurfaceWindow::EResetSurfaceParameters);
+        }
+        else
+        {
+            iDisplay->GetCallbackInUiThread((TInt)CMMASurfaceWindow::EResetSurfaceParameters);
+        }
         LOG(EJavaMMAPI,EInfo,"CMMASurfaceWindow::SetSurfaceParameters : switch case EUIResourcesAndSurfaceParametersSet -");
         return;
     }
@@ -623,8 +657,16 @@
     {
         //iDisplay->UIGetCallback( *this, CMMASurfaceWindow::EInitVideoDisplay );
         //MMAPI UI 3.x req.
-        iDisplay->GetCallbackInUiThread((TInt)CMMASurfaceWindow::EInitVideoDisplay);
-        LOG(EJavaMMAPI,EInfo,"CMMASurfaceWindow::SetSurfaceParameters,EUIResourcesAndSurfaceParametersSet");
+        TBool iseSWT = iDisplay->iseSWT();
+        if (iseSWT)
+        {
+            UICallback((TInt)CMMASurfaceWindow::EInitVideoDisplay);
+        }
+        else
+        {
+            LOG(EJavaMMAPI,EInfo,"CMMASurfaceWindow::SetSurfaceParameters,EUIResourcesAndSurfaceParametersSet");
+            iDisplay->GetCallbackInUiThread((TInt)CMMASurfaceWindow::EInitVideoDisplay);
+        }
     }
 }
 
@@ -640,7 +682,15 @@
     {
         //iDisplay->UIGetCallback(*this, CMMASurfaceWindow::ESetChangedSurfaceParameters);
         LOG(EJavaMMAPI,EInfo,"CMMASurfaceWindow::SetChangedSurfaceParameters + ");
-        iDisplay->GetCallbackInUiThread((TInt)CMMASurfaceWindow::ESetChangedSurfaceParameters);
+        TBool iseSWT = iDisplay->iseSWT();
+        if (iseSWT)
+        {
+            UICallback((TInt)CMMASurfaceWindow::ESetChangedSurfaceParameters);
+        }
+        else
+        {
+            iDisplay->GetCallbackInUiThread((TInt)CMMASurfaceWindow::ESetChangedSurfaceParameters);
+        }
         LOG(EJavaMMAPI,EInfo,"CMMASurfaceWindow::SetChangedSurfaceParameters - ");
 
     }
@@ -648,20 +698,25 @@
 
 void CMMASurfaceWindow::RemoveSurface()
 {
+    LOG(EJavaMMAPI, EInfo, "CMMASurfaceWindow::RemoveSurface() +");
     if (iDisplay)
     {
         iDisplay->GetCallbackInUiThread((TInt)CMMASurfaceWindow::ERemoveSurface);
     }
+    LOG(EJavaMMAPI, EInfo, "CMMASurfaceWindow::RemoveSurface() -");
 }
 
 void CMMASurfaceWindow::DoRemoveSurface()
 {
+    LOG(EJavaMMAPI, EInfo, "CMMASurfaceWindow::DoRemoveSurface() +");
     if (iMediaClientVideoDisplay)
     {
+        LOG(EJavaMMAPI,EInfo,"MID::CMMASurfaceWindow::DoRemoveSurface, Removing Surface");
         iMediaClientVideoDisplay->RemoveSurface();
         LOG(EJavaMMAPI,EInfo,"MID::CMMASurfaceWindow::DoRemoveSurface, Surface Removed");
 
     }
+    LOG(EJavaMMAPI, EInfo, "CMMASurfaceWindow::DoRemoveSurface() -");
 }
 
 void CMMASurfaceWindow::DoResetSurfaceParameters()
@@ -767,8 +822,8 @@
             0.0f, // ignore
             EVideoRotationNone,
             EAutoScaleBestFit,
-            EHorizontalAlignLeft,
-            EVerticalAlignTop,
+            EHorizontalAlignCenter,
+            EVerticalAlignCenter,
             (RWindow*)iWindow);
 
 
--- a/javauis/mmapi_qt/baseline/src/cmmacanvasdisplay.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/baseline/src/cmmacanvasdisplay.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -36,7 +36,7 @@
         new(ELeave) CMMACanvasDisplay();
 
     CleanupStack::PushL(self);
-    self->Construct(aEventSource,obj);
+    self->Construct(aEventSource,NULL,obj);
     return self;
 }
 
--- a/javauis/mmapi_qt/baseline/src/cmmadisplay.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/baseline/src/cmmadisplay.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -50,16 +50,59 @@
         iFullScreen(EFalse),
         iContainerVisible(ETrue),
         iIsForeground(ETrue),
-        iResetDrawRect(EFalse)
+        iResetDrawRect(EFalse),
+        iIseSWT(EFalse)
 {
 }
 
-void CMMADisplay::Construct(MMAFunctionServer* eventSource , jobject javadisplayref)
+void CMMADisplay::Construct(MMAFunctionServer* eventSource ,JNIEnv* aJni, jobject javadisplayref)
 {
     iEventSource = eventSource;
-    iJni = iEventSource->getValidJniEnv();
+    iJavadisplayref = javadisplayref;
+    LOG1(EJavaMMAPI,EInfo,"MID::CMMADisplay::Construct=%d",iIseSWT);
+    if (iIseSWT)
+    {
+        iJni = aJni;
+    }
+    else
+    {
+        iJni = iEventSource->getValidJniEnv();
+    }
     iJavaDisplayObject = iJni->NewGlobalRef(javadisplayref);
     iJavaDisplayClass = iJni->GetObjectClass(iJavaDisplayObject);
+
+    setRectID = iJni->GetMethodID(iJavaDisplayClass,
+                                  "setRect",
+                                  "()V");
+    iRectDimensionField = iJni->GetFieldID(iJavaDisplayClass, "rectDimension", "[I");
+
+    redrawControlID = iJni->GetMethodID(
+                          iJavaDisplayClass,
+                          "redrawControl",
+                          "()V");
+
+    removeContentBoundID = iJni->GetMethodID(
+                               iJavaDisplayClass,
+                               "removeContentBound",
+                               "()V");
+
+    setContentBoundID = iJni->GetMethodID(
+                            iJavaDisplayClass,
+                            "setContentBound",
+                            "()V");
+
+    getCallBackMethodID = iJni->GetMethodID(
+                              iJavaDisplayClass,
+                              "GetCallbackInUiThread",
+                              "(I)V");
+
+    getBoundRectID = iJni->GetMethodID(
+                         iJavaDisplayClass,
+                         "getBoundRect",
+                         "()V");
+
+    iDisplayboundarrField = iJni->GetFieldID(iJavaDisplayClass, "displayboundarr", "[I");
+
     // Components must have direct content.
     /* __ASSERT_LOG(EJavaMMAPI,EInfo,"aDirectContainer, User::Invariant());
 
@@ -123,6 +166,7 @@
     }
 
     drawRect.Move(position);
+    LOG2(EJavaMMAPI, EInfo, "CMMADisplay::ScaleToFullScreen::drawRect.Width=%d, drawRect.Height=%d",drawRect.Width(), drawRect.Height());
     LOG(EJavaMMAPI,EInfo,"CMMADisplay::ScaleToFullScreen() -");
     return drawRect;
 }
@@ -243,12 +287,15 @@
 // from MMMADisplay
 TSize CMMADisplay::DisplaySize()
 {
+    LOG(EJavaMMAPI,EInfo,"MID::CMMADisplay::DisplaySize +");
     if (iWindow && iFullScreen)
     {
+        LOG(EJavaMMAPI,EInfo,"MID::CMMADisplay::DisplaySize if loop ");
         return iWindow->DrawRect().Size();
     }
     else
     {
+        LOG1(EJavaMMAPI,EInfo,"MID::CMMADisplay::DisplaySize else loop %d",iUserRect.Size().iHeight);
         return iUserRect.Size();
     }
 }
@@ -295,7 +342,15 @@
     {
         // iWindow->SetVisible(aValue, EFalse);
         //MMAPI UI 3.x req. (had to comment above line and add below line which excutes in FS thread)
-        iWindow->SetVisible(aValue, ETrue);
+        if (iIseSWT == true)
+        {
+            iWindow->SetVisible(aValue, ETrue);
+        }
+        else
+        {
+            iWindow->SetVisible(aValue, EFalse);
+        }
+        LOG(EJavaMMAPI,EInfo,"MID::CMMADisplay::SetVisible after iWindow->SetVisible()");
         SetClippingRegion();
         LOG(EJavaMMAPI,EInfo,"MID::CMMADisplay::SetVisible -");
     }
@@ -468,21 +523,31 @@
 
 void CMMADisplay::GetCallbackInUiThread(TInt placeholder)
 {
+    JNIEnv* validJni = iEventSource->getValidJniEnv();
+    jobject javaDisplayObject;
+    jclass javaDisplayClass;
     LOG(EJavaMMAPI,EInfo,"CMMADisplay::GetCallbackInUiThread +");
-
-
-
-
-
-
-
-
-    jmethodID getCallBackMethodID = iJni->GetMethodID(
-                                        iJavaDisplayClass,
-                                        "GetCallbackInUiThread",
-                                        "(I)V");
-    // LOG1(EJavaMMAPI,EInfo,"CMMADisplay::GetCallbackInUiThread getCallBackMethodID = %d",getCallBackMethodID);
-    iJni->CallVoidMethod(iJavaDisplayObject,getCallBackMethodID,placeholder);
+    /**
+     * In case of eSWT iJavaDisplayClass and iJavaDisplayObject were initialized with JNI
+     * in UI Thread. Since this function is called from FunctionServer Thread so we need to get
+     * valid JNI for FunctionServer Thread and need to initialize iJavaDisplayClass and iJavaDisplayObject
+     * again for FunctionServer Thread rather than using the one that was created in Constructor(UI Thread).
+     */
+    if (iIseSWT)
+    {
+        javaDisplayObject = validJni->NewGlobalRef(iJavadisplayref);
+        javaDisplayClass =  validJni->GetObjectClass(iJavaDisplayObject);
+    }
+    else
+    {
+        javaDisplayObject = iJavaDisplayObject;
+        javaDisplayClass = iJavaDisplayClass;
+    }
+    getCallBackMethodID = validJni->GetMethodID(javaDisplayClass,
+                          "GetCallbackInUiThread",
+                          "(I)V");
+    LOG1(EJavaMMAPI,EInfo,"CMMADisplay::GetCallbackInUiThread getCallBackMethodID = %d",getCallBackMethodID);
+    validJni->CallVoidMethod(javaDisplayObject,getCallBackMethodID,placeholder);
     LOG(EJavaMMAPI,EInfo,"CMMADisplay::GetCallbackInUiThread -");
 }
 
@@ -514,6 +579,7 @@
         return;
     }
     iWindow->ProcureWindowResourcesFromQWidget(iWs,iScreenDevice,window);
+    iWindow->SetVisible(ETrue,ETrue);
     LOG(EJavaMMAPI,EInfo,"CMMADisplay::SetWindowResources -");
 }
 
@@ -629,27 +695,28 @@
 void CMMADisplay::ResetJavaRectObject(const TRect& aRect)
 {
     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::ResetJavaRectObject +");
-    JNIEnv* validJni = iEventSource->getValidJniEnv();
-    jmethodID setRectID = validJni->GetMethodID(
-                              iJavaDisplayClass,
-                              "setRect",
-                              "()V");
-
+    //TRect rect = aRect;
+    JNIEnv* validJni = iJni;//iEventSource->getValidJniEnv();//iJni;
+    /*jmethodID setRectID = validJni->GetMethodID(
+                                                 iJavaDisplayClass,
+                                                 "setRect",
+                                             "()V");
+    */
     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::ResetJavaRectObject --1");
     // set the value to java,so that we can access those from array
-    jfieldID field = validJni->GetFieldID(iJavaDisplayClass, "rectDimension", "[I");
-    if (field == NULL)
+
+    //jfieldID iRectDimensionField = validJni->GetFieldID(iJavaDisplayClass, "rectDimension", "[I");
+    if (iRectDimensionField == NULL)
     {
         // handle error
     }
     /* Write to the instance fields */
-    jintArray javaDimensionarr = (jintArray)validJni->GetObjectField(iJavaDisplayObject, field);
+    jintArray javaDimensionarr = (jintArray)validJni->GetObjectField(iJavaDisplayObject, iRectDimensionField);
     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::ResetJavaRectObject --2");
     jint* nativeRectDimensionArr = validJni->GetIntArrayElements(javaDimensionarr, NULL);
     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::ResetJavaRectObject --3");
     if (!nativeRectDimensionArr)
-    {
-        // inputBuffer was already allocated
+    {    // inputBuffer was already allocated
         validJni->ReleaseIntArrayElements(javaDimensionarr, nativeRectDimensionArr, JNI_ABORT);
         LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::ResetJavaRectObject Error in resetting rect dimension to java");
         return;
@@ -659,9 +726,10 @@
     nativeRectDimensionArr[2] = aRect.Width();
     nativeRectDimensionArr[3] = aRect.Height();
     // Now the dimension array in java is updated hence reset the java rect
+
+    validJni->ReleaseIntArrayElements(javaDimensionarr, nativeRectDimensionArr, JNI_COMMIT);
     validJni->CallVoidMethod(iJavaDisplayObject,setRectID);
 
-    validJni->ReleaseIntArrayElements(javaDimensionarr, nativeRectDimensionArr, JNI_COMMIT);
     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::ResetJavaRectObject -");
 }
 
@@ -669,13 +737,14 @@
 void CMMADisplay::SetContentBoundToJavaControl(const TRect& aRect)
 {
     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::SetContentBoundToJavaControl +");
-    JNIEnv* validJni = iEventSource->getValidJniEnv();
+    JNIEnv* validJni = iJni;//iEventSource->getValidJniEnv();//iJni;
     // Reset the java rect
     ResetJavaRectObject(aRect);
-    jmethodID setContentBoundID = validJni->GetMethodID(
-                                      iJavaDisplayClass,
-                                      "setContentBound",
-                                      "()V");
+    /*jmethodID setContentBoundID = validJni->GetMethodID(
+                                         iJavaDisplayClass,
+                                         "setContentBound",
+                                     "()V");
+    */
     // call java function
     validJni->CallVoidMethod(iJavaDisplayObject,setContentBoundID);
     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::SetContentBoundToJavaControl -");
@@ -684,13 +753,14 @@
 void CMMADisplay::RemoveContentBoundFromJavaControl(const TRect& aRect)
 {
     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::RemoveContentBoundFromJavaControl +");
-    JNIEnv* validJni = iEventSource->getValidJniEnv();
+    JNIEnv* validJni = iJni;//iEventSource->getValidJniEnv();
     // Reset the java rect
     ResetJavaRectObject(aRect);
-    jmethodID removeContentBoundID = validJni->GetMethodID(
+    /*jmethodID removeContentBoundID = validJni->GetMethodID(
                                          iJavaDisplayClass,
                                          "removeContentBound",
-                                         "()V");
+                                     "()V");
+    */
     // call java function
     validJni->CallVoidMethod(iJavaDisplayObject,removeContentBoundID);
     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::RemoveContentBoundFromJavaControl -");
@@ -699,16 +769,26 @@
 void CMMADisplay::RefreshJavaControl()
 {
     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::RefreshJavaControl +");
-    JNIEnv* validJni = iEventSource->getValidJniEnv();
+    JNIEnv* validJni = iJni;//iEventSource->getValidJniEnv();//iJni;
     // Reset the java rect
     //ResetJavaRectObject(aRect);
-    jmethodID redrawControlID = validJni->GetMethodID(
-                                    iJavaDisplayClass,
-                                    "redrawControl",
-                                    "()V");
+    /*jmethodID redrawControlID = validJni->GetMethodID(
+                                         iJavaDisplayClass,
+                                         "redrawControl",
+                                     "()V");
+    */
     // call java function
     validJni->CallVoidMethod(iJavaDisplayObject,redrawControlID);
     LOG(EJavaMMAPI,EInfo,"MMA::CMMACanvasDisplay::RefreshJavaControl -");
 }
 
+TBool CMMADisplay::iseSWT()
+{
+    return iIseSWT;
+}
+
+void CMMADisplay::SetFullscreenSize(TSize &aFullscreenSize)
+{
+    iFullScreenSize = aFullscreenSize;
+}
 //  END OF FILE
--- a/javauis/mmapi_qt/baseline/src/cmmaevent.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/baseline/src/cmmaevent.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -45,6 +45,7 @@
 void CMMAEvent::Dispatch(JNIEnv& aJni)
 {
     LOG1(EJavaMMAPI, EInfo, "MMA::CMMAEvent::Dispatch iEventData=%d", iEventData);
+    LOG1(EJavaMMAPI, EInfo, "MMA::CMMAEvent::Dispatch iListenerObject=%d", iEventData);
 
     aJni.CallVoidMethod(iListenerObject,
                         iHandleEventMethod,
--- a/javauis/mmapi_qt/baseline/src/cmmaitemdisplay.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/baseline/src/cmmaitemdisplay.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -29,7 +29,7 @@
 {
     CMMAItemDisplay* self = new(ELeave) CMMAItemDisplay();
     CleanupStack::PushL(self);
-    self->Construct(aEventSource, aItemDispObj);
+    self->Construct(aEventSource, NULL, aItemDispObj);
     return self;
 }
 
@@ -111,45 +111,7 @@
     return TPoint(0, 0);
 }
 
-/*
-void CMMAItemDisplay::SourceSizeChanged(const TSize& aSourceSize)
-{
-    LOG1(EJavaMMAPI,EInfo,"MMA::CMMAItemDisplay::SourceSizeChanged %d",
-              aSourceSize.iWidth);
-    LOG1(EJavaMMAPI,EInfo,"MMA::CMMAItemDisplay::SourceSizeChanged %d",
-              aSourceSize.iHeight);
 
-    #ifdef RD_JAVA_NGA_ENABLED
-    if ( iWindow )
-    {
-    iWindow->SetVideoCropRegion( TRect( iUserRect.iTl, aSourceSize ) );
-    }
-    #endif
-
-    iSourceSize = aSourceSize;
-
-    if (iWindow)
-    {
-        TRect clientRect(iUserRect.iTl, aSourceSize);
-
-        iWindow->SetDrawRect(clientRect);
-        // Setting initial window size if not already set, actual size will
-        // be set in MdcItemContentRectChanged()
-        if (iWindow->WindowSize() == TSize())
-        {
-            iWindow->SetWindowRect(clientRect, MMMADisplay::EMmaThread);
-        }
-    }
-
-    SetClippingRegion();
-
-    if (iUserRect.IsEmpty())
-    {
-        // Java side hasn't set size.
-        iUserRect.SetSize(iSourceSize);
-    }
-}
-*/
 
 
 void CMMAItemDisplay:: SourceSizeChanged(TInt aJavaControlWidth, TInt aJavaControlHeight,TInt x, TInt y,TRect aBoundsRect)
@@ -282,6 +244,7 @@
 
     SetClippingRegion();
 
+    /*
     if (iUserRect.IsEmpty())
     {
         // Java side hasn't set size.
@@ -292,6 +255,13 @@
         // Addjusting rect to top left corner.
         iUserRect = TRect(iUserRect.Size());
         //}
+    }*/
+    if (iUserRect.IsEmpty())
+    {
+        // Java side hasn't set size.
+        LOG1(EJavaMMAPI,EInfo,"CMMAItemDisplay::SourceSizeChanged()iUserRect is set to source size iSourceSize - %d",iSourceSize.iHeight);
+        iUserRect.SetSize(iSourceSize);
+        LOG1(EJavaMMAPI,EInfo,"CMMAItemDisplay::SourceSizeChanged()iUserRect is set to source size iUserRect - %d",iUserRect.Size().iHeight);
     }
     LOG(EJavaMMAPI,EInfo,"CMMAItemDisplay::SourceSizeChanged(aJavaControlWidth,aJavaControlHeight)-");
 }
--- a/javauis/mmapi_qt/baseline/src/cmmaplayer.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/baseline/src/cmmaplayer.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -446,7 +446,7 @@
 }
 
 
-void CMMAPlayer::PostActionCompleted(TInt aError)
+EXPORT_C void CMMAPlayer::PostActionCompleted(TInt aError)
 {
     LOG(EJavaMMAPI, EInfo, "MMA::CMMAPlayer::PostActionCompleted ");
     iActionCompletedEvent->SetEventData(aError);
--- a/javauis/mmapi_qt/baseline/src/cmmasnapshot.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/baseline/src/cmmasnapshot.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -91,6 +91,8 @@
     // take snapshot from player. RunL is called when image is ready
     // or error occures
     iState = ETakingSnapshot;
+    LOG2(EJavaMMAPI, EInfo, "CMMASnapshot::TakeSnapshotL::iSettings->iWidth = %d, iSettings->iHeight = %d",
+         iSettings->iWidth, iSettings->iHeight);
     TSize snapshotSize(iSettings->iWidth, iSettings->iHeight);
     iEncoding = iGUIPlayer->SnapshoterL()->TakeSnapshotL(&iStatus,
                 snapshotSize,
--- a/javauis/mmapi_qt/baseline/src/cmmavideocontrol.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/baseline/src/cmmavideocontrol.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -129,12 +129,12 @@
                                    MMAFunctionServer* aEventSource,
                                    TInt* aDisplayHandle,
                                    CMMAEvent* aDeleteRefEvent,
-                                   TBool aGuiType)
+                                   TInt aGuiType)
 {
 
     LOG(EJavaMMAPI, EInfo, "MMA::CMMAVideoControl::StaticInitL +");
 
-    if (aGuiType == true)
+    if (aGuiType == CMMAVideoControl::EDISPLAY_VIDEOITEM)
     {
         LOG(EJavaMMAPI, EInfo, "MMA::CMMAVideoControl::StaticInitL - aGuiType is customitem ");
         aControl->iDeleteRefEvent = aDeleteRefEvent;
@@ -145,7 +145,7 @@
         CleanupStack::Pop(itemDisplay);
         *aDisplayHandle = reinterpret_cast<TInt>(itemDisplay);
     }
-    else
+    else if (aGuiType == CMMAVideoControl::EDISPLAY_CANVAS)
     {
         LOG(EJavaMMAPI, EInfo, "MMA::CMMAVideoControl::StaticInitL - aGuiType is canvas ");
         aControl->iDeleteRefEvent = aDeleteRefEvent;
@@ -215,6 +215,7 @@
 
 void CMMAVideoControl::StaticInitDynamicModeL(
     CMMAVideoControl* aVideoControl,
+    JNIEnv* aJni,
     TInt* aContentHandle,
     MMAFunctionServer* aEventSource,
     jobject aGUIObject,
@@ -225,89 +226,92 @@
 
     CMMADCDisplay* dcDisplay = CMMADCDisplay::NewLC(aVideoControl->iGuiPlayer,
                                aEventSource,
+                               aJni,
                                aGUIObject);
 
-    MMMADirectContent* content = dcDisplay;
-    *aContentHandle = reinterpret_cast< TInt >(content);
+    //MMMADirectContent* content = dcDisplay;
+    *aContentHandle = reinterpret_cast< TInt >(dcDisplay);
     aVideoControl->iDisplay = dcDisplay;
     aVideoControl->iGuiPlayer->SetDisplayL(aVideoControl->iDisplay);
     CleanupStack::Pop(dcDisplay);
     LOG(EJavaMMAPI, EInfo, "MMA::CMMAVideoControl::StaticInitDynamicModeL-");
 }
 
-void CMMAVideoControl::StaticGetPropertyL(CMMAVideoControl* /*aControl*/,
-        TInt /*aPropertyType*/,
-        TInt* /*aReturnValue*/)
+void CMMAVideoControl::StaticGetPropertyL(CMMAVideoControl* aControl,
+        TInt aPropertyType,
+        TInt* aReturnValue)
 {
-    // LOG1( EJavaMMAPI, EInfo, "MMA::CMMAVideoControl::StaticGetPropertyL property %d",
-    //           aPropertyType);
+    LOG1(EJavaMMAPI, EInfo, "MMA::CMMAVideoControl::StaticGetPropertyL property %d",
+         aPropertyType);
 
 // MMAPI UI 3.x req.
 // remove the below return and uncomment the below code once  display is implemented in java
-    return;
+//    return;
 
-    /*
-     MMMADisplay* display = aControl->iDisplay;
+
+    MMMADisplay* display = aControl->iDisplay;
 
-     if (aPropertyType != com_nokia_microedition_media_control_VideoControl_PROPERTY_SOURCE_WIDTH &&
-             aPropertyType != com_nokia_microedition_media_control_VideoControl_PROPERTY_SOURCE_HEIGHT &&
-             !display)
-     {
-         LOG( EJavaMMAPI, EInfo, "MMA::CMMAVideoControl::StaticGetPropertyL not initialized yet");
-         // init is not done yet, returning 0
-         *aReturnValue = 0;
-         return;
-     }
+    if (aPropertyType != com_nokia_microedition_media_control_VideoControl_PROPERTY_SOURCE_WIDTH &&
+            aPropertyType != com_nokia_microedition_media_control_VideoControl_PROPERTY_SOURCE_HEIGHT &&
+            !display)
+    {
+        LOG(EJavaMMAPI, EInfo, "MMA::CMMAVideoControl::StaticGetPropertyL not initialized yet");
+        // init is not done yet, returning 0
+        *aReturnValue = 0;
+        return;
+    }
 
-     switch (aPropertyType)
-     {
-     case com_nokia_microedition_media_control_VideoControl_PROPERTY_DISPLAY_WIDTH:
-     {
-         *aReturnValue = display->DisplaySize().iWidth;
-         break;
-     }
-     case com_nokia_microedition_media_control_VideoControl_PROPERTY_DISPLAY_HEIGHT:
-     {
-         *aReturnValue = display->DisplaySize().iHeight;
-         break;
-     }
-     case com_nokia_microedition_media_control_VideoControl_PROPERTY_DISPLAY_X:
-     {
-         *aReturnValue = display->DisplayLocation().iX;
-         break;
-     }
-     case com_nokia_microedition_media_control_VideoControl_PROPERTY_DISPLAY_Y:
-     {
-         *aReturnValue = display->DisplayLocation().iY;
-         break;
-     }
-     case com_nokia_microedition_media_control_VideoControl_PROPERTY_SOURCE_WIDTH:
-     {
-         LOG( EJavaMMAPI, EInfo, "MMA::CMMAVideoControl::StaticGetPropertyL get source width");
-         *aReturnValue = aControl->iGuiPlayer->SourceSize().iWidth;
-         break;
-     }
-     case com_nokia_microedition_media_control_VideoControl_PROPERTY_SOURCE_HEIGHT:
-     {
-         LOG( EJavaMMAPI, EInfo, "MMA::CMMAVideoControl::StaticGetPropertyL get source height");
-         *aReturnValue = aControl->iGuiPlayer->SourceSize().iHeight;
-         break;
-     }
-     default:
-     {
-         *aReturnValue = KErrNotFound;
-         User::Leave(KErrNotFound);
-         break;
-     }
-     }
-     */
+    switch (aPropertyType)
+    {
+    case com_nokia_microedition_media_control_VideoControl_PROPERTY_DISPLAY_WIDTH:
+    {
+        *aReturnValue = display->DisplaySize().iWidth;
+        break;
+    }
+    case com_nokia_microedition_media_control_VideoControl_PROPERTY_DISPLAY_HEIGHT:
+    {
+        *aReturnValue = display->DisplaySize().iHeight;
+        LOG1(EJavaMMAPI, EInfo, "MMA::CMMAVideoControl::StaticGetPropertyL aReturnValue %d",
+             *aReturnValue);
+        break;
+    }
+    case com_nokia_microedition_media_control_VideoControl_PROPERTY_DISPLAY_X:
+    {
+        *aReturnValue = display->DisplayLocation().iX;
+        break;
+    }
+    case com_nokia_microedition_media_control_VideoControl_PROPERTY_DISPLAY_Y:
+    {
+        *aReturnValue = display->DisplayLocation().iY;
+        break;
+    }
+    case com_nokia_microedition_media_control_VideoControl_PROPERTY_SOURCE_WIDTH:
+    {
+        LOG(EJavaMMAPI, EInfo, "MMA::CMMAVideoControl::StaticGetPropertyL get source width");
+        *aReturnValue = aControl->iGuiPlayer->SourceSize().iWidth;
+        break;
+    }
+    case com_nokia_microedition_media_control_VideoControl_PROPERTY_SOURCE_HEIGHT:
+    {
+        LOG(EJavaMMAPI, EInfo, "MMA::CMMAVideoControl::StaticGetPropertyL get source height");
+        *aReturnValue = aControl->iGuiPlayer->SourceSize().iHeight;
+        break;
+    }
+    default:
+    {
+        *aReturnValue = KErrNotFound;
+        User::Leave(KErrNotFound);
+        break;
+    }
+    }
+
 }
 
 
-void CMMAVideoControl::StaticSetPropertyL(CMMAVideoControl* /*aControl*/,
-        TInt /*aPropertyType*/,
-        TInt /*aPropertyA*/,
-        TInt /*aPropertyB*/)
+void CMMAVideoControl::StaticSetPropertyL(CMMAVideoControl* aControl,
+        TInt aPropertyType,
+        TInt aPropertyA,
+        TInt aPropertyB)
 {
     //LOG1( EJavaMMAPI, EInfo, "MMA::CMMAVideoControl::StaticSetPropertyL property type %d",
     //          aPropertyType);
@@ -317,76 +321,86 @@
     //          aPropertyB);
 // MMAPI UI 3.x req.
 // remove the below return and uncomment the below code; once  display is implemented in java
-    return;
+    // return;
 
-    /*
-        MMMADisplay* display = aControl->iDisplay;
 
-        __ASSERT_DEBUG(display != NULL,
-                       User::Panic(_L("display not initialized"), KErrNotReady));
+    MMMADisplay* display = aControl->iDisplay;
 
-        switch (aPropertyType)
-        {
-        case com_nokia_microedition_media_control_VideoControl_SET_DISPLAY_SIZE:
-        {
-            TSize displaySize(aPropertyA, aPropertyB);
-            display->SetDisplaySizeL(displaySize);
+    __ASSERT_DEBUG(display != NULL,
+                   User::Panic(_L("display not initialized"), KErrNotReady));
 
-            // inform java side
-            if (!display->IsFullScreen())
-            {
-                aControl->iGuiPlayer->NotifyWithStringEvent(
-                    CMMAPlayerEvent::ESizeChanged, KControlName);
-            }
-            break;
-        }
-        case com_nokia_microedition_media_control_VideoControl_SET_DISPLAY_LOCATION:
+    switch (aPropertyType)
+    {
+    case com_nokia_microedition_media_control_VideoControl_SET_DISPLAY_SIZE:
+    {
+        TSize displaySize(aPropertyA, aPropertyB);
+        LOG1(EJavaMMAPI, EInfo, "CMMAVideoControl::statepropertyl %d",displaySize);
+        display->SetDisplaySizeL(displaySize);
+        LOG(EJavaMMAPI, EInfo, "CMMAVideoControl::SetDisplayProperty:: setDisplaySizeL Completed");
+        // inform java side
+        if (!display->IsFullScreen())
         {
-            TPoint displayLocation(aPropertyA, aPropertyB);
-            display->SetDisplayLocationL(displayLocation);
-            break;
-        }
-        case com_nokia_microedition_media_control_VideoControl_SET_DISPLAY_VISIBLE_TRUE:
-        {
-            display->SetVisible(ETrue);
-            break;
+            aControl->iGuiPlayer->NotifyWithStringEvent(
+                CMMAPlayerEvent::ESizeChanged, KControlName);
         }
-        case com_nokia_microedition_media_control_VideoControl_SET_DISPLAY_VISIBLE_FALSE:
-        {
-            display->SetVisible(EFalse);
-            break;
-        }
-        case com_nokia_microedition_media_control_VideoControl_SET_DISPLAY_FULLSCREEN_TRUE:
-        {
-            // store old user rect to determine if SIZE_CHANGED event
-            // has to be delivered when full screen mode is turned off.
-            aControl->iOldDisplaySize = display->DisplaySize();
-
-            display->SetFullScreenL(ETrue);
-            break;
-        }
-        case com_nokia_microedition_media_control_VideoControl_SET_DISPLAY_FULLSCREEN_FALSE:
-        {
-            display->SetFullScreenL(EFalse);
+        break;
+    }
+    case com_nokia_microedition_media_control_VideoControl_SET_DISPLAY_LOCATION:
+    {
+        TPoint displayLocation(aPropertyA, aPropertyB);
+        display->SetDisplayLocationL(displayLocation);
+        break;
+    }
+    case com_nokia_microedition_media_control_VideoControl_SET_DISPLAY_VISIBLE_TRUE:
+    {
+        display->SetVisible(ETrue);
+        break;
+    }
+    case com_nokia_microedition_media_control_VideoControl_SET_DISPLAY_VISIBLE_FALSE:
+    {
+        display->SetVisible(EFalse);
+        break;
+    }
+    case com_nokia_microedition_media_control_VideoControl_SET_DISPLAY_FULLSCREEN_TRUE:
+    {
+        // store old user rect to determine if SIZE_CHANGED event
+        // has to be delivered when full screen mode is turned off.
+        aControl->iOldDisplaySize = display->DisplaySize();
+        LOG1(EJavaMMAPI, EInfo, "MMA::CMMAVideoControl::StaticSetPropertyL a property %d",
+             aPropertyA);
+        LOG1(EJavaMMAPI, EInfo, "MMA::CMMAVideoControl::StaticSetPropertyL b property %d",
+             aPropertyB);
+        //TSize fullscreenSize(aPropertyA, aPropertyB);
+        //display->SetFullscreenSize(fullscreenSize);
+        //display->SetDisplaySizeL(fullscreenSize);
+        //display->SetFullScreenL(ETrue);
+        display->SourceSizeChanged(aPropertyA, aPropertyB,0,0,TRect(0,0,0,0));
+        break;
+    }
+    case com_nokia_microedition_media_control_VideoControl_SET_DISPLAY_FULLSCREEN_FALSE:
+    {
+        TSize fullscreenSize = aControl->iOldDisplaySize;
+        display->SetFullscreenSize(fullscreenSize);
+        display->SetFullScreenL(EFalse);
 
-            // Send SIZE_CHANGED event when fullscreen is turned off if
-            // size of the video display has changed. Possible position
-            // change is however disregarded
-            if (aControl->iOldDisplaySize != display->DisplaySize())
-            {
-                aControl->iGuiPlayer->NotifyWithStringEvent(
-                    CMMAPlayerEvent::ESizeChanged, KControlName);
-            }
+        // Send SIZE_CHANGED event when fullscreen is turned off if
+        // size of the video display has changed. Possible position
+        // change is however disregarded
+        /* if (aControl->iOldDisplaySize != display->DisplaySize())
+         {
+             aControl->iGuiPlayer->NotifyWithStringEvent(
+                 CMMAPlayerEvent::ESizeChanged, KControlName);
+         }*/
 
-            break;
-        }
-        default:
-        {
-            User::Leave(KErrNotFound);
-            break;
-        }
-        }
-        */
+        break;
+    }
+    default:
+    {
+        User::Leave(KErrNotFound);
+        break;
+    }
+    }
+
 }
 
 
@@ -491,7 +505,12 @@
     }
 }
 
-
+/*
+MMMAGuiPlayer* CMMAVideoControl::GuiPlayer()
+{
+    return iGuiPlayer;
+}
+*/
 /**
  * Handles a change to resources which are shared accross the environment.
  */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/mmapi_qt/baseline/src/eswtdisplay.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,147 @@
+/*
+* 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 "com_nokia_microedition_media_control_MMAeSWTDisplay.h"
+#include "logger.h"
+#include "qwidget.h"
+#include "cmmadcdisplay.h"
+
+JNIEXPORT void JNICALL Java_com_nokia_microedition_media_control_MMAeSWTDisplay__1setVisible
+(JNIEnv *, jobject, jint nativeDisplayHandle, jboolean isVisible)
+{
+    LOG(EJavaMMAPI,EInfo,"JNI_eswtdisplay.cpp : setVisible +");
+    CMMADisplay* display = reinterpret_cast<CMMADisplay*>(nativeDisplayHandle);
+    TBool visible = (TBool)isVisible;
+    display ->SetVisible(visible);
+    LOG(EJavaMMAPI,EInfo,"JNI_eswtdisplay.cpp : setVisible -");
+}
+
+
+JNIEXPORT void JNICALL Java_com_nokia_microedition_media_control_MMAeSWTDisplay__1setContainerVisible
+(JNIEnv *, jobject, jint /*nativeDisplayHandle*/, jboolean /*isActive*/)
+{
+    LOG(EJavaMMAPI,EInfo,"JNI_eswtdisplay.cpp : setContainerVisible +");
+    /*        CMMADisplay* display = reinterpret_cast<CMMADisplay*>(nativeDisplayHandle);
+            TBool visible = (TBool)isActive;
+            display ->SetContainerVisibility(visible);*/
+    LOG(EJavaMMAPI,EInfo,"JNI_eswtdisplay.cpp : setContainerVisible -");
+}
+
+JNIEXPORT void JNICALL Java_com_nokia_microedition_media_control_MMAeSWTDisplay__1setFullScreenMode
+(JNIEnv *, jobject, jint nativeDisplayHandle, jboolean isFullScreen)
+{
+    LOG(EJavaMMAPI,EInfo,"JNI_eswtdisplay.cpp : setFullScreenMode  +");
+    CMMADisplay* display = reinterpret_cast<CMMADisplay*>(nativeDisplayHandle);
+    TBool mode = (TBool)isFullScreen;
+    TRAP_IGNORE(display ->SetFullScreenL(mode));
+    LOG(EJavaMMAPI,EInfo,"JNI_eswtdisplay.cpp : setFullScreenMode  -");
+}
+
+JNIEXPORT void JNICALL Java_com_nokia_microedition_media_control_MMAeSWTDisplay__1setWindowToNative
+(JNIEnv *, jobject,jint nativeDisplayHandle, jint qtWidgetHandle)
+{
+    LOG(EJavaMMAPI,EInfo,"JNI_eswtdisplay.cpp : setWindowToNative + ");
+    QWidget *widget = reinterpret_cast<QWidget*>(qtWidgetHandle);
+    CMMADisplay* display = reinterpret_cast<CMMADisplay*>(nativeDisplayHandle);
+    display->SetWindowResources(widget);
+    LOG(EJavaMMAPI,EInfo,"JNI_eswtdisplay.cpp : setWindowToNative - ");
+}
+
+LOCAL_C void LocalSourceSizeChanged(CMMADisplay* display,TInt width,TInt height)
+{
+    TRect temp(0,0,0,0);
+    LOG2(EJavaMMAPI,EInfo,"JNI_eswtdisplay.cpp : setWindowToNative + %d %d",width,height);
+    display->SourceSizeChanged(width,height,0,0,temp);
+}
+
+JNIEXPORT void JNICALL Java_com_nokia_microedition_media_control_MMAeSWTDisplay__1setNativeWindowSize
+(JNIEnv *, jobject,jint nativeDisplayHandle, jint /*aEventSourceHandle*/, jint eswtControlwidth,jint eswtControlheight)
+{
+    LOG(EJavaMMAPI,EInfo,"JNI_eswtdisplay.cpp : setNativeWindowSize + ");
+    CMMADisplay* display = reinterpret_cast<CMMADisplay*>(nativeDisplayHandle);
+    TInt width = eswtControlwidth;
+    TInt height = eswtControlheight;
+    // TSize srcsize = TSize(360,487);
+    // TO-DO remove JavaUnhand in final code
+    //MMAFunctionServer* eventSource =  reinterpret_cast<MMAFunctionServer *>(aEventSourceHandle);
+    // need to call in Function server thread context because CMMADisplay's JNI pointer
+    // is valid in that thread context only.
+    /*TInt error = eventSource->ExecuteTrap(&LocalSourceSizeChanged,
+                                                          display,
+                                                          width,
+                                                          height);*/
+    LocalSourceSizeChanged(display, width, height);
+
+    LOG(EJavaMMAPI,EInfo,"JNI_eswtdisplay.cpp : setNativeWindowSize - ");
+}
+
+/*
+LOCAL_C void LocalSetDisplayPosition(CMMADisplay* display,TInt uiX,TInt uiY,TInt vcX,TInt vcY)
+{
+    display->SetDisplayPosition(uiX,uiY,vcX,vcY);
+}
+*/
+JNIEXPORT void JNICALL Java_com_nokia_microedition_media_control_MMAeSWTDisplay__1setPosition
+(JNIEnv *, jobject,jint /*nativeDisplayHandle*/,jint /*aEventSourceHandle*/,jint /*uiX*/,jint /*uiY*/,jint /*vcX*/,jint /*vcY*/)
+{
+    /*  LOG(EJavaMMAPI,EInfo,"JNI_canvasdisplay.cpp : _setPosition + ");
+      CMMADisplay* display = reinterpret_cast<CMMADisplay*>(nativeDisplayHandle);
+      TInt uiControlLocationX = uiX;
+      TInt uiControlLocationY = uiY;
+      TInt videoControlLocationX = vcX;
+      TInt videoControlLocationY = vcY;
+      MMAFunctionServer* eventSource =  reinterpret_cast<MMAFunctionServer *>(aEventSourceHandle);
+      // need to call in Function server thread context because CMMADisplay's JNI pointer
+      // is valid in that thread context only.
+      TInt error = eventSource->ExecuteTrap(&LocalSetDisplayPosition,
+                                                               display,
+                                                                     uiControlLocationX,
+                                                                             uiControlLocationY,
+                                                                                     videoControlLocationX,
+                                                                                             videoControlLocationY);
+
+      LOG(EJavaMMAPI,EInfo,"JNI_canvasdisplay.cpp : _setPosition - ");*/
+}
+
+
+
+
+LOCAL_C void LocalSetDisplaySize(CMMADisplay* display,TInt vcX,TInt vcY)
+{
+    LOG2(EJavaMMAPI,EInfo,"JNI_canvasdisplay.cpp : LocalSetDisplaySize vcX = %d,vcY=%d ",vcX,vcY);
+    TSize size(vcX,vcY);
+    TRAP_IGNORE(display->SetDisplaySizeL(size));
+}
+
+JNIEXPORT void JNICALL Java_com_nokia_microedition_media_control_MMAeSWTDisplay__1setDisplaySize
+(JNIEnv *, jobject,jint nativeDisplayHandle,jint /*aEventSourceHandle*/,jint width,jint height)
+{
+    LOG2(EJavaMMAPI,EInfo,"JNI_eswtDisplay.cpp : _setDisplaySize +  width = %d,height = %d",width,height);
+    CMMADisplay* display = reinterpret_cast<CMMADisplay*>(nativeDisplayHandle);
+    TInt vc_width = width;
+    TInt vc_height = height;
+    //MMAFunctionServer* eventSource =  reinterpret_cast<MMAFunctionServer *>(aEventSourceHandle);
+    // need to call in Function server thread context because CMMADisplay's JNI pointer
+    // is valid in that thread context only.
+    LOG2(EJavaMMAPI,EInfo,"JNI_eswtdisplay.cpp : _setDisplaySize +  vc_width = %d,vc_height = %d",vc_width,vc_height);
+    /*TInt error = eventSource->ExecuteTrap(&LocalSetDisplaySize,
+                                                             display,
+                                                                   vc_width,
+                                                                           vc_height);
+    */
+    LocalSetDisplaySize(display, vc_width, vc_height);
+    LOG(EJavaMMAPI,EInfo,"JNI_ESWTDisplay.cpp : _setDisplaySize - ");
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/mmapi_qt/baseline/src/eswtproxycontrol.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -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:  JNI  in UI thread context
+*
+*/
+
+#include "org_eclipse_swt_widgets_ESWTProxyControl.h"
+#include "logger.h"
+//#include "cmmadcdisplay.h"
+#include "cmmadisplay.h"
+
+JNIEXPORT jintArray JNICALL Java_org_eclipse_swt_widgets_ESWTProxyControl__1getSourceSize
+(JNIEnv *aJni, jobject, jint nativeDisplayHandle)
+{
+    LOG(EJavaMMAPI,EInfo,"JNI_eswtproxycontrol.cpp : getSourceSize +");
+    LOG1(EJavaMMAPI,EInfo,"JNI_eswtproxycontrol.cpp : getSourceSize nativeDisplayHandle = %d", nativeDisplayHandle);
+    CMMADisplay* display = reinterpret_cast<CMMADisplay*>(nativeDisplayHandle);
+    TSize sourceRect = display->SourceSize();
+    jint sourceWidth = sourceRect.iWidth;
+    jint sourceHeight = sourceRect.iHeight;
+
+    jintArray sourceSize = aJni->NewIntArray(2);
+    aJni->SetIntArrayRegion(sourceSize,0,1,&sourceWidth);
+    aJni->SetIntArrayRegion(sourceSize,1,1,&sourceHeight);
+    LOG(EJavaMMAPI,EInfo,"JNI_eswtproxycontrol.cpp : getSourceSize -");
+    return sourceSize;
+}
--- a/javauis/mmapi_qt/baseline/src/managerimpl.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/baseline/src/managerimpl.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -108,7 +108,10 @@
 JNIEXPORT jint JNICALL Java_com_nokia_microedition_media_ManagerImpl__1createEventSource
 (JNIEnv* aJni, jobject aPeer)
 {
-    TInt eventSourceHandle = MMAFunctionServer::NewL(*aJni, aPeer);
+    TInt eventSourceHandle = -1;
+    TRAPD(err,eventSourceHandle = MMAFunctionServer::NewL(*aJni, aPeer));
+    if (err != KErrNone)
+        eventSourceHandle = err;
     if (eventSourceHandle > KErrNone)
     {
         MMAFunctionServer* eventSource =
--- a/javauis/mmapi_qt/baseline/src/videocontrol.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/baseline/src/videocontrol.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -72,7 +72,7 @@
 
 JNIEXPORT jint JNICALL Java_com_nokia_microedition_media_control_VideoControl__1setDisplayProperty
 (JNIEnv*, jobject, jint aControlHandle, jint aEventSourceHandle,
- jint aPropertyA, jint aPropertyB, jint aPropertyType)
+ jint aPropertyA, jint aPropertyB, jint aPropertyType, jint aDisplayType)
 {
     LOG(EJavaMMAPI, EInfo, "Java_com_nokia_microedition_media_control_VideoControl__1setDisplayProperty");
 
@@ -88,19 +88,26 @@
     __ASSERT_DEBUG(eventSource,
                    User::Panic(_L("videocontrol::eventsource is null"),
                                KErrArgument));
-
-    TInt error(eventSource->ExecuteTrap(&CMMAVideoControl::StaticSetPropertyL,
-                                        videoControl,
-                                        aPropertyType,
-                                        aPropertyA,
-                                        aPropertyB));
+    TInt error = 0;
+    if (aDisplayType == CMMAVideoControl::EDISPLAY_ESWT)
+    {
+        TRAP(error,CMMAVideoControl::StaticSetPropertyL(videoControl, aPropertyType, aPropertyA, aPropertyB));
+    }
+    else
+    {
+        error = eventSource->ExecuteTrap(&CMMAVideoControl::StaticSetPropertyL,
+                                         videoControl,
+                                         aPropertyType,
+                                         aPropertyA,
+                                         aPropertyB);
+    }
     LOG(EJavaMMAPI, EInfo, "Java_com_nokia_microedition_media_control_VideoControl__1setDisplayProperty -");
     return error;
 }
 
 JNIEXPORT jint JNICALL Java_com_nokia_microedition_media_control_VideoControl__1getControlProperty
 (JNIEnv*, jobject, jint aControlHandle, jint aEventSourceHandle,
- jint aPropertyType)
+ jint aPropertyType, jint aDisplayType)
 {
     LOG(EJavaMMAPI, EInfo, "Java_com_nokia_microedition_media_control_VideoControl__1getControlProperty");
 
@@ -117,11 +124,19 @@
                    User::Panic(_L("videocontrol::evetnsource is null"),
                                KErrArgument));
     TInt returnValue(KErrNone);
+    TInt error = 0;
 
-    TInt error(eventSource->ExecuteTrap(&CMMAVideoControl::StaticGetPropertyL,
-                                        videoControl,
-                                        aPropertyType,
-                                        &returnValue));
+    if (aDisplayType == CMMAVideoControl::EDISPLAY_ESWT)
+    {
+        TRAP(error,CMMAVideoControl::StaticGetPropertyL(videoControl, aPropertyType, &returnValue));
+    }
+    else
+    {
+        error = eventSource->ExecuteTrap(&CMMAVideoControl::StaticGetPropertyL,
+                                         videoControl,
+                                         aPropertyType,
+                                         &returnValue);
+    }
     LOG(EJavaMMAPI, EInfo, "Java_com_nokia_microedition_media_control_VideoControl__1getControlProperty - ");
     if (error == KErrNone)
     {
@@ -131,7 +146,7 @@
 }
 
 JNIEXPORT jint JNICALL Java_com_nokia_microedition_media_control_VideoControl__1getSnapshot
-(JNIEnv* aJni, jobject, jint aControlHandle, jint aEventSourceHandle,
+(JNIEnv* aJni, jobject, jint aControlHandle, jint /*aEventSourceHandle*/,
  jstring aProperties)
 {
     LOG(EJavaMMAPI, EInfo, "Java_com_nokia_microedition_media_control_VideoControl__1getSnapshot + ");
@@ -139,20 +154,26 @@
     CMMAVideoControl* videoControl =
         reinterpret_cast< CMMAVideoControl* >(aControlHandle);
 
-    MMAFunctionServer* eventSource =
-        reinterpret_cast< MMAFunctionServer *>(aEventSourceHandle);
+    //MMAFunctionServer* eventSource =
+    //   reinterpret_cast< MMAFunctionServer *>(aEventSourceHandle);
 
     __ASSERT_DEBUG(videoControl,
                    User::Panic(_L("videocontrol::control is null"),
                                KErrArgument));
-    __ASSERT_DEBUG(eventSource,
-                   User::Panic(_L("videocontrol::evetnsource is null"),
-                               KErrArgument));
+//    __ASSERT_DEBUG(eventSource,
+//                   User::Panic(_L("videocontrol::evetnsource is null"),
+//                               KErrArgument));
 
     JStringUtils properties(*aJni, aProperties);
+
+    TInt error = 0;
+    TRAP(error,CMMAVideoControl::TakeSnapShotL(videoControl, (const TDesC*)&properties));
+
+    /*
     TInt error(eventSource->ExecuteTrap(&CMMAVideoControl::TakeSnapShotL,
                                         videoControl,
                                         (const TDesC*)&properties));
+     */
     LOG(EJavaMMAPI, EInfo, "Java_com_nokia_microedition_media_control_VideoControl__1getSnapshot - ");
     return error;
 }
@@ -161,20 +182,22 @@
  * Initializes dynamic display mode
  * @return handle to MMMADirectContent or error code
  */
-/*
 LOCAL_C jint InitDynamicMode(MMAFunctionServer* aEventSource,
+                             JNIEnv* aJni,
                              CMMAVideoControl* aVideoControl,
                              jobject aGUIObject,
                              CMMAEvent* aDeleteRefEvent)
 {
     TInt contentHandle = 0;
-    TInt error = aEventSource->ExecuteTrap(
-                     &CMMAVideoControl::StaticInitDynamicModeL,
-                     aVideoControl,
-                     &contentHandle,
-                     aEventSource,
-                     aGUIObject,
-                     aDeleteRefEvent);
+    /* TInt error = aEventSource->ExecuteTrap(
+                      &CMMAVideoControl::StaticInitDynamicModeL,
+                      aVideoControl,
+                      &contentHandle,
+                      aEventSource,
+                      aGUIObject,
+                      aDeleteRefEvent);
+    */
+    TRAPD(error,CMMAVideoControl::StaticInitDynamicModeL(aVideoControl, aJni, &contentHandle, aEventSource, aGUIObject, aDeleteRefEvent));
 
     // if init failed return error code
     if (error != KErrNone)
@@ -183,18 +206,17 @@
     }
     return contentHandle;
 }
-*/
 
 JNIEXPORT jint JNICALL Java_com_nokia_microedition_media_control_VideoControl__1initDisplayMode
 (JNIEnv* aJni, jobject aJavaVideoControl, jint aControlHandle, jint aEventSourceHandle,
- jobject aJavaDisplayObj, jobject aComponent,jboolean aGuiType)
+ jobject aJavaDisplayObj, jobject aComponent,jint aGuiType)
 {
     LOG(EJavaMMAPI, EInfo, "Java_com_nokia_microedition_media_control_VideoControl__1initDisplayMode +");
     LOG1(EJavaMMAPI, EInfo, "aControlHandle = %d", aControlHandle);
     LOG1(EJavaMMAPI, EInfo, "aEventSourceHandle = %d", aEventSourceHandle);
 //    LOG1( EJavaMMAPI, EInfo, "aComponentHandle = %d", aComponentHandle);
 
-    TBool type = aGuiType;
+    TInt type = aGuiType;
     CMMAVideoControl* videoControl =
         reinterpret_cast< CMMAVideoControl* >(aControlHandle);
 
@@ -231,15 +253,16 @@
         return KErrNoMemory;
     }
 
-    /*// other modes has component
-    if (aComponentHandle == 0)
+    // other modes has component
+    if (type == CMMAVideoControl::EDISPLAY_ESWT)
     {
         return InitDynamicMode(eventSource,
+                               aJni,
                                videoControl,
-                               componentRef,
+                               javaDisplayRef,
                                deleteRefEvent);
     }
-    */
+
     //  MMIDComponent* component = JavaUnhand< MMIDComponent >(aComponentHandle);
 
 
--- a/javauis/mmapi_qt/build/build.xml	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/build/build.xml	Wed Jun 23 18:07:10 2010 +0300
@@ -65,6 +65,8 @@
                    com.nokia.microedition.media.control.MMACanvasDisplay,
                    com.nokia.microedition.media.control.ItemDisplay,
                    com.nokia.microedition.media.control.BaseDisplay,
+		   com.nokia.microedition.media.control.MMAeSWTDisplay,
+		   org.eclipse.swt.widgets.ESWTProxyControl,
                    com.nokia.microedition.media.control.MMAGUIFactory,
                    com.nokia.microedition.media.control.PitchControl,
                    com.nokia.microedition.media.control.RateControl,
@@ -197,6 +199,10 @@
     </properties>
 
   </target>
+  
+  <target name="create.public.api.jar">
+    <omj.public.apis includes="javax/microedition/media/**/*.class"/>
+  </target>
 
   <target name="create.internal.api.jar">
     <omj.internal.apis includes="com/nokia/microedition/media/control/ControlImpl.class,
--- a/javauis/mmapi_qt/build/bwins/javamobilemediau.def	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/build/bwins/javamobilemediau.def	Wed Jun 23 18:07:10 2010 +0300
@@ -1,5 +1,5 @@
 EXPORTS
-  ?jni_lookup@@YAP6AXXZPBD@Z @ 1 NONAME ; void (*)(void) jni_lookup(char const *)
+	?jni_lookup@@YAP6AXXZPBD@Z @ 1 NONAME ; void (*)(void) jni_lookup(char const *)
 	?SetLoopCount@CMMAPlayer@@UAEXH@Z @ 2 NONAME ; void CMMAPlayer::SetLoopCount(int)
 	?PostObjectEvent@CMMAPlayer@@QAEXW4TEventType@CMMAPlayerEvent@@PAV_jobject@@@Z @ 3 NONAME ; void CMMAPlayer::PostObjectEvent(enum CMMAPlayerEvent::TEventType, class _jobject *)	
 	?PrefetchFileL@CMMAEMCAudioPlayer@@MAEXXZ @ 4 NONAME ; void CMMAEMCAudioPlayer::PrefetchFileL(void)
@@ -8,72 +8,69 @@
 	?PostStringEvent@CMMAPlayer@@QAEXW4TEventType@CMMAPlayerEvent@@ABVTDesC16@@@Z @ 7 NONAME ; void CMMAPlayer::PostStringEvent(enum CMMAPlayerEvent::TEventType, class TDesC16 const &)
 	?SnapshotEncoded@CMMAVideoPlayer@@UAEPAVHBufC8@@XZ @ 8 NONAME ; class HBufC8 * CMMAVideoPlayer::SnapshotEncoded(void)
 	?DoOpen@CMMAMMFPlayerBase@@MAEHVTUid@@ABVTDesC8@@01VTMMFPrioritySettings@@@Z @ 9 NONAME ; int CMMAMMFPlayerBase::DoOpen(class TUid, class TDesC8 const &, class TUid, class TDesC8 const &, class TMMFPrioritySettings)
-	?StaticControl@CMMAPlayer@@SAPAVCMMAControl@@PAV1@H@Z @ 10 NONAME ; class CMMAControl * CMMAPlayer::StaticControl(class CMMAPlayer *, int)
-	?Type@CMMAVideoPlayer@@MAEABVTDesC16@@XZ @ 11 NONAME ; class TDesC16 const & CMMAVideoPlayer::Type(void)
-	??0CMMAEMCAudioVolumeControl@@IAE@AAVCMMAEMCAudioPlayer@@@Z @ 12 NONAME ; CMMAEMCAudioVolumeControl::CMMAEMCAudioVolumeControl(class CMMAEMCAudioPlayer &)
-	?PublicClassName@CMMAControl@@UBEABVTDesC16@@XZ @ 13 NONAME ; class TDesC16 const & CMMAControl::PublicClassName(void) const
-	?PostActionCompletedStart@CMMAPlayer@@QAEXXZ @ 14 NONAME ; void CMMAPlayer::PostActionCompletedStart(void)
-	?Controller@CMMAMMFPlayerBase@@QAEAAVRMMFController@@XZ @ 15 NONAME ; class RMMFController & CMMAMMFPlayerBase::Controller(void)
-	?PrefetchDataL@CMMAAudioPlayer@@MAEXABVTDesC8@@@Z @ 16 NONAME ; void CMMAAudioPlayer::PrefetchDataL(class TDesC8 const &)
-	??0CMMAVideoUrlPlayer@@IAE@PAVCMMAMMFResolver@@@Z @ 17 NONAME ; CMMAVideoUrlPlayer::CMMAVideoUrlPlayer(class CMMAMMFResolver *)
-	?CloseL@CMMAVideoUrlPlayer@@UAEXXZ @ 18 NONAME ; void CMMAVideoUrlPlayer::CloseL(void)
-	?SnapshotBitmap@CMMAVideoPlayer@@UAEPAVCFbsBitmap@@XZ @ 19 NONAME ; class CFbsBitmap * CMMAVideoPlayer::SnapshotBitmap(void)
-	?NewL@CTimeOutTimer@@SAPAV1@HAAVMTimeOutNotify@@@Z @ 20 NONAME ; class CTimeOutTimer * CTimeOutTimer::NewL(int, class MTimeOutNotify &)
-	?StartL@CMMAVideoUrlPlayer@@UAEXXZ @ 21 NONAME ; void CMMAVideoUrlPlayer::StartL(void)
-	?ReadCompletedL@CMMAEMCAudioPlayer@@UAEXHABVTDesC8@@@Z @ 22 NONAME ; void CMMAEMCAudioPlayer::ReadCompletedL(int, class TDesC8 const &)
-	?NewL@CMMAEMCAudioVolumeControl@@SAPAV1@AAVCMMAEMCAudioPlayer@@@Z @ 23 NONAME ; class CMMAEMCAudioVolumeControl * CMMAEMCAudioVolumeControl::NewL(class CMMAEMCAudioPlayer &)
-	?HandleEvent@CMMAVideoUrlPlayer@@MAEXABVTMMFEvent@@@Z @ 24 NONAME ; void CMMAVideoUrlPlayer::HandleEvent(class TMMFEvent const &)
-	?ConstructL@CMMAVideoUrlPlayer@@IAEXABVTDesC16@@@Z @ 25 NONAME ; void CMMAVideoUrlPlayer::ConstructL(class TDesC16 const &)
-	?SetDisplayL@CMMAVideoPlayer@@UAEXPAVMMMADisplay@@@Z @ 26 NONAME ; void CMMAVideoPlayer::SetDisplayL(class MMMADisplay *)
-	?TakeSnapshotL@CMMAVideoPlayer@@UAE?AW4TEncoding@MMMASnapshot@@PAVTRequestStatus@@ABVTSize@@ABVCMMAImageSettings@@@Z @ 27 NONAME ; enum MMMASnapshot::TEncoding CMMAVideoPlayer::TakeSnapshotL(class TRequestStatus *, class TSize const &, class CMMAImageSettings const &)
-	?StaticAddObjectFromHandleL@MMAFunctionServer@@SAXPAV1@H@Z @ 28 NONAME ; void MMAFunctionServer::StaticAddObjectFromHandleL(class MMAFunctionServer *, int)
-	?SnapshotReady@CMMAVideoControl@@UAEXXZ @ 29 NONAME ; void CMMAVideoControl::SnapshotReady(void)
-	?CreatePlayerL@CMMAMMFPlayerFactory@@MAEPAVCMMAPlayer@@PAVCMMFFormatSelectionParameters@@PBVTDesC16@@@Z @ 30 NONAME ; class CMMAPlayer * CMMAMMFPlayerFactory::CreatePlayerL(class CMMFFormatSelectionParameters *, class TDesC16 const *)
-	?PlayCompleteL@CMMAEMCAudioPlayer@@MAEXH@Z @ 31 NONAME ; void CMMAEMCAudioPlayer::PlayCompleteL(int)
-	?NewL@CMMAAudioVolumeControl@@SAPAV1@PAVCMMAAudioPlayer@@@Z @ 32 NONAME ; class CMMAAudioVolumeControl * CMMAAudioVolumeControl::NewL(class CMMAAudioPlayer *)
-	?PrefetchDataL@CMMAEMCAudioPlayer@@MAEXABVTDesC8@@@Z @ 33 NONAME ; void CMMAEMCAudioPlayer::PrefetchDataL(class TDesC8 const &)
-	?HandlePlaybackCompleteL@CMMAAudioPlayer@@UAEXXZ @ 34 NONAME ; void CMMAAudioPlayer::HandlePlaybackCompleteL(void)
-	?RemoveStateListener@CMMAPlayer@@QAEXPAVMMMAPlayerStateListener@@@Z @ 35 NONAME ; void CMMAPlayer::RemoveStateListener(class MMMAPlayerStateListener *)
-	??0CMMAEMCAudioPlayer@@IAE@PAVCMMAEMCResolver@@@Z @ 36 NONAME ; CMMAEMCAudioPlayer::CMMAEMCAudioPlayer(class CMMAEMCResolver *)
-	?MidiClient@CMMAMIDIPlayer@@QBEPAVCMidiClientUtility@@XZ @ 37 NONAME ; class CMidiClientUtility * CMMAMIDIPlayer::MidiClient(void) const
-	??1CMMAVideoUrlPlayer@@UAE@XZ @ 38 NONAME ; CMMAVideoUrlPlayer::~CMMAVideoUrlPlayer(void)
-	?ErrorPlaybackComplete@CMMAAudioPlayer@@UAEXH@Z @ 39 NONAME ; void CMMAAudioPlayer::ErrorPlaybackComplete(int)
-	??1CMMAEMCAudioPlayer@@UAE@XZ @ 40 NONAME ; CMMAEMCAudioPlayer::~CMMAEMCAudioPlayer(void)
-	?MMFactory@CMMAEMCPlayerBase@@QAEPAVCMultimediaFactory@multimedia@@XZ @ 41 NONAME ; class multimedia::CMultimediaFactory * CMMAEMCPlayerBase::MMFactory(void)
-	?Players@MMAFunctionServer@@QAEAAV?$RPointerArray@VCMMAPlayer@@@@XZ @ 42 NONAME ; class RPointerArray<class CMMAPlayer> & MMAFunctionServer::Players(void)
-	?PreparePluginSelectionParametersL@CMMAMMFPlayerFactory@@MAEXPAVCMMAMMFResolver@@PAVCMMFFormatSelectionParameters@@@Z @ 43 NONAME ; void CMMAMMFPlayerFactory::PreparePluginSelectionParametersL(class CMMAMMFResolver *, class CMMFFormatSelectionParameters *)
-	?PostActionCompleted@CMMAPlayer@@QAEXH@Z @ 44 NONAME ; void CMMAPlayer::PostActionCompleted(int)
-	?RealizeL@CMMAVideoUrlPlayer@@UAEXXZ @ 45 NONAME ; void CMMAVideoUrlPlayer::RealizeL(void)
-	?SetPlayerInstanceObserver@MMAFunctionServer@@QAEXPAVMMMAPlayerInstanceObserver@@@Z @ 46 NONAME ; void MMAFunctionServer::SetPlayerInstanceObserver(class MMMAPlayerInstanceObserver *)
-	?SetPlayerListenerObjectL@CMMAVideoPlayer@@UAEXPAV_jobject@@PAUJNIEnv_@@PAVMMMAEventPoster@@@Z @ 47 NONAME ; void CMMAVideoPlayer::SetPlayerListenerObjectL(class _jobject *, struct JNIEnv_ *, class MMMAEventPoster *)
-	?RealizeL@CMMAEMCAudioPlayer@@UAEXXZ @ 48 NONAME ; void CMMAEMCAudioPlayer::RealizeL(void)
-	?ControlCount@CMMAPlayer@@QAEHXZ @ 49 NONAME ; int CMMAPlayer::ControlCount(void)
-	?DoSetLevelL@CMMAEMCAudioVolumeControl@@UAEXH@Z @ 50 NONAME ; void CMMAEMCAudioVolumeControl::DoSetLevelL(int)
-	?PlayCompleteL@CMMAAudioPlayer@@MAEXH@Z @ 51 NONAME ; void CMMAAudioPlayer::PlayCompleteL(int)
-	?SourceSize@CMMAVideoPlayer@@UAE?AVTSize@@XZ @ 52 NONAME ; class TSize CMMAVideoPlayer::SourceSize(void)
-	?SnapshoterL@CMMAVideoPlayer@@UAEPAVMMMASnapshot@@XZ @ 53 NONAME ; class MMMASnapshot * CMMAVideoPlayer::SnapshoterL(void)
-	?GetDuration@CMMAMMFPlayerBase@@UAEXPA_J@Z @ 54 NONAME ; void CMMAMMFPlayerBase::GetDuration(long long *)
-	?AddPlayerFactoryL@CMMAManager@@QAEXPAVMMMAPlayerFactory@@@Z @ 55 NONAME ; void CMMAManager::AddPlayerFactoryL(class MMMAPlayerFactory *)
-	??0CMMAVideoControl@@QAE@PAVMMMAGuiPlayer@@@Z @ 56 NONAME ; CMMAVideoControl::CMMAVideoControl(class MMMAGuiPlayer *)
-	?ClassName@CMMAVideoControl@@UBEABVTDesC16@@XZ @ 57 NONAME ; class TDesC16 const & CMMAVideoControl::ClassName(void) const
-	??1CMMAMMFPlayerFactory@@UAE@XZ @ 58 NONAME ; CMMAMMFPlayerFactory::~CMMAMMFPlayerFactory(void)
-	?SetVolumeLevelL@CMMAVolumeControl@@QAEXHH@Z @ 59 NONAME ; void CMMAVolumeControl::SetVolumeLevelL(int, int)
-	?PostActionCompletedFile@CMMAPlayer@@QAEXXZ @ 60 NONAME ; void CMMAPlayer::PostActionCompletedFile(void)
-	?DoGetLevelL@CMMAEMCAudioVolumeControl@@UAEHXZ @ 61 NONAME ; int CMMAEMCAudioVolumeControl::DoGetLevelL(void)
-	?ReadCompletedL@CMMAVideoPlayer@@MAEXHABVTDesC8@@@Z @ 62 NONAME ; void CMMAVideoPlayer::ReadCompletedL(int, class TDesC8 const &)
-	?Type@CMMAEMCAudioPlayer@@UAEABVTDesC16@@XZ @ 63 NONAME ; class TDesC16 const & CMMAEMCAudioPlayer::Type(void)
-	?GetMediaTime@CMMAVideoUrlPlayer@@UAEXPA_J@Z @ 64 NONAME ; void CMMAVideoUrlPlayer::GetMediaTime(long long *)
-	?DeallocateL@CMMAVideoUrlPlayer@@UAEXXZ @ 65 NONAME ; void CMMAVideoUrlPlayer::DeallocateL(void)
-	??0CMMAMMFPlayerFactory@@QAE@XZ @ 66 NONAME ; CMMAMMFPlayerFactory::CMMAMMFPlayerFactory(void)
-	?AddStateListenerL@CMMAPlayer@@QAEXPAVMMMAPlayerStateListener@@@Z @ 67 NONAME ; void CMMAPlayer::AddStateListenerL(class MMMAPlayerStateListener *)
-	?StreamControl@CMMAEMCPlayerBase@@QAEPAVMStreamControl@multimedia@@XZ @ 68 NONAME ; class multimedia::MStreamControl * CMMAEMCPlayerBase::StreamControl(void)
-	?PrefetchFileL@CMMAAudioPlayer@@MAEXXZ @ 69 NONAME ; void CMMAAudioPlayer::PrefetchFileL(void)
-	?PrefetchL@CMMAVideoUrlPlayer@@UAEXXZ @ 70 NONAME ; void CMMAVideoUrlPlayer::PrefetchL(void)
-	?AddLevelL@CMMAVolumeControl@@QAEHXZ @ 71 NONAME ; int CMMAVolumeControl::AddLevelL(void)
-	?ConstructL@CMMAEMCAudioPlayer@@IAEXXZ @ 72 NONAME ; void CMMAEMCAudioPlayer::ConstructL(void)
-	?Control@CMMAPlayer@@QAEPAVCMMAControl@@H@Z @ 73 NONAME ; class CMMAControl * CMMAPlayer::Control(int)
-	?PrefetchL@CMMAEMCAudioPlayer@@UAEXXZ @ 74 NONAME ; void CMMAEMCAudioPlayer::PrefetchL(void)
-	?StopL@CMMAVideoUrlPlayer@@UAEXH@Z @ 75 NONAME ; void CMMAVideoUrlPlayer::StopL(int)
-	??1CMMAVideoControl@@UAE@XZ @ 76 NONAME ; CMMAVideoControl::~CMMAVideoControl(void)
-	?AddSourceStreamL@CMMAPlayer@@MAEPAVCMMASourceStream@@PAUJNIEnv_@@PAVMMAFunctionServer@@PAV_jobject@@@Z @ 77 NONAME ; class CMMASourceStream * CMMAPlayer::AddSourceStreamL(struct JNIEnv_ *, class MMAFunctionServer *, class _jobject *)
+	?Type@CMMAVideoPlayer@@MAEABVTDesC16@@XZ @ 10 NONAME ; class TDesC16 const & CMMAVideoPlayer::Type(void)
+	??0CMMAEMCAudioVolumeControl@@IAE@AAVCMMAEMCAudioPlayer@@@Z @ 11 NONAME ; CMMAEMCAudioVolumeControl::CMMAEMCAudioVolumeControl(class CMMAEMCAudioPlayer &)
+	?PublicClassName@CMMAControl@@UBEABVTDesC16@@XZ @ 12 NONAME ; class TDesC16 const & CMMAControl::PublicClassName(void) const
+	?Controller@CMMAMMFPlayerBase@@QAEAAVRMMFController@@XZ @ 13 NONAME ; class RMMFController & CMMAMMFPlayerBase::Controller(void)
+	?PrefetchDataL@CMMAAudioPlayer@@MAEXABVTDesC8@@@Z @ 14 NONAME ; void CMMAAudioPlayer::PrefetchDataL(class TDesC8 const &)
+	??0CMMAVideoUrlPlayer@@IAE@PAVCMMAMMFResolver@@@Z @ 15 NONAME ; CMMAVideoUrlPlayer::CMMAVideoUrlPlayer(class CMMAMMFResolver *)
+	?CloseL@CMMAVideoUrlPlayer@@UAEXXZ @ 16 NONAME ; void CMMAVideoUrlPlayer::CloseL(void)
+	?SnapshotBitmap@CMMAVideoPlayer@@UAEPAVCFbsBitmap@@XZ @ 17 NONAME ; class CFbsBitmap * CMMAVideoPlayer::SnapshotBitmap(void)
+	?NewL@CTimeOutTimer@@SAPAV1@HAAVMTimeOutNotify@@@Z @ 18 NONAME ; class CTimeOutTimer * CTimeOutTimer::NewL(int, class MTimeOutNotify &)
+	?StartL@CMMAVideoUrlPlayer@@UAEXXZ @ 19 NONAME ; void CMMAVideoUrlPlayer::StartL(void)
+	?ReadCompletedL@CMMAEMCAudioPlayer@@UAEXHABVTDesC8@@@Z @ 20 NONAME ; void CMMAEMCAudioPlayer::ReadCompletedL(int, class TDesC8 const &)
+	?NewL@CMMAEMCAudioVolumeControl@@SAPAV1@AAVCMMAEMCAudioPlayer@@@Z @ 21 NONAME ; class CMMAEMCAudioVolumeControl * CMMAEMCAudioVolumeControl::NewL(class CMMAEMCAudioPlayer &)
+	?HandleEvent@CMMAVideoUrlPlayer@@MAEXABVTMMFEvent@@@Z @ 22 NONAME ; void CMMAVideoUrlPlayer::HandleEvent(class TMMFEvent const &)
+	?ConstructL@CMMAVideoUrlPlayer@@IAEXABVTDesC16@@@Z @ 23 NONAME ; void CMMAVideoUrlPlayer::ConstructL(class TDesC16 const &)
+	?SetDisplayL@CMMAVideoPlayer@@UAEXPAVMMMADisplay@@@Z @ 24 NONAME ; void CMMAVideoPlayer::SetDisplayL(class MMMADisplay *)
+	?TakeSnapshotL@CMMAVideoPlayer@@UAE?AW4TEncoding@MMMASnapshot@@PAVTRequestStatus@@ABVTSize@@ABVCMMAImageSettings@@@Z @ 25 NONAME ; enum MMMASnapshot::TEncoding CMMAVideoPlayer::TakeSnapshotL(class TRequestStatus *, class TSize const &, class CMMAImageSettings const &)
+	?StaticAddObjectFromHandleL@MMAFunctionServer@@SAXPAV1@H@Z @ 26 NONAME ; void MMAFunctionServer::StaticAddObjectFromHandleL(class MMAFunctionServer *, int)
+	?SnapshotReady@CMMAVideoControl@@UAEXXZ @ 27 NONAME ; void CMMAVideoControl::SnapshotReady(void)
+	?CreatePlayerL@CMMAMMFPlayerFactory@@MAEPAVCMMAPlayer@@PAVCMMFFormatSelectionParameters@@PBVTDesC16@@@Z @ 28 NONAME ; class CMMAPlayer * CMMAMMFPlayerFactory::CreatePlayerL(class CMMFFormatSelectionParameters *, class TDesC16 const *)
+	?PlayCompleteL@CMMAEMCAudioPlayer@@MAEXH@Z @ 29 NONAME ; void CMMAEMCAudioPlayer::PlayCompleteL(int)
+	?NewL@CMMAAudioVolumeControl@@SAPAV1@PAVCMMAAudioPlayer@@@Z @ 30 NONAME ; class CMMAAudioVolumeControl * CMMAAudioVolumeControl::NewL(class CMMAAudioPlayer *)
+	?PrefetchDataL@CMMAEMCAudioPlayer@@MAEXABVTDesC8@@@Z @ 31 NONAME ; void CMMAEMCAudioPlayer::PrefetchDataL(class TDesC8 const &)
+	?HandlePlaybackCompleteL@CMMAAudioPlayer@@UAEXXZ @ 32 NONAME ; void CMMAAudioPlayer::HandlePlaybackCompleteL(void)
+	?RemoveStateListener@CMMAPlayer@@QAEXPAVMMMAPlayerStateListener@@@Z @ 33 NONAME ; void CMMAPlayer::RemoveStateListener(class MMMAPlayerStateListener *)
+	??0CMMAEMCAudioPlayer@@IAE@PAVCMMAEMCResolver@@@Z @ 34 NONAME ; CMMAEMCAudioPlayer::CMMAEMCAudioPlayer(class CMMAEMCResolver *)
+	?MidiClient@CMMAMIDIPlayer@@QBEPAVCMidiClientUtility@@XZ @ 35 NONAME ; class CMidiClientUtility * CMMAMIDIPlayer::MidiClient(void) const
+	??1CMMAVideoUrlPlayer@@UAE@XZ @ 36 NONAME ; CMMAVideoUrlPlayer::~CMMAVideoUrlPlayer(void)
+	?ErrorPlaybackComplete@CMMAAudioPlayer@@UAEXH@Z @ 37 NONAME ; void CMMAAudioPlayer::ErrorPlaybackComplete(int)
+	??1CMMAEMCAudioPlayer@@UAE@XZ @ 38 NONAME ; CMMAEMCAudioPlayer::~CMMAEMCAudioPlayer(void)
+	?MMFactory@CMMAEMCPlayerBase@@QAEPAVCMultimediaFactory@multimedia@@XZ @ 39 NONAME ; class multimedia::CMultimediaFactory * CMMAEMCPlayerBase::MMFactory(void)
+	?Players@MMAFunctionServer@@QAEAAV?$RPointerArray@VCMMAPlayer@@@@XZ @ 40 NONAME ; class RPointerArray<class CMMAPlayer> & MMAFunctionServer::Players(void)
+	?PreparePluginSelectionParametersL@CMMAMMFPlayerFactory@@MAEXPAVCMMAMMFResolver@@PAVCMMFFormatSelectionParameters@@@Z @ 41 NONAME ; void CMMAMMFPlayerFactory::PreparePluginSelectionParametersL(class CMMAMMFResolver *, class CMMFFormatSelectionParameters *)
+	?PostActionCompleted@CMMAPlayer@@QAEXH@Z @ 42 NONAME ; void CMMAPlayer::PostActionCompleted(int)
+	?RealizeL@CMMAVideoUrlPlayer@@UAEXXZ @ 43 NONAME ; void CMMAVideoUrlPlayer::RealizeL(void)
+	?SetPlayerInstanceObserver@MMAFunctionServer@@QAEXPAVMMMAPlayerInstanceObserver@@@Z @ 44 NONAME ; void MMAFunctionServer::SetPlayerInstanceObserver(class MMMAPlayerInstanceObserver *)
+	?SetPlayerListenerObjectL@CMMAVideoPlayer@@UAEXPAV_jobject@@PAUJNIEnv_@@PAVMMMAEventPoster@@@Z @ 45 NONAME ; void CMMAVideoPlayer::SetPlayerListenerObjectL(class _jobject *, struct JNIEnv_ *, class MMMAEventPoster *)
+	?RealizeL@CMMAEMCAudioPlayer@@UAEXXZ @ 46 NONAME ; void CMMAEMCAudioPlayer::RealizeL(void)
+	?ControlCount@CMMAPlayer@@QAEHXZ @ 47 NONAME ; int CMMAPlayer::ControlCount(void)
+	?DoSetLevelL@CMMAEMCAudioVolumeControl@@UAEXH@Z @ 48 NONAME ; void CMMAEMCAudioVolumeControl::DoSetLevelL(int)
+	?PlayCompleteL@CMMAAudioPlayer@@MAEXH@Z @ 49 NONAME ; void CMMAAudioPlayer::PlayCompleteL(int)
+	?SourceSize@CMMAVideoPlayer@@UAE?AVTSize@@XZ @ 50 NONAME ; class TSize CMMAVideoPlayer::SourceSize(void)
+	?SnapshoterL@CMMAVideoPlayer@@UAEPAVMMMASnapshot@@XZ @ 51 NONAME ; class MMMASnapshot * CMMAVideoPlayer::SnapshoterL(void)
+	?GetDuration@CMMAMMFPlayerBase@@UAEXPA_J@Z @ 52 NONAME ; void CMMAMMFPlayerBase::GetDuration(long long *)
+	?AddPlayerFactoryL@CMMAManager@@QAEXPAVMMMAPlayerFactory@@@Z @ 53 NONAME ; void CMMAManager::AddPlayerFactoryL(class MMMAPlayerFactory *)
+	??0CMMAVideoControl@@QAE@PAVMMMAGuiPlayer@@@Z @ 54 NONAME ; CMMAVideoControl::CMMAVideoControl(class MMMAGuiPlayer *)
+	?ClassName@CMMAVideoControl@@UBEABVTDesC16@@XZ @ 55 NONAME ; class TDesC16 const & CMMAVideoControl::ClassName(void) const
+	??1CMMAMMFPlayerFactory@@UAE@XZ @ 56 NONAME ; CMMAMMFPlayerFactory::~CMMAMMFPlayerFactory(void)
+	?SetVolumeLevelL@CMMAVolumeControl@@QAEXHH@Z @ 57 NONAME ; void CMMAVolumeControl::SetVolumeLevelL(int, int)
+	?DoGetLevelL@CMMAEMCAudioVolumeControl@@UAEHXZ @ 58 NONAME ; int CMMAEMCAudioVolumeControl::DoGetLevelL(void)
+	?ReadCompletedL@CMMAVideoPlayer@@MAEXHABVTDesC8@@@Z @ 59 NONAME ; void CMMAVideoPlayer::ReadCompletedL(int, class TDesC8 const &)
+	?Type@CMMAEMCAudioPlayer@@UAEABVTDesC16@@XZ @ 60 NONAME ; class TDesC16 const & CMMAEMCAudioPlayer::Type(void)
+	?GetMediaTime@CMMAVideoUrlPlayer@@UAEXPA_J@Z @ 61 NONAME ; void CMMAVideoUrlPlayer::GetMediaTime(long long *)
+	?DeallocateL@CMMAVideoUrlPlayer@@UAEXXZ @ 62 NONAME ; void CMMAVideoUrlPlayer::DeallocateL(void)
+	??0CMMAMMFPlayerFactory@@QAE@XZ @ 63 NONAME ; CMMAMMFPlayerFactory::CMMAMMFPlayerFactory(void)
+	?AddStateListenerL@CMMAPlayer@@QAEXPAVMMMAPlayerStateListener@@@Z @ 64 NONAME ; void CMMAPlayer::AddStateListenerL(class MMMAPlayerStateListener *)
+	?StreamControl@CMMAEMCPlayerBase@@QAEPAVMStreamControl@multimedia@@XZ @ 65 NONAME ; class multimedia::MStreamControl * CMMAEMCPlayerBase::StreamControl(void)
+	?PrefetchFileL@CMMAAudioPlayer@@MAEXXZ @ 66 NONAME ; void CMMAAudioPlayer::PrefetchFileL(void)
+	?PrefetchL@CMMAVideoUrlPlayer@@UAEXXZ @ 67 NONAME ; void CMMAVideoUrlPlayer::PrefetchL(void)
+	?AddLevelL@CMMAVolumeControl@@QAEHXZ @ 68 NONAME ; int CMMAVolumeControl::AddLevelL(void)
+	?ConstructL@CMMAEMCAudioPlayer@@IAEXXZ @ 69 NONAME ; void CMMAEMCAudioPlayer::ConstructL(void)
+	?Control@CMMAPlayer@@QAEPAVCMMAControl@@H@Z @ 70 NONAME ; class CMMAControl * CMMAPlayer::Control(int)
+	?PrefetchL@CMMAEMCAudioPlayer@@UAEXXZ @ 71 NONAME ; void CMMAEMCAudioPlayer::PrefetchL(void)
+	?StopL@CMMAVideoUrlPlayer@@UAEXH@Z @ 72 NONAME ; void CMMAVideoUrlPlayer::StopL(int)
+	??1CMMAVideoControl@@UAE@XZ @ 73 NONAME ; CMMAVideoControl::~CMMAVideoControl(void)
+	?AddSourceStreamL@CMMAPlayer@@MAEPAVCMMASourceStream@@PAUJNIEnv_@@PAVMMAFunctionServer@@PAV_jobject@@@Z @ 74 NONAME ; class CMMASourceStream * CMMAPlayer::AddSourceStreamL(struct JNIEnv_ *, class MMAFunctionServer *, class _jobject *)
 
--- a/javauis/mmapi_qt/build/eabi/javamobilemediau.def	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/build/eabi/javamobilemediau.def	Wed Jun 23 18:07:10 2010 +0300
@@ -7,142 +7,143 @@
 	_ZN10CMMAPlayer15PostStringEventEN15CMMAPlayerEvent10TEventTypeERK7TDesC16 @ 6 NONAME
 	_ZN10CMMAPlayer16AddSourceStreamLEP7JNIEnv_P17MMAFunctionServerP8_jobject @ 7 NONAME
 	_ZN10CMMAPlayer17AddStateListenerLEP23MMMAPlayerStateListener @ 8 NONAME
-	_ZN10CMMAPlayer19RemoveStateListenerEP23MMMAPlayerStateListener @ 9 NONAME
-	_ZN10CMMAPlayer7ControlEi @ 10 NONAME
-	_ZN11CMMAManager17AddPlayerFactoryLEP17MMMAPlayerFactory @ 11 NONAME
-	_ZN13CTimeOutTimer4NewLEiR14MTimeOutNotify @ 12 NONAME
-	_ZN15CMMAAudioPlayer13PlayCompleteLEi @ 13 NONAME
-	_ZN15CMMAAudioPlayer13PrefetchDataLERK6TDesC8 @ 14 NONAME
-	_ZN15CMMAAudioPlayer13PrefetchFileLEv @ 15 NONAME
-	_ZN15CMMAAudioPlayer21ErrorPlaybackCompleteEi @ 16 NONAME
-	_ZN15CMMAAudioPlayer23HandlePlaybackCompleteLEv @ 17 NONAME
-	_ZN15CMMAVideoPlayer10SourceSizeEv @ 18 NONAME
-	_ZN15CMMAVideoPlayer11SetDisplayLEP11MMMADisplay @ 19 NONAME
-	_ZN15CMMAVideoPlayer11SnapshoterLEv @ 20 NONAME
-	_ZN15CMMAVideoPlayer13TakeSnapshotLEP14TRequestStatusRK5TSizeRK17CMMAImageSettings @ 21 NONAME
-	_ZN15CMMAVideoPlayer14ReadCompletedLEiRK6TDesC8 @ 22 NONAME
-	_ZN15CMMAVideoPlayer14SnapshotBitmapEv @ 23 NONAME
-	_ZN15CMMAVideoPlayer15SnapshotEncodedEv @ 24 NONAME
-	_ZN15CMMAVideoPlayer21NotifyWithStringEventEN15CMMAPlayerEvent10TEventTypeERK7TDesC16 @ 25 NONAME
-	_ZN15CMMAVideoPlayer24SetPlayerListenerObjectLEP8_jobjectP7JNIEnv_P15MMMAEventPoster @ 26 NONAME
-	_ZN15CMMAVideoPlayer4TypeEv @ 27 NONAME
-	_ZN16CMMAVideoControl13SnapshotReadyEv @ 28 NONAME
-	_ZN16CMMAVideoControlC1EP13MMMAGuiPlayer @ 29 NONAME
-	_ZN16CMMAVideoControlC2EP13MMMAGuiPlayer @ 30 NONAME
-	_ZN16CMMAVideoControlD0Ev @ 31 NONAME
-	_ZN16CMMAVideoControlD1Ev @ 32 NONAME
-	_ZN16CMMAVideoControlD2Ev @ 33 NONAME
-	_ZN17CMMAEMCPlayerBase13StreamControlEv @ 34 NONAME
-	_ZN17CMMAEMCPlayerBase9MMFactoryEv @ 35 NONAME
-	_ZN17CMMAMMFPlayerBase10ControllerEv @ 36 NONAME
-	_ZN17CMMAMMFPlayerBase11GetDurationEPx @ 37 NONAME
-	_ZN17CMMAMMFPlayerBase6DoOpenE4TUidRK6TDesC8S0_S3_20TMMFPrioritySettings @ 38 NONAME
-	_ZN17CMMAVolumeControl15SetVolumeLevelLEii @ 39 NONAME
-	_ZN17CMMAVolumeControl9AddLevelLEv @ 40 NONAME
-	_ZN17MMAFunctionServer25SetPlayerInstanceObserverEP26MMMAPlayerInstanceObserver @ 41 NONAME
-	_ZN17MMAFunctionServer26StaticAddObjectFromHandleLEPS_i @ 42 NONAME
-	_ZN17MMAFunctionServer7PlayersEv @ 43 NONAME
-	_ZN18CMMAEMCAudioPlayer10ConstructLEv @ 44 NONAME
-	_ZN18CMMAEMCAudioPlayer13PlayCompleteLEi @ 45 NONAME
-	_ZN18CMMAEMCAudioPlayer13PrefetchDataLERK6TDesC8 @ 46 NONAME
-	_ZN18CMMAEMCAudioPlayer13PrefetchFileLEv @ 47 NONAME
-	_ZN18CMMAEMCAudioPlayer14ReadCompletedLEiRK6TDesC8 @ 48 NONAME
-	_ZN18CMMAEMCAudioPlayer4TypeEv @ 49 NONAME
-	_ZN18CMMAEMCAudioPlayer8RealizeLEv @ 50 NONAME
-	_ZN18CMMAEMCAudioPlayer9PrefetchLEv @ 51 NONAME
-	_ZN18CMMAEMCAudioPlayerC1EP15CMMAEMCResolver @ 52 NONAME
-	_ZN18CMMAEMCAudioPlayerC2EP15CMMAEMCResolver @ 53 NONAME
-	_ZN18CMMAEMCAudioPlayerD0Ev @ 54 NONAME
-	_ZN18CMMAEMCAudioPlayerD1Ev @ 55 NONAME
-	_ZN18CMMAEMCAudioPlayerD2Ev @ 56 NONAME
-	_ZN18CMMAVideoUrlPlayer10ConstructLERK7TDesC16 @ 57 NONAME
-	_ZN18CMMAVideoUrlPlayer11DeallocateLEv @ 58 NONAME
-	_ZN18CMMAVideoUrlPlayer11HandleEventERK9TMMFEvent @ 59 NONAME
-	_ZN18CMMAVideoUrlPlayer12GetMediaTimeEPx @ 60 NONAME
-	_ZN18CMMAVideoUrlPlayer5StopLEi @ 61 NONAME
-	_ZN18CMMAVideoUrlPlayer6CloseLEv @ 62 NONAME
-	_ZN18CMMAVideoUrlPlayer6StartLEv @ 63 NONAME
-	_ZN18CMMAVideoUrlPlayer8RealizeLEv @ 64 NONAME
-	_ZN18CMMAVideoUrlPlayer9PrefetchLEv @ 65 NONAME
-	_ZN18CMMAVideoUrlPlayerC1EP15CMMAMMFResolver @ 66 NONAME
-	_ZN18CMMAVideoUrlPlayerC2EP15CMMAMMFResolver @ 67 NONAME
-	_ZN18CMMAVideoUrlPlayerD0Ev @ 68 NONAME
-	_ZN18CMMAVideoUrlPlayerD1Ev @ 69 NONAME
-	_ZN18CMMAVideoUrlPlayerD2Ev @ 70 NONAME
-	_ZN20CMMAMMFPlayerFactory13CreatePlayerLEP29CMMFFormatSelectionParametersPK7TDesC16 @ 71 NONAME
-	_ZN20CMMAMMFPlayerFactory33PreparePluginSelectionParametersLEP15CMMAMMFResolverP29CMMFFormatSelectionParameters @ 72 NONAME
-	_ZN20CMMAMMFPlayerFactoryC2Ev @ 73 NONAME
-	_ZN20CMMAMMFPlayerFactoryD0Ev @ 74 NONAME
-	_ZN20CMMAMMFPlayerFactoryD1Ev @ 75 NONAME
-	_ZN20CMMAMMFPlayerFactoryD2Ev @ 76 NONAME
-	_ZN22CMMAAudioVolumeControl4NewLEP15CMMAAudioPlayer @ 77 NONAME
-	_ZN25CMMAEMCAudioVolumeControl11DoGetLevelLEv @ 78 NONAME
-	_ZN25CMMAEMCAudioVolumeControl11DoSetLevelLEi @ 79 NONAME
-	_ZN25CMMAEMCAudioVolumeControl4NewLER18CMMAEMCAudioPlayer @ 80 NONAME
-	_ZN25CMMAEMCAudioVolumeControlC1ER18CMMAEMCAudioPlayer @ 81 NONAME
-	_ZN25CMMAEMCAudioVolumeControlC2ER18CMMAEMCAudioPlayer @ 82 NONAME
-	_ZNK11CMMAControl15PublicClassNameEv @ 83 NONAME
-	_ZNK14CMMAMIDIPlayer10MidiClientEv @ 84 NONAME
-	_ZNK16CMMAVideoControl9ClassNameEv @ 85 NONAME
-	_ZTI10CMMAPlayer @ 86 NONAME
-	_ZTI11CMMAControl @ 87 NONAME
-	_ZTI13CTimeOutTimer @ 88 NONAME
-	_ZTI14CMMAMIDIPlayer @ 89 NONAME
-	_ZTI16CMMAVideoControl @ 90 NONAME
-	_ZTI17CMMAMMFPlayerBase @ 91 NONAME
-	_ZTI17CMMAStreamRequest @ 92 NONAME
-	_ZTI17CMMAVolumeControl @ 93 NONAME
-	_ZTI17MMAFunctionServer @ 94 NONAME
-	_ZTI18CHXMetaDataUtility @ 95 NONAME
-	_ZTI18CMMAVideoUrlPlayer @ 96 NONAME
-	_ZTI20CMMAMMFPlayerFactory @ 97 NONAME
-	_ZTI26CPlaybackCompletedCallback @ 98 NONAME
-	_ZTIN15CMMAMIDIControl23CChannelVolumeEventWaitE @ 99 NONAME
-	_ZTIN18CMMAVideoUrlPlayer26CMMAVideoUrlPlayerDelegateE @ 100 NONAME
-	_ZTIN18CMMAVideoUrlPlayer36CMMAVideoUrlPlayerClipStreamDelegateE @ 101 NONAME
-	_ZTIN18CMMAVideoUrlPlayer36CMMAVideoUrlPlayerLiveStreamDelegateE @ 102 NONAME
-	_ZTIN19CMMAStopTimeControl10CStopTimerE @ 103 NONAME
-	_ZTV10CMMAPlayer @ 104 NONAME
-	_ZTV11CMMAControl @ 105 NONAME
-	_ZTV13CTimeOutTimer @ 106 NONAME
-	_ZTV14CMMAMIDIPlayer @ 107 NONAME
-	_ZTV16CMMAVideoControl @ 108 NONAME
-	_ZTV17CMMAMMFPlayerBase @ 109 NONAME
-	_ZTV17CMMAStreamRequest @ 110 NONAME
-	_ZTV17CMMAVolumeControl @ 111 NONAME
-	_ZTV17MMAFunctionServer @ 112 NONAME
-	_ZTV18CHXMetaDataUtility @ 113 NONAME
-	_ZTV18CMMAVideoUrlPlayer @ 114 NONAME
-	_ZTV20CMMAMMFPlayerFactory @ 115 NONAME
-	_ZTV26CPlaybackCompletedCallback @ 116 NONAME
-	_ZTVN15CMMAMIDIControl23CChannelVolumeEventWaitE @ 117 NONAME
-	_ZTVN18CMMAVideoUrlPlayer26CMMAVideoUrlPlayerDelegateE @ 118 NONAME
-	_ZTVN18CMMAVideoUrlPlayer36CMMAVideoUrlPlayerClipStreamDelegateE @ 119 NONAME
-	_ZTVN18CMMAVideoUrlPlayer36CMMAVideoUrlPlayerLiveStreamDelegateE @ 120 NONAME
-	_ZTVN19CMMAStopTimeControl10CStopTimerE @ 121 NONAME
-	_ZThn160_N18CMMAVideoUrlPlayer11HandleEventERK9TMMFEvent @ 122 NONAME
-	_ZThn288_N15CMMAAudioPlayer21ErrorPlaybackCompleteEi @ 123 NONAME
-	_ZThn288_N15CMMAAudioPlayer23HandlePlaybackCompleteLEv @ 124 NONAME
-	_ZThn296_N15CMMAVideoPlayer10SourceSizeEv @ 125 NONAME
-	_ZThn296_N15CMMAVideoPlayer11SetDisplayLEP11MMMADisplay @ 126 NONAME
-	_ZThn296_N15CMMAVideoPlayer11SnapshoterLEv @ 127 NONAME
-	_ZThn296_N15CMMAVideoPlayer21NotifyWithStringEventEN15CMMAPlayerEvent10TEventTypeERK7TDesC16 @ 128 NONAME
-	_ZThn296_N18CMMAVideoUrlPlayerD0Ev @ 129 NONAME
-	_ZThn296_N18CMMAVideoUrlPlayerD1Ev @ 130 NONAME
-	_ZThn300_N15CMMAVideoPlayer13TakeSnapshotLEP14TRequestStatusRK5TSizeRK17CMMAImageSettings @ 131 NONAME
-	_ZThn300_N15CMMAVideoPlayer14SnapshotBitmapEv @ 132 NONAME
-	_ZThn300_N15CMMAVideoPlayer15SnapshotEncodedEv @ 133 NONAME
-	_ZThn300_N18CMMAVideoUrlPlayerD0Ev @ 134 NONAME
-	_ZThn300_N18CMMAVideoUrlPlayerD1Ev @ 135 NONAME
-	_ZThn4_N15CMMAVideoPlayer14ReadCompletedLEiRK6TDesC8 @ 136 NONAME
-	_ZThn4_N18CMMAEMCAudioPlayer14ReadCompletedLEiRK6TDesC8 @ 137 NONAME
-	_ZThn4_N18CMMAEMCAudioPlayerD0Ev @ 138 NONAME
-	_ZThn4_N18CMMAEMCAudioPlayerD1Ev @ 139 NONAME
-	_ZThn4_N18CMMAVideoUrlPlayerD0Ev @ 140 NONAME
-	_ZThn4_N18CMMAVideoUrlPlayerD1Ev @ 141 NONAME
-	_ZThn4_N20CMMAMMFPlayerFactoryD0Ev @ 142 NONAME
-	_ZThn4_N20CMMAMMFPlayerFactoryD1Ev @ 143 NONAME
-	_ZThn8_N16CMMAVideoControl13SnapshotReadyEv @ 144 NONAME
-	_ZThn8_N16CMMAVideoControlD0Ev @ 145 NONAME
-	_ZThn8_N16CMMAVideoControlD1Ev @ 146 NONAME
+	_ZN10CMMAPlayer19PostActionCompletedEi @ 9 NONAME
+	_ZN10CMMAPlayer19RemoveStateListenerEP23MMMAPlayerStateListener @ 10 NONAME
+	_ZN10CMMAPlayer7ControlEi @ 11 NONAME
+	_ZN11CMMAManager17AddPlayerFactoryLEP17MMMAPlayerFactory @ 12 NONAME
+	_ZN13CTimeOutTimer4NewLEiR14MTimeOutNotify @ 13 NONAME
+	_ZN15CMMAAudioPlayer13PlayCompleteLEi @ 14 NONAME
+	_ZN15CMMAAudioPlayer13PrefetchDataLERK6TDesC8 @ 15 NONAME
+	_ZN15CMMAAudioPlayer13PrefetchFileLEv @ 16 NONAME
+	_ZN15CMMAAudioPlayer21ErrorPlaybackCompleteEi @ 17 NONAME
+	_ZN15CMMAAudioPlayer23HandlePlaybackCompleteLEv @ 18 NONAME
+	_ZN15CMMAVideoPlayer10SourceSizeEv @ 19 NONAME
+	_ZN15CMMAVideoPlayer11SetDisplayLEP11MMMADisplay @ 20 NONAME
+	_ZN15CMMAVideoPlayer11SnapshoterLEv @ 21 NONAME
+	_ZN15CMMAVideoPlayer13TakeSnapshotLEP14TRequestStatusRK5TSizeRK17CMMAImageSettings @ 22 NONAME
+	_ZN15CMMAVideoPlayer14ReadCompletedLEiRK6TDesC8 @ 23 NONAME
+	_ZN15CMMAVideoPlayer14SnapshotBitmapEv @ 24 NONAME
+	_ZN15CMMAVideoPlayer15SnapshotEncodedEv @ 25 NONAME
+	_ZN15CMMAVideoPlayer21NotifyWithStringEventEN15CMMAPlayerEvent10TEventTypeERK7TDesC16 @ 26 NONAME
+	_ZN15CMMAVideoPlayer24SetPlayerListenerObjectLEP8_jobjectP7JNIEnv_P15MMMAEventPoster @ 27 NONAME
+	_ZN15CMMAVideoPlayer4TypeEv @ 28 NONAME
+	_ZN16CMMAVideoControl13SnapshotReadyEv @ 29 NONAME
+	_ZN16CMMAVideoControlC1EP13MMMAGuiPlayer @ 30 NONAME
+	_ZN16CMMAVideoControlC2EP13MMMAGuiPlayer @ 31 NONAME
+	_ZN16CMMAVideoControlD0Ev @ 32 NONAME
+	_ZN16CMMAVideoControlD1Ev @ 33 NONAME
+	_ZN16CMMAVideoControlD2Ev @ 34 NONAME
+	_ZN17CMMAEMCPlayerBase13StreamControlEv @ 35 NONAME
+	_ZN17CMMAEMCPlayerBase9MMFactoryEv @ 36 NONAME
+	_ZN17CMMAMMFPlayerBase10ControllerEv @ 37 NONAME
+	_ZN17CMMAMMFPlayerBase11GetDurationEPx @ 38 NONAME
+	_ZN17CMMAMMFPlayerBase6DoOpenE4TUidRK6TDesC8S0_S3_20TMMFPrioritySettings @ 39 NONAME
+	_ZN17CMMAVolumeControl15SetVolumeLevelLEii @ 40 NONAME
+	_ZN17CMMAVolumeControl9AddLevelLEv @ 41 NONAME
+	_ZN17MMAFunctionServer25SetPlayerInstanceObserverEP26MMMAPlayerInstanceObserver @ 42 NONAME
+	_ZN17MMAFunctionServer26StaticAddObjectFromHandleLEPS_i @ 43 NONAME
+	_ZN17MMAFunctionServer7PlayersEv @ 44 NONAME
+	_ZN18CMMAEMCAudioPlayer10ConstructLEv @ 45 NONAME
+	_ZN18CMMAEMCAudioPlayer13PlayCompleteLEi @ 46 NONAME
+	_ZN18CMMAEMCAudioPlayer13PrefetchDataLERK6TDesC8 @ 47 NONAME
+	_ZN18CMMAEMCAudioPlayer13PrefetchFileLEv @ 48 NONAME
+	_ZN18CMMAEMCAudioPlayer14ReadCompletedLEiRK6TDesC8 @ 49 NONAME
+	_ZN18CMMAEMCAudioPlayer4TypeEv @ 50 NONAME
+	_ZN18CMMAEMCAudioPlayer8RealizeLEv @ 51 NONAME
+	_ZN18CMMAEMCAudioPlayer9PrefetchLEv @ 52 NONAME
+	_ZN18CMMAEMCAudioPlayerC1EP15CMMAEMCResolver @ 53 NONAME
+	_ZN18CMMAEMCAudioPlayerC2EP15CMMAEMCResolver @ 54 NONAME
+	_ZN18CMMAEMCAudioPlayerD0Ev @ 55 NONAME
+	_ZN18CMMAEMCAudioPlayerD1Ev @ 56 NONAME
+	_ZN18CMMAEMCAudioPlayerD2Ev @ 57 NONAME
+	_ZN18CMMAVideoUrlPlayer10ConstructLERK7TDesC16 @ 58 NONAME
+	_ZN18CMMAVideoUrlPlayer11DeallocateLEv @ 59 NONAME
+	_ZN18CMMAVideoUrlPlayer11HandleEventERK9TMMFEvent @ 60 NONAME
+	_ZN18CMMAVideoUrlPlayer12GetMediaTimeEPx @ 61 NONAME
+	_ZN18CMMAVideoUrlPlayer5StopLEi @ 62 NONAME
+	_ZN18CMMAVideoUrlPlayer6CloseLEv @ 63 NONAME
+	_ZN18CMMAVideoUrlPlayer6StartLEv @ 64 NONAME
+	_ZN18CMMAVideoUrlPlayer8RealizeLEv @ 65 NONAME
+	_ZN18CMMAVideoUrlPlayer9PrefetchLEv @ 66 NONAME
+	_ZN18CMMAVideoUrlPlayerC1EP15CMMAMMFResolver @ 67 NONAME
+	_ZN18CMMAVideoUrlPlayerC2EP15CMMAMMFResolver @ 68 NONAME
+	_ZN18CMMAVideoUrlPlayerD0Ev @ 69 NONAME
+	_ZN18CMMAVideoUrlPlayerD1Ev @ 70 NONAME
+	_ZN18CMMAVideoUrlPlayerD2Ev @ 71 NONAME
+	_ZN20CMMAMMFPlayerFactory13CreatePlayerLEP29CMMFFormatSelectionParametersPK7TDesC16 @ 72 NONAME
+	_ZN20CMMAMMFPlayerFactory33PreparePluginSelectionParametersLEP15CMMAMMFResolverP29CMMFFormatSelectionParameters @ 73 NONAME
+	_ZN20CMMAMMFPlayerFactoryC2Ev @ 74 NONAME
+	_ZN20CMMAMMFPlayerFactoryD0Ev @ 75 NONAME
+	_ZN20CMMAMMFPlayerFactoryD1Ev @ 76 NONAME
+	_ZN20CMMAMMFPlayerFactoryD2Ev @ 77 NONAME
+	_ZN22CMMAAudioVolumeControl4NewLEP15CMMAAudioPlayer @ 78 NONAME
+	_ZN25CMMAEMCAudioVolumeControl11DoGetLevelLEv @ 79 NONAME
+	_ZN25CMMAEMCAudioVolumeControl11DoSetLevelLEi @ 80 NONAME
+	_ZN25CMMAEMCAudioVolumeControl4NewLER18CMMAEMCAudioPlayer @ 81 NONAME
+	_ZN25CMMAEMCAudioVolumeControlC1ER18CMMAEMCAudioPlayer @ 82 NONAME
+	_ZN25CMMAEMCAudioVolumeControlC2ER18CMMAEMCAudioPlayer @ 83 NONAME
+	_ZNK11CMMAControl15PublicClassNameEv @ 84 NONAME
+	_ZNK14CMMAMIDIPlayer10MidiClientEv @ 85 NONAME
+	_ZNK16CMMAVideoControl9ClassNameEv @ 86 NONAME
+	_ZTI10CMMAPlayer @ 87 NONAME
+	_ZTI11CMMAControl @ 88 NONAME
+	_ZTI13CTimeOutTimer @ 89 NONAME
+	_ZTI14CMMAMIDIPlayer @ 90 NONAME
+	_ZTI16CMMAVideoControl @ 91 NONAME
+	_ZTI17CMMAMMFPlayerBase @ 92 NONAME
+	_ZTI17CMMAStreamRequest @ 93 NONAME
+	_ZTI17CMMAVolumeControl @ 94 NONAME
+	_ZTI17MMAFunctionServer @ 95 NONAME
+	_ZTI18CHXMetaDataUtility @ 96 NONAME
+	_ZTI18CMMAVideoUrlPlayer @ 97 NONAME
+	_ZTI20CMMAMMFPlayerFactory @ 98 NONAME
+	_ZTI26CPlaybackCompletedCallback @ 99 NONAME
+	_ZTIN15CMMAMIDIControl23CChannelVolumeEventWaitE @ 100 NONAME
+	_ZTIN18CMMAVideoUrlPlayer26CMMAVideoUrlPlayerDelegateE @ 101 NONAME
+	_ZTIN18CMMAVideoUrlPlayer36CMMAVideoUrlPlayerClipStreamDelegateE @ 102 NONAME
+	_ZTIN18CMMAVideoUrlPlayer36CMMAVideoUrlPlayerLiveStreamDelegateE @ 103 NONAME
+	_ZTIN19CMMAStopTimeControl10CStopTimerE @ 104 NONAME
+	_ZTV10CMMAPlayer @ 105 NONAME
+	_ZTV11CMMAControl @ 106 NONAME
+	_ZTV13CTimeOutTimer @ 107 NONAME
+	_ZTV14CMMAMIDIPlayer @ 108 NONAME
+	_ZTV16CMMAVideoControl @ 109 NONAME
+	_ZTV17CMMAMMFPlayerBase @ 110 NONAME
+	_ZTV17CMMAStreamRequest @ 111 NONAME
+	_ZTV17CMMAVolumeControl @ 112 NONAME
+	_ZTV17MMAFunctionServer @ 113 NONAME
+	_ZTV18CHXMetaDataUtility @ 114 NONAME
+	_ZTV18CMMAVideoUrlPlayer @ 115 NONAME
+	_ZTV20CMMAMMFPlayerFactory @ 116 NONAME
+	_ZTV26CPlaybackCompletedCallback @ 117 NONAME
+	_ZTVN15CMMAMIDIControl23CChannelVolumeEventWaitE @ 118 NONAME
+	_ZTVN18CMMAVideoUrlPlayer26CMMAVideoUrlPlayerDelegateE @ 119 NONAME
+	_ZTVN18CMMAVideoUrlPlayer36CMMAVideoUrlPlayerClipStreamDelegateE @ 120 NONAME
+	_ZTVN18CMMAVideoUrlPlayer36CMMAVideoUrlPlayerLiveStreamDelegateE @ 121 NONAME
+	_ZTVN19CMMAStopTimeControl10CStopTimerE @ 122 NONAME
+	_ZThn160_N18CMMAVideoUrlPlayer11HandleEventERK9TMMFEvent @ 123 NONAME
+	_ZThn288_N15CMMAAudioPlayer21ErrorPlaybackCompleteEi @ 124 NONAME
+	_ZThn288_N15CMMAAudioPlayer23HandlePlaybackCompleteLEv @ 125 NONAME
+	_ZThn296_N15CMMAVideoPlayer10SourceSizeEv @ 126 NONAME
+	_ZThn296_N15CMMAVideoPlayer11SetDisplayLEP11MMMADisplay @ 127 NONAME
+	_ZThn296_N15CMMAVideoPlayer11SnapshoterLEv @ 128 NONAME
+	_ZThn296_N15CMMAVideoPlayer21NotifyWithStringEventEN15CMMAPlayerEvent10TEventTypeERK7TDesC16 @ 129 NONAME
+	_ZThn296_N18CMMAVideoUrlPlayerD0Ev @ 130 NONAME
+	_ZThn296_N18CMMAVideoUrlPlayerD1Ev @ 131 NONAME
+	_ZThn300_N15CMMAVideoPlayer13TakeSnapshotLEP14TRequestStatusRK5TSizeRK17CMMAImageSettings @ 132 NONAME
+	_ZThn300_N15CMMAVideoPlayer14SnapshotBitmapEv @ 133 NONAME
+	_ZThn300_N15CMMAVideoPlayer15SnapshotEncodedEv @ 134 NONAME
+	_ZThn300_N18CMMAVideoUrlPlayerD0Ev @ 135 NONAME
+	_ZThn300_N18CMMAVideoUrlPlayerD1Ev @ 136 NONAME
+	_ZThn4_N15CMMAVideoPlayer14ReadCompletedLEiRK6TDesC8 @ 137 NONAME
+	_ZThn4_N18CMMAEMCAudioPlayer14ReadCompletedLEiRK6TDesC8 @ 138 NONAME
+	_ZThn4_N18CMMAEMCAudioPlayerD0Ev @ 139 NONAME
+	_ZThn4_N18CMMAEMCAudioPlayerD1Ev @ 140 NONAME
+	_ZThn4_N18CMMAVideoUrlPlayerD0Ev @ 141 NONAME
+	_ZThn4_N18CMMAVideoUrlPlayerD1Ev @ 142 NONAME
+	_ZThn4_N20CMMAMMFPlayerFactoryD0Ev @ 143 NONAME
+	_ZThn4_N20CMMAMMFPlayerFactoryD1Ev @ 144 NONAME
+	_ZThn8_N16CMMAVideoControl13SnapshotReadyEv @ 145 NONAME
+	_ZThn8_N16CMMAVideoControlD0Ev @ 146 NONAME
+	_ZThn8_N16CMMAVideoControlD1Ev @ 147 NONAME
 
--- a/javauis/mmapi_qt/directcontent/inc/cmmadcdisplay.h	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/directcontent/inc/cmmadcdisplay.h	Wed Jun 23 18:07:10 2010 +0300
@@ -48,13 +48,14 @@
      * @param aPlayer provides content
      */
     static CMMADCDisplay* NewLC(MMMAGuiPlayer* aPlayer,
-    MMAFunctionServer* aEventSource,
-    jobject aGUIObject);
-    virtual ~CMMADCDisplay();
+							    MMAFunctionServer* aEventSource,
+							    JNIEnv* aJni,
+							    jobject aGUIObject);
+							    virtual ~CMMADCDisplay();
 
 public: // From MMMADisplay
     void DrawFrameL(const CFbsBitmap* aBitmap);
-    void SetDisplaySizeL(const TSize& aSize);
+    //void SetDisplaySizeL(const TSize& aSize);
     void SetDisplayLocationL(const TPoint& aPosition);
     TPoint DisplayLocation();
     void SetFullScreenL(TBool aFullScreen);
--- a/javauis/mmapi_qt/directcontent/src/cmmadcdisplay.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/directcontent/src/cmmadcdisplay.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -35,12 +35,16 @@
 // Static constructor, leaves pointer to cleanup-stack
 CMMADCDisplay* CMMADCDisplay::NewLC(MMMAGuiPlayer* aPlayer,
                                     MMAFunctionServer* aEventSource,
+                                    JNIEnv* aJni,
                                     jobject aGUIObject)
 {
     CMMADCDisplay* self =
         new(ELeave) CMMADCDisplay(aPlayer, aEventSource, aGUIObject);
     CleanupStack::PushL(self);
     self->iRepaint = new(ELeave) CMMADCRepaintEvent(aGUIObject);
+    self->iIseSWT = ETrue;
+    self->Construct(aEventSource, aJni, aGUIObject);
+
     return self;
 }
 
@@ -75,7 +79,7 @@
         }
     }
 }
-
+/*
 // interface MMMADisplay
 void CMMADCDisplay::SetDisplaySizeL(const TSize& aSize)
 {
@@ -91,7 +95,7 @@
         iEventSource->PostEvent(event, CMMAEvent::EEventPriority);
     }
 }
-
+*/
 // interface MMMADisplay
 void CMMADCDisplay::SetDisplayLocationL(const TPoint& /*aPosition*/)
 {
@@ -110,19 +114,106 @@
 }
 
 // interface MMMADisplay
+
 void CMMADCDisplay::SetFullScreenL(TBool aFullScreen)
 {
     LOG1(EJavaMMAPI, EInfo, "CMMADCDisplay::SetFullScreenL %d", aFullScreen);
     // This method tries to set eSWT Widget size to its parent size.
     // If real full screen mode is needed parent Composite must be in
     // fullscreen mode (for example with MobileShell's setFullScreenMode method).
-    if (iContainer)
+    //if (iContainer)
+    //{
+    //    CMMADCFullScreenEvent* event =
+    //        new(ELeave)CMMADCFullScreenEvent(iGUIObject, aFullScreen);
+    //    iEventSource->PostEvent(event, CMMAEvent::EEventPriority);
+    //}
+    iFullScreen = aFullScreen;
+    if (iContainerVisible)
     {
-        CMMADCFullScreenEvent* event =
-            new(ELeave)CMMADCFullScreenEvent(iGUIObject, aFullScreen);
-        iEventSource->PostEvent(event, CMMAEvent::EEventPriority);
+        RemoveClippingRegion();
+
+        if (aFullScreen)
+        {
+            // use new scaled rect
+            // iWindow->SetDrawRect(ScaleToFullScreen(fullScreenSize, iSourceSize));
+            LOG2(EJavaMMAPI, EInfo, "CMMADCDisplay::SetFullscreen iFullScreenSize.Width = %d iFullscreenSize.Height = %d",
+                 iFullScreenSize.iWidth, iFullScreenSize.iHeight);
+
+            iWindow->SetWindowRect(ScaleToFullScreen(iFullScreenSize, iSourceSize), MMMADisplay::EUiThread);
+            iWindow->SetRWindowRect(ScaleToFullScreen(iFullScreenSize, iSourceSize), MMMADisplay::EUiThread);
+            iWindow->SetDrawRectThread(ScaleToFullScreen(iFullScreenSize, iSourceSize));
+            //iWindow->SetDrawRect(ScaleToFullScreen(iFullScreenSize, iSourceSize));
+        }
+        else
+        {
+            // use size set from java
+            //iWindow->SetDrawRect(iUserRect);
+            iWindow->SetDrawRectThread(iUserRect);
+        }
+
+        AddClippingRegion();
     }
 }
+/*
+void CMMADCDisplay::SetFullScreenL(TBool aFullScreen)
+{
+    LOG(EJavaMMAPI, EInfo, "CMMADCDisplay::SetFullscreenL() +");
+
+       //  TSize canvasSize(aJavaControlWidth, aJavaControlHeight);
+       iSourceSize = SourceSize();
+       //iSourceSize=canvasSize;
+          LOG1(EJavaMMAPI, EInfo, "CMMADCDisplay::SetFullscreenL() asourcesize %d",iSourceSize );
+        #ifdef RD_JAVA_NGA_Enabled
+        if(iWindow)
+        {
+            iWindow->SetVideoCropRegion( TRect(iUserRect.iTl, iSourceSize));
+        }
+        #endif
+       //  TSize canvasSize(aJavaControlWidth, aJavaControlHeight);
+       //chnaged
+
+       //TSize canvasSize(iFullScreenSize.iWidth, iFullScreenSize.iHeight);
+       //TSize iUser(iUserRect.Width(),iUserRect.Height());
+        //iFullScreenSize = canvasSize;
+      // iFullScreenSize=iUser;
+      // if(aFullScreen)
+       //   {
+       //        iFullScreenSize = canvasSize;
+       //   }
+        TBool sourceIsBigger = (iSourceSize.iWidth > iFullScreenSize.iWidth ||
+                                iSourceSize.iHeight > iFullScreenSize.iHeight);
+
+        if(sourceIsBigger)
+        {
+
+              iWindow->SetWindowRect(iFullScreenSize,MMMADisplay::EMmaThread);
+            iWindow->SetRWindowRect(iFullScreenSize,MMMADisplay::EMmaThread);
+            iWindow->SetDrawRect(ScaleToFullScreen(iFullScreenSize, iSourceSize));
+        }
+        else
+        {
+             iWindow->SetWindowRect(iFullScreenSize,MMMADisplay::EMmaThread);
+            iWindow->SetRWindowRect(iFullScreenSize,MMMADisplay::EMmaThread);
+            //iWindow->SetVideoCropRegion( TRect(iUserRect.iTl,iFullScreenSize));
+            //;iWindow->SetDrawRect( TRect(iUserRect.iTl, iSourceSize));
+            iWindow->SetDrawRect( TRect(iUserRect.iTl,iFullScreenSize));
+
+        }
+       LOG1(EJavaMMAPI, EInfo, "CMMADCDisplay::SourceSizeChanged()1 - %d",iUserRect.Size());
+        SetClippingRegion();
+        LOG1(EJavaMMAPI, EInfo, "CMMADCDisplay::SourceSizeChanged()2 -%d",iUserRect.Size());
+        if(iUserRect.IsEmpty())
+        {
+            iUserRect = iWindow->DrawRect();
+
+            if(!sourceIsBigger)
+            {
+                iUserRect = TRect(iUserRect.Size());
+            }
+        }
+        LOG(EJavaMMAPI, EInfo, "CMMADCDisplay::SourceSizeChanged() -");
+        LOG1(EJavaMMAPI, EInfo, "CMMADCDisplay::SourceSizeChanged()3 -%d",iUserRect.Size());
+}*/
 
 // interface MMMADisplay
 void CMMADCDisplay::SourceSizeChanged(const TSize& aSourceSize)
@@ -154,8 +245,57 @@
         }
     }
 }
-void CMMADCDisplay::SourceSizeChanged(TInt /*aJavaControlWidth*/, TInt /*aJavaControlHeight*/,TInt /*x*/, TInt /*y*/, TRect /*aBoundsRect*/)
+
+
+void CMMADCDisplay::SourceSizeChanged(TInt aJavaControlWidth, TInt aJavaControlHeight,TInt /*x*/, TInt /*y*/, TRect /*aBoundsRect*/)
 {
+    LOG(EJavaMMAPI, EInfo, "CMMADCDisplay::SourceSizeChanged() +");
+    LOG2(EJavaMMAPI, EInfo, "CMMADCDisplay::SourceSizeChanged() aJavaControlWidth=%d aJavaControlHeight=%d", aJavaControlWidth, aJavaControlHeight);
+    //  TSize canvasSize(aJavaControlWidth, aJavaControlHeight);
+    iSourceSize = SourceSize();
+    //iSourceSize=canvasSize;
+    LOG1(EJavaMMAPI, EInfo, "CMMADCDisplay::SourceSizeChanged() asourcesize %d",iSourceSize);
+#ifdef RD_JAVA_NGA_Enabled
+    if (iWindow)
+    {
+        iWindow->SetVideoCropRegion(TRect(iUserRect.iTl, iSourceSize));
+    }
+#endif
+    //  TSize canvasSize(aJavaControlWidth, aJavaControlHeight);
+    //chnaged
+    TSize canvasSize(aJavaControlWidth, aJavaControlHeight);
+    iFullScreenSize = canvasSize;
+
+    TBool sourceIsBigger = (iSourceSize.iWidth > iFullScreenSize.iWidth ||
+                            iSourceSize.iHeight > iFullScreenSize.iHeight);
+
+    if (sourceIsBigger)
+    {
+        iWindow->SetWindowRect(iFullScreenSize,MMMADisplay::EMmaThread);
+        iWindow->SetRWindowRect(iFullScreenSize,MMMADisplay::EMmaThread);
+        iWindow->SetDrawRect(ScaleToFullScreen(iFullScreenSize, iSourceSize));
+    }
+    else
+    {
+        iWindow->SetWindowRect(iFullScreenSize,MMMADisplay::EMmaThread);
+        iWindow->SetRWindowRect(iFullScreenSize,MMMADisplay::EMmaThread);
+        //;iWindow->SetDrawRect( TRect(iUserRect.iTl, iSourceSize));
+        iWindow->SetDrawRect(TRect(iUserRect.iTl,iFullScreenSize));
+    }
+    LOG1(EJavaMMAPI, EInfo, "CMMADCDisplay::SourceSizeChanged()1 - %d",iUserRect.Size());
+    SetClippingRegion();
+    LOG1(EJavaMMAPI, EInfo, "CMMADCDisplay::SourceSizeChanged()2 -%d",iUserRect.Size());
+    if (iUserRect.IsEmpty())
+    {
+        iUserRect = iWindow->DrawRect();
+
+        if (!sourceIsBigger)
+        {
+            iUserRect = TRect(iUserRect.Size());
+        }
+    }
+    LOG(EJavaMMAPI, EInfo, "CMMADCDisplay::SourceSizeChanged() -");
+    LOG1(EJavaMMAPI, EInfo, "CMMADCDisplay::SourceSizeChanged()3 -%d",iUserRect.Size());
 }
 
 // interface MMMADisplay
--- a/javauis/mmapi_qt/volumekeys/src/cmmaforeground.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/volumekeys/src/cmmaforeground.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -63,7 +63,7 @@
          eikEnv->RemoveForegroundObserver(*this);
          LOG( EJavaMMAPI, EInfo, "CMMAForeground::~CMMAForeground() : eikEnv RemoveForegroundObserver -");
      }
-    */
+
     if (iEventPoster && iDeleteRefEvent)
     {
         iEventPoster->PostEvent(iDeleteRefEvent);
@@ -71,7 +71,8 @@
     else
     {
         delete iDeleteRefEvent;
-    }
+    }*/
+    //TODO MemoryLeak need to delete the above object.
     delete iForegroundEvent;
     delete iActiveScheduler;
     LOG(EJavaMMAPI, EInfo, "CMMAForeground::~CMMAForeground() - ");
--- a/javauis/mmapi_qt/volumekeys/src/cmmavolumekeyslistener.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/mmapi_qt/volumekeys/src/cmmavolumekeyslistener.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -63,11 +63,12 @@
          iJavaRemConManager = NULL;
      }
     */
+    /*
     if (NULL != iTimer)
     {
         iTimer->Cancel();
         delete iTimer;
-    }
+    }*/
     LOG(EJavaMMAPI, EInfo, "CMMAVolumeKeysListener::~CMMAVolumeKeysListener() -");
 }
 
@@ -83,7 +84,8 @@
     iJavaRemConManager->SetObserverL(*iJavaRemConObserver);
     */
     // Timer for implementing Pressed/Released/Clicked feature.
-    iTimer = CPeriodic::NewL(CActive::EPriorityStandard);
+    //TODO For Mediakey(Hard VolumeKey)
+    //iTimer = CPeriodic::NewL(CActive::EPriorityStandard);
 
     iListener = aListener;
     LOG(EJavaMMAPI, EInfo, "CMMAVolumeKeysListener::ConstructL -");
--- a/javauis/nokiasound/src/cmidsound.cpp	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/nokiasound/src/cmidsound.cpp	Wed Jun 23 18:07:10 2010 +0300
@@ -201,8 +201,8 @@
 TInt CMIDSound::Play(TInt aLoop)
 {
     JELOG2(EJavaUI);
-    TInt err;
-    CallMethodL(err, this, &CMIDSound::DoPlay, aLoop, this);
+    TInt err = 0;
+    CallMethod(err, this, &CMIDSound::DoPlay, aLoop, this);
     return err;
 }
 
@@ -256,8 +256,8 @@
 TInt CMIDSound::SoundVolume()
 {
     JELOG2(EJavaUI);
-    TInt result;
-    CallMethodL(result, this, &CMIDSound::Volume, this);
+    TInt result = 0;
+    CallMethod(result, this, &CMIDSound::Volume, this);
     return result;
 }
 
@@ -289,8 +289,8 @@
 TInt CMIDSound::PlayerState()
 {
     JELOG2(EJavaUI);
-    TInt result;
-    CallMethodL(result, this, &CMIDSound::State, this);
+    TInt result = 0;
+    CallMethod(result, this, &CMIDSound::State, this);
     return result;
 }
 
--- a/javauis/runtimeui_qt/tsrc.s60/javasrc/com/nokia/mj/impl/rt/ui/qt/RuntimeUiQtTests.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/runtimeui_qt/tsrc.s60/javasrc/com/nokia/mj/impl/rt/ui/qt/RuntimeUiQtTests.java	Wed Jun 23 18:07:10 2010 +0300
@@ -82,7 +82,6 @@
 
     private void doTest(RuntimeUi runtimeUi)
     {
-        System.out.println("+doTest()");
         // error message with details -> make sure both are available to the user
         ExceptionBase exc = new ExceptionBase(
             new ShortErrorMessage(),
@@ -103,13 +102,6 @@
             null,
             0,
             null /* no params for detailed msg */);
-        System.out.println("3");
-
-        runtimeUi.error("MyApplication", exc);
-
-        // Test no crash happen.
-        runtimeUi.error("NullException", null);
-
 
         boolean answerAvailable = false;
 
@@ -130,6 +122,5 @@
         runtimeUi.confirm("Null Application", nullConf);
 
         runtimeUi.destroy();
-        System.out.println("-doTest()");
     }
 }
--- a/javauis/tsrc/fute/lcdui/Midp_Alert_01/build.xml	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/tsrc/fute/lcdui/Midp_Alert_01/build.xml	Wed Jun 23 18:07:10 2010 +0300
@@ -28,7 +28,7 @@
     <property name="midlet.permissions" value=""/>
     <property name="package.name" value="Midp_Alert_01"/>
     <property name="company.name" value="Nokia"/>
-    <property name="midlet.version" value="1.1"/>
+    <property name="midlet.version" value="1.2"/>
     <property name="midlet.description" value=""/>
 
     <!-- Get settings for a basic MIDlet. -->
--- a/javauis/tsrc/fute/lcdui/Midp_Alert_01/src/AlertTests.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/tsrc/fute/lcdui/Midp_Alert_01/src/AlertTests.java	Wed Jun 23 18:07:10 2010 +0300
@@ -156,6 +156,14 @@
                 errorAlert.setTimeout(Alert.FOREVER);
                 Display.getDisplay(parent).setCurrent(errorAlert);
             }
+            catch (IllegalArgumentException e)
+            {
+                System.out.println("Exception: " + e.toString());
+                Alert errorAlert = new Alert("Exception", e.toString(), null,
+                                             AlertType.ERROR);
+                errorAlert.setTimeout(Alert.FOREVER);
+                Display.getDisplay(parent).setCurrent(errorAlert);
+            }
         }
         else if (c == cmdExit)
         {
--- a/rom/java_2_1.iby	Fri Jun 11 13:33:44 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,362 +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:
-* Image-description file of the Java package for ROFS1.
-*/
-
-#ifndef __JAVA_IBY__
-#define __JAVA_IBY__
-
-#include <data_caging_paths_for_iby.hrh>
-
-// Helper defines
-define JAVA_RES_BLD        ABI_DIR\BUILD_DIR\z\resource\java
-define JAVA_RES_IMG        RESOURCE_FILES_DIR\java
-define JAVA_VM_RES_BLD     JAVA_RES_BLD\jvm\lib\jrt
-define JAVA_VM_RES_IMG     JAVA_RES_IMG\jvm\lib\jrt
-define JAVA_POLICY_BLD     ABI_DIR\BUILD_DIR\z\resource\java\security\policies
-define JAVA_POLICY_IMG     RESOURCE_FILES_DIR\java\security\policies
-
-
-////////////////////////////
-// Java Manager collection//
-////////////////////////////
-
-// stub sis
-data=ZSYSTEM\install\java.sis    System\Install\java.sis
-
-
-// AppMngr plugin
-ECOM_PLUGIN( appmngr2midletplugin.dll, appmngr2midletplugin.rsc )
-data=ZRESOURCE\plugins\appmngr2midletplugin.rsc    ECOM_RESOURCE_DIR\appmngr2midletplugin.rsc
-
-// Captain
-file=ABI_DIR\BUILD_DIR\javacaptain_ext_btdeviceclassmanager.dll             SHARED_LIB_DIR\javacaptain_ext_btdeviceclassmanager.dll
-file=ABI_DIR\BUILD_DIR\javacaptain_ext_config.dll                           SHARED_LIB_DIR\javacaptain_ext_config.dll
-file=ABI_DIR\BUILD_DIR\javacaptain_ext_ondemand_2.dll                       SHARED_LIB_DIR\javacaptain_ext_ondemand_2.dll
-file=ABI_DIR\BUILD_DIR\javacaptain_ext_ondemand_7.dll                       SHARED_LIB_DIR\javacaptain_ext_ondemand_7.dll
-file=ABI_DIR\BUILD_DIR\javacaptain_ext_preinstallerstarter.dll              SHARED_LIB_DIR\javacaptain_ext_preinstallerstarter.dll
-file=ABI_DIR\BUILD_DIR\javacaptain_ext_pushregistryplugin.dll               SHARED_LIB_DIR\javacaptain_ext_pushregistryplugin.dll
-file=ABI_DIR\BUILD_DIR\javacaptain_ext_storageserverplugin.dll              SHARED_LIB_DIR\javacaptain_ext_storageserverplugin.dll
-file=ABI_DIR\BUILD_DIR\javacaptain.exe                                      PROGRAMS_DIR\javacaptain.exe
-
-// Registry
-file=ABI_DIR\BUILD_DIR\javaregistryclient.dll                               SHARED_LIB_DIR\javaregistryclient.dll
-file=ABI_DIR\BUILD_DIR\javasizehelperclient.dll                             SHARED_LIB_DIR\javasizehelperclient.dll
-file=ABI_DIR\BUILD_DIR\javasizehelperserver.dll                             SHARED_LIB_DIR\javasizehelperserver.dll
-
-// Installer
-ECOM_PLUGIN(ifeui.dll,ifeui.rsc)
-data=ZRESOURCE\plugins\ifeui.rsc                                            ECOM_RESOURCE_DIR\ifeui.rsc
-data=ZPRIVATE\10003a3f\apps\javainstaller_reg.rsc                           \private\10003a3f\import\apps\javainstaller_reg.rsc
-data=ZRESOURCE\apps\javainstaller_loc.rsc                                   APP_RESOURCE_DIR\javainstaller_loc.rsc
-data=ZRESOURCE\apps\javainstaller_icon.mif                                  APP_BITMAP_DIR\javainstaller_icon.mif
-file=ABI_DIR\BUILD_DIR\javainstaller.dll                                    SHARED_LIB_DIR\javainstaller.dll
-data=JAVA_VM_RES_BLD\javainstallerui.odc                                    JAVA_VM_RES_IMG\javainstallerui.odc
-file=ABI_DIR\BUILD_DIR\javainstallerui.dll                                  SHARED_LIB_DIR\javainstallerui.dll
-data=JAVA_VM_RES_BLD\javainstaller.odc                                      JAVA_VM_RES_IMG\javainstaller.odc
-file=ABI_DIR\BUILD_DIR\javainstallerstarter.dll                             PROGRAMS_DIR\javainstallerstarter.dll
-file=ABI_DIR\BUILD_DIR\javapreinstaller.dll                                 PROGRAMS_DIR\javapreinstaller.dll
-data=ZRESOURCE\java\java_app_92.mif                                         JAVA_RES_IMG\java_app.mif
-data=ZRESOURCE\java\java_trusted.png                                        JAVA_RES_IMG\java_trusted.png
-data=ZRESOURCE\java\java_untrusted.png                                      JAVA_RES_IMG\java_untrusted.png
-data=DATAZ_\private\102033E6\installer\inst_plugins.cfg           	    \private\102033E6\installer\inst_plugins.cfg
-
-// Launchers
-file=ABI_DIR\BUILD_DIR\javalauncher.exe                                     PROGRAMS_DIR\javalauncher.exe
-ECOM_PLUGIN(javaappschemeplugin.dll,javaappschemeplugin.rsc)
-data=ZRESOURCE\plugins\javaappschemeplugin.rsc                              ECOM_RESOURCE_DIR\javaappschemeplugin.rsc
-
-// SID Checker
-ECOM_PLUGIN(javasidchecker.dll,10281FBE.rsc)
-data=ZRESOURCE\plugins\javasidchecker.rsc                                   ECOM_RESOURCE_DIR\javasidchecker.rsc
-
-// Recognizers
-ECOM_PLUGIN(recjar.dll, 102031FB.rsc)
-data=ZRESOURCE\plugins\recjar.rsc                                           ECOM_RESOURCE_DIR\recjar.rsc
-
-// Backup & Restore
-file=ABI_DIR\BUILD_DIR\javabackup.exe                                       PROGRAMS_DIR\javabackup.exe
-ECOM_PLUGIN(midp2backupplugin.dll,10282474.rsc)
-data=ZRESOURCE\plugins\midp2backupplugin.rsc                                ECOM_RESOURCE_DIR\midp2backupplugin.rsc
-data=DATAZ_\private\1028246F\backup_registration.xml                        \private\1028246F\backup_registration.xml
-data=DATAZ_\private\102033E6\backup_registration.xml                        \private\102033E6\backup_registration.xml
-
-
-/////////////////////////
-// Java UIs collection //
-/////////////////////////
-
-// CoreUi
-file=ABI_DIR\BUILD_DIR\javacoreui.dll                                       SHARED_LIB_DIR\javacoreui.dll
-data=JAVA_VM_RES_BLD\javacoreui.odc                                         JAVA_VM_RES_IMG\javacoreui.odc
-
-// eSWT
-file=ABI_DIR\BUILD_DIR\eswt.dll                                             SHARED_LIB_DIR\eswt.dll
-data=JAVA_VM_RES_BLD\eswt.odc                                               JAVA_VM_RES_IMG\eswt.odc
-file=ABI_DIR\BUILD_DIR\eswtphysics.dll                                      SHARED_LIB_DIR\eswtphysics.dll
-file=ABI_DIR\BUILD_DIR\eswtapifacade.dll                                    SHARED_LIB_DIR\eswtapifacade.dll
-file=ABI_DIR\BUILD_DIR\eswtdirectcontent.dll                                SHARED_LIB_DIR\eswtdirectcontent.dll
-data=JAVA_VM_RES_BLD\eswtdirectcontent.odc                                  JAVA_VM_RES_IMG\eswtdirectcontent.odc
-data=ZPRIVATE\10003a3f\apps\eswt_reg.rsc                                    \private\10003a3f\import\apps\eswt_reg.rsc
-
-// LCDUI
-file=ABI_DIR\BUILD_DIR\javalcdui.dll                                        SHARED_LIB_DIR\javalcdui.dll
-data=JAVA_VM_RES_BLD\javalcdui.odc                                          JAVA_VM_RES_IMG\javalcdui.odc
-file=ABI_DIR\BUILD_DIR\lcdui.dll                                            SHARED_LIB_DIR\lcdui.dll
-file=ABI_DIR\BUILD_DIR\lcdgr.dll                                            SHARED_LIB_DIR\lcdgr.dll
-file=ABI_DIR\BUILD_DIR\lcdgdrv.dll                                          SHARED_LIB_DIR\lcdgdrv.dll
-file=ABI_DIR\BUILD_DIR\lcdgdrvi.dll                                         SHARED_LIB_DIR\lcdgdrvi.dll
-file=ABI_DIR\BUILD_DIR\lcduiphysicswrap.dll                                 SHARED_LIB_DIR\lcduiphysicswrap.dll
-ECOM_PLUGIN(LCDC4K.dll, 10208164.rsc)
-ECOM_PLUGIN(LCDC64K.dll, 10208162.rsc)
-ECOM_PLUGIN(LCDC16MU.dll, 10208166.rsc)
-ECOM_PLUGIN(LCDC16MA.dll, 10208168.rsc)
-data=ZRESOURCE\java\lcdgr.rsc                                               JAVA_RES_IMG\lcdgr.rsc
-data=ZPRIVATE\10003a3f\apps\lcdui_reg.rsc                                   \private\10003a3f\import\apps\lcdui_reg.rsc
-
-SCALABLE_IMAGE(APP_BITMAP_DIR,APP_BITMAP_DIR,lcdui)
-
-// AMMS API
-file=ABI_DIR\BUILD_DIR\javaamms.dll                                         SHARED_LIB_DIR\javaamms.dll
-data=JAVA_VM_RES_BLD\javaamms.odc                                           JAVA_VM_RES_IMG\javaamms.odc
-
-// Mobile Media API
-file=ABI_DIR\BUILD_DIR\javamobilemedia.dll                                  SHARED_LIB_DIR\javamobilemedia.dll
-data=JAVA_VM_RES_BLD\javamobilemedia.odc                                    JAVA_VM_RES_IMG\javamobilemedia.odc
-data=ABI_DIR\BUILD_DIR\z\system\sounds\digital\CamcorderJavaCapture.wav     \System\Sounds\Digital\CamcorderJavaCapture.wav
-data=ABI_DIR\BUILD_DIR\z\system\sounds\digital\CamcorderJavaStart.wav       \System\Sounds\Digital\CamcorderJavaStart.wav
-
-// MobInfo API
-file=ABI_DIR\BUILD_DIR\javamobinfo.dll                                      SHARED_LIB_DIR\javamobinfo.dll
-data=JAVA_VM_RES_BLD\javamobinfo.odc                                        JAVA_VM_RES_IMG\javamobinfo.odc
-
-// GlobalIndicators API
-file=ABI_DIR\BUILD_DIR\javaglobalindicators.dll                             SHARED_LIB_DIR\javaglobalindicators.dll
-data=JAVA_VM_RES_BLD\javaglobalindicators.odc                               JAVA_VM_RES_IMG\javaglobalindicators.odc
-
-// SoftNotification API
-file=ABI_DIR\BUILD_DIR\javasoftnotification.dll                             SHARED_LIB_DIR\javasoftnotification.dll
-data=JAVA_VM_RES_BLD\javasoftnotification.odc                               JAVA_VM_RES_IMG\javasoftnotification.odc
-
-// 2G API
-file=ABI_DIR\BUILD_DIR\javam2g.dll                                          SHARED_LIB_DIR\javam2g.dll
-data=JAVA_VM_RES_BLD\javam2g.odc                                            JAVA_VM_RES_IMG\javam2g.odc
-
-// 3G API
-file=ABI_DIR\BUILD_DIR\javam3g.dll                                          SHARED_LIB_DIR\javam3g.dll
-data=JAVA_VM_RES_BLD\javam3g.odc                                            JAVA_VM_RES_IMG\javam3g.odc
-
-// Nokia Sound API
-file=ABI_DIR\BUILD_DIR\javanokiasound.dll                                   SHARED_LIB_DIR\javanokiasound.dll
-data=JAVA_VM_RES_BLD\javanokiasound.odc                                     JAVA_VM_RES_IMG\javanokiasound.odc
-
-// Remote Connection Observer
-file=ABI_DIR\BUILD_DIR\javaremconobserver.dll                               SHARED_LIB_DIR\javaremconobserver.dll
-
-// Legacy utilities
-file=ABI_DIR\BUILD_DIR\javalegacyutils.dll                                  SHARED_LIB_DIR\javalegacyutils.dll
-data=JAVA_VM_RES_BLD\javalegacyutils.odc                                    JAVA_VM_RES_IMG\javalegacyutils.odc
-
-
-/////////////////////////////
-// Java Runtimes collection //
-/////////////////////////////
-
-// Runtime utilities
-file=ABI_DIR\BUILD_DIR\javaruntimeui.dll                                    SHARED_LIB_DIR\javaruntimeui.dll
-data=JAVA_VM_RES_BLD\javaruntimeui.odc                                      JAVA_VM_RES_IMG\javaruntimeui.odc
-file=ABI_DIR\BUILD_DIR\javaruntimestarterutils.dll                          SHARED_LIB_DIR\javaruntimestarterutils.dll
-
-// MIDP runtime
-file=ABI_DIR\BUILD_DIR\javamidp.exe                                         PROGRAMS_DIR\javamidp.exe
-file=ABI_DIR\BUILD_DIR\javamidpstarter.dll                                  SHARED_LIB_DIR\javamidpstarter.dll
-file=ABI_DIR\BUILD_DIR\javamidpruntime.dll                                  SHARED_LIB_DIR\javamidpruntime.dll
-data=JAVA_VM_RES_BLD\javamidpruntime.odc                                    JAVA_VM_RES_IMG\javamidpruntime.odc
-
-// An empty JVM argument modifier (to prevent 3rd parties from installing a DLL with this name)
-// To enable JVM argument modifier - comment 1st line below and uncomment 2nd line below
-file=ABI_DIR\BUILD_DIR\javajvmargsmodifier.dll                              SHARED_LIB_DIR\javajvmargsmodifier.dll
-//file=ABI_DIR\BUILD_DIR\javajvmargsmodifierfile.dll                        SHARED_LIB_DIR\javajvmargsmodifier.dll
-
-
-/////////////////////////////
-// Java Commons collection //
-/////////////////////////////
-
-// J9 JVM
-file=ABI_DIR\BUILD_DIR\j9.dll                                               SHARED_LIB_DIR\j9.dll
-file=ABI_DIR\BUILD_DIR\j9vmall23.dll                                        SHARED_LIB_DIR\j9vmall23.dll
-file=ABI_DIR\BUILD_DIR\j9mjit23.dll                                         SHARED_LIB_DIR\j9mjit23.dll
-file=ABI_DIR\BUILD_DIR\jclcldc11_23.dll                                     SHARED_LIB_DIR\jclcldc11_23.dll
-file=ABI_DIR\BUILD_DIR\jclcdc11_23.dll                                      SHARED_LIB_DIR\jclcdc11_23.dll
-file=ABI_DIR\BUILD_DIR\j9fdm23.dll                                          SHARED_LIB_DIR\j9fdm23.dll
-file=ABI_DIR\BUILD_DIR\JvmNativePort.dll                                    SHARED_LIB_DIR\JvmNativePort.dll
-data=JAVA_RES_BLD\jvm\bin\java.properties                                   JAVA_RES_IMG\jvm\bin\java.properties
-data=JAVA_RES_BLD\jvm\lib\security\java.policy                              JAVA_RES_IMG\jvm\lib\security\java.policy
-data=JAVA_RES_BLD\jvm\lib\security\java.security                            JAVA_RES_IMG\jvm\lib\security\java.security
-
-// Utilities
-file=ABI_DIR\BUILD_DIR\javautils.dll                                        SHARED_LIB_DIR\javautils.dll
-data=JAVA_VM_RES_BLD\javautils.odc                                          JAVA_VM_RES_IMG\javautils.odc
-file=ABI_DIR\BUILD_DIR\javacomms.dll                                        SHARED_LIB_DIR\javacomms.dll
-data=JAVA_VM_RES_BLD\javacomms.odc                                          JAVA_VM_RES_IMG\javacomms.odc
-file=ABI_DIR\BUILD_DIR\javaipc.dll                                          SHARED_LIB_DIR\javaipc.dll
-file=ABI_DIR\BUILD_DIR\javafileutils.dll                                    SHARED_LIB_DIR\javafileutils.dll
-data=JAVA_VM_RES_BLD\javafileutils.odc                                      JAVA_VM_RES_IMG\javafileutils.odc
-file=ABI_DIR\BUILD_DIR\javadebugapi.dll                                     SHARED_LIB_DIR\javadebugapi.dll
-
-// Security dlls
-file=ABI_DIR\BUILD_DIR\javasecurity.dll                                     SHARED_LIB_DIR\javasecurity.dll
-data=JAVA_VM_RES_BLD\javasecurity.odc                                       JAVA_VM_RES_IMG\javasecurity.odc
-ECOM_PLUGIN(javaunicertstoreplugin.dll,200213A3.rsc)
-data=ZRESOURCE\plugins\javaunicertstoreplugin.rsc                           ECOM_RESOURCE_DIR\javaunicertstoreplugin.rsc
-
-// Security certs & policies
-data=JAVA_POLICY_BLD\s60_manufacturer.ser                                   JAVA_POLICY_IMG\s60_manufacturer.ser
-data=JAVA_POLICY_BLD\s60_operator.ser                                       JAVA_POLICY_IMG\s60_operator.ser
-data=JAVA_POLICY_BLD\s60_trustedthirdparty.ser                              JAVA_POLICY_IMG\s60_trustedthirdparty.ser
-data=JAVA_POLICY_BLD\s60_untrusted.ser                                      JAVA_POLICY_IMG\s60_untrusted.ser
-data=JAVA_POLICY_BLD\msa_manufacturer.ser                                   JAVA_POLICY_IMG\msa_manufacturer.ser
-data=JAVA_POLICY_BLD\msa_operator.ser                                       JAVA_POLICY_IMG\msa_operator.ser
-data=JAVA_POLICY_BLD\msa_trustedthirdparty.ser                              JAVA_POLICY_IMG\msa_trustedthirdparty.ser
-data=JAVA_POLICY_BLD\msa_untrusted.ser                                      JAVA_POLICY_IMG\msa_untrusted.ser
-data=JAVA_POLICY_BLD\att_manufacturer.ser                                   JAVA_POLICY_IMG\att_manufacturer.ser
-data=JAVA_POLICY_BLD\att_operator.ser                                       JAVA_POLICY_IMG\att_operator.ser
-data=JAVA_POLICY_BLD\att_operatorextra.ser                                  JAVA_POLICY_IMG\att_operatorextra.ser
-data=JAVA_POLICY_BLD\att_trustedthirdparty.ser                              JAVA_POLICY_IMG\att_trustedthirdparty.ser
-data=JAVA_POLICY_BLD\att_untrusted.ser                                      JAVA_POLICY_IMG\att_untrusted.ser
-data=JAVA_POLICY_BLD\all.ser                                                JAVA_POLICY_IMG\all.ser
-
-
-// Java environment info
-file=ABI_DIR\BUILD_DIR\javaenvinfo.dll                                      SHARED_LIB_DIR\javaenvinfo.dll
-data=ABI_DIR\BUILD_DIR\Z\Resource\versions\java.txt                         RESOURCE_FILES_DIR\versions\java.txt
-
-// Storage
-file=ABI_DIR\BUILD_DIR\javastorage.dll                                      SHARED_LIB_DIR\javastorage.dll
-data=JAVA_VM_RES_BLD\javastorage.odc                                        JAVA_VM_RES_IMG\javastorage.odc
-
-// GCF base
-file=ABI_DIR\BUILD_DIR\javagcf.dll                                          SHARED_LIB_DIR\javagcf.dll
-data=JAVA_VM_RES_BLD\javagcf.odc                                            JAVA_VM_RES_IMG\javagcf.odc
-
-// Connection Manager
-file=ABI_DIR\BUILD_DIR\javaconnectionmanager.dll                            SHARED_LIB_DIR\javaconnectionmanager.dll
-data=JAVA_VM_RES_BLD\javaconnectionmanager.odc                              JAVA_VM_RES_IMG\javaconnectionmanager.odc
-
-// Http & https protocols
-file=ABI_DIR\BUILD_DIR\javahttp.dll                                         SHARED_LIB_DIR\javahttp.dll
-file=ABI_DIR\BUILD_DIR\javahttps.dll                                        SHARED_LIB_DIR\javahttps.dll
-data=JAVA_VM_RES_BLD\javahttp.odc                                           JAVA_VM_RES_IMG\javahttp.odc
-data=JAVA_VM_RES_BLD\javahttps.odc                                          JAVA_VM_RES_IMG\javahttps.odc
-
-// Socket protocol
-file=ABI_DIR\BUILD_DIR\javasocket.dll                                       SHARED_LIB_DIR\javasocket.dll
-file=ABI_DIR\BUILD_DIR\javasocketscplugin.dll                               SHARED_LIB_DIR\javasocketscplugin.dll
-data=JAVA_VM_RES_BLD\javasocket.odc                                         JAVA_VM_RES_IMG\javasocket.odc
-
-// Secure socket protocol
-file=ABI_DIR\BUILD_DIR\javassl.dll                                          SHARED_LIB_DIR\javassl.dll
-data=JAVA_VM_RES_BLD\javassl.odc                                            JAVA_VM_RES_IMG\javassl.odc
-
-
-////////////////////////////////
-// Java Extensions collection //
-////////////////////////////////
-
-// Push
-file=ABI_DIR\BUILD_DIR\javapushcontroller.dll                               SHARED_LIB_DIR\javapushcontroller.dll
-file=ABI_DIR\BUILD_DIR\javapushregistry.dll                                 SHARED_LIB_DIR\javapushregistry.dll
-data=JAVA_VM_RES_BLD\javapushregistry.odc                                   JAVA_VM_RES_IMG\javapushregistry.odc
-
-// Bluetooth
-file=ABI_DIR\BUILD_DIR\javabluecove.dll                                     SHARED_LIB_DIR\javabluecove.dll
-file=ABI_DIR\BUILD_DIR\javabluetooth.dll                                    SHARED_LIB_DIR\javabluetooth.dll
-file=ABI_DIR\BUILD_DIR\javabluetoothcommons.dll                             SHARED_LIB_DIR\javabluetoothcommons.dll
-file=ABI_DIR\BUILD_DIR\javabtgoepscplugin.dll                               SHARED_LIB_DIR\javabtgoepscplugin.dll
-file=ABI_DIR\BUILD_DIR\javabtl2capscplugin.dll                              SHARED_LIB_DIR\javabtl2capscplugin.dll
-file=ABI_DIR\BUILD_DIR\javabtsppscplugin.dll                                SHARED_LIB_DIR\javabtsppscplugin.dll
-data=JAVA_VM_RES_BLD\javabluecove.odc                                       JAVA_VM_RES_IMG\javabluecove.odc
-data=JAVA_VM_RES_BLD\javabluetooth.odc                                      JAVA_VM_RES_IMG\javabluetooth.odc
-data=JAVA_VM_RES_BLD\javabluetoothcommons.odc                               JAVA_VM_RES_IMG\javabluetoothcommons.odc
-
-// WMA
-file=ABI_DIR\BUILD_DIR\javawma.dll                                          SHARED_LIB_DIR\javawma.dll
-file=ABI_DIR\BUILD_DIR\javawmamms.dll                                       SHARED_LIB_DIR\javawmamms.dll
-file=ABI_DIR\BUILD_DIR\javacbsscplugin.dll                                  SHARED_LIB_DIR\javacbsscplugin.dll
-file=ABI_DIR\BUILD_DIR\javammsscplugin.dll                                  SHARED_LIB_DIR\javammsscplugin.dll
-file=ABI_DIR\BUILD_DIR\javasmsscplugin.dll                                  SHARED_LIB_DIR\javasmsscplugin.dll
-data=JAVA_VM_RES_BLD\javawma.odc                                            JAVA_VM_RES_IMG\javawma.odc
-data=JAVA_VM_RES_BLD\javawmamms.odc                                         JAVA_VM_RES_IMG\javawmamms.odc
-
-// Comm
-file=ABI_DIR\BUILD_DIR\javacomm.dll                                         SHARED_LIB_DIR\javacomm.dll
-data=JAVA_VM_RES_BLD\javacomm.odc                                           JAVA_VM_RES_IMG\javacomm.odc
-
-// Datagram
-file=ABI_DIR\BUILD_DIR\javadatagram.dll                                     SHARED_LIB_DIR\javadatagram.dll
-file=ABI_DIR\BUILD_DIR\javadatagramscplugin.dll                             SHARED_LIB_DIR\javadatagramscplugin.dll
-data=JAVA_VM_RES_BLD\javadatagram.odc                                       JAVA_VM_RES_IMG\javadatagram.odc
-
-// Location API
-file=ABI_DIR\BUILD_DIR\javalocation.dll                                     SHARED_LIB_DIR\javalocation.dll
-data=JAVA_VM_RES_BLD\javalocation.odc                                       JAVA_VM_RES_IMG\javalocation.odc
-
-// Sensor API
-file=ABI_DIR\BUILD_DIR\javasensor.dll                                       SHARED_LIB_DIR\javasensor.dll
-data=JAVA_VM_RES_BLD\javasensor.odc                                         JAVA_VM_RES_IMG\javasensor.odc
-
-// Web services API
-file=ABI_DIR\BUILD_DIR\javawebservices.dll                                  SHARED_LIB_DIR\javawebservices.dll
-data=JAVA_VM_RES_BLD\javawebservices.odc                                    JAVA_VM_RES_IMG\javawebservices.odc
-
-// PIM API
-file=ABI_DIR\BUILD_DIR\javapim.dll                                          SHARED_LIB_DIR\javapim.dll
-data=JAVA_VM_RES_BLD\javapim.odc                                            JAVA_VM_RES_IMG\javapim.odc
-
-// RMS API
-file=ABI_DIR\BUILD_DIR\javarms.dll                                          SHARED_LIB_DIR\javarms.dll
-data=JAVA_VM_RES_BLD\javarms.odc                                            JAVA_VM_RES_IMG\javarms.odc
-
-// SATSA API
-file=ABI_DIR\BUILD_DIR\javasatsa.dll                                        SHARED_LIB_DIR\javasatsa.dll
-data=JAVA_VM_RES_BLD\javasatsa.odc                                          JAVA_VM_RES_IMG\javasatsa.odc
-
-// File API
-file=ABI_DIR\BUILD_DIR\javafile.dll                                         SHARED_LIB_DIR\javafile.dll
-data=JAVA_VM_RES_BLD\javafile.odc                                           JAVA_VM_RES_IMG\javafile.odc
-
-// IAP Info API
-file=ABI_DIR\BUILD_DIR\javaiapinfo.dll                                      SHARED_LIB_DIR\javaiapinfo.dll
-data=JAVA_VM_RES_BLD\javaiapinfo.odc                                        JAVA_VM_RES_IMG\javaiapinfo.odc
-
-
-///////////////////
-// Miscellaneous //
-///////////////////
-
-// Generated localization file resources
-data=JAVA_VM_RES_BLD\resources.jar                                          JAVA_VM_RES_IMG\resources.jar
-
-// ODC list files
-data=ZRESOURCE\java\midpOdcList                                             JAVA_RES_IMG\midpodclist
-data=ZRESOURCE\java\installerOdcList                                        JAVA_RES_IMG\installerodclist
-data=ZRESOURCE\java\tckRunnerOdcList                                        JAVA_RES_IMG\tckrunnerodclist
-data=ZRESOURCE\java\javacontrolpanelodclist                                 JAVA_RES_IMG\javacontrolpanelodclist
-
-// trust roots list
-data=ZRESOURCE\java\security\trustroots\midprootslist                       JAVA_RES_IMG\security\trustroots\midprootslist
-
-#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rom/java_2_2.iby	Wed Jun 23 18:07:10 2010 +0300
@@ -0,0 +1,363 @@
+/*
+* 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:
+* Image-description file of the Java package for ROFS1.
+*/
+
+#ifndef __JAVA_IBY__
+#define __JAVA_IBY__
+
+#include <data_caging_paths_for_iby.hrh>
+
+// Helper defines
+define JAVA_RES_BLD        ABI_DIR\BUILD_DIR\z\resource\java
+define JAVA_RES_IMG        RESOURCE_FILES_DIR\java
+define JAVA_VM_RES_BLD     JAVA_RES_BLD\jvm\lib\jrt
+define JAVA_VM_RES_IMG     JAVA_RES_IMG\jvm\lib\jrt
+define JAVA_POLICY_BLD     ABI_DIR\BUILD_DIR\z\resource\java\security\policies
+define JAVA_POLICY_IMG     RESOURCE_FILES_DIR\java\security\policies
+
+
+////////////////////////////
+// Java Manager collection//
+////////////////////////////
+
+// stub sis
+data=ZSYSTEM\install\java.sis    System\Install\java.sis
+
+
+// AppMngr plugin
+ECOM_PLUGIN( appmngr2midletplugin.dll, appmngr2midletplugin.rsc )
+data=ZRESOURCE\plugins\appmngr2midletplugin.rsc    ECOM_RESOURCE_DIR\appmngr2midletplugin.rsc
+
+// Captain
+file=ABI_DIR\BUILD_DIR\javacaptain_ext_autostarter.dll             	        SHARED_LIB_DIR\javacaptain_ext_autostarter.dll
+file=ABI_DIR\BUILD_DIR\javacaptain_ext_btdeviceclassmanager.dll             SHARED_LIB_DIR\javacaptain_ext_btdeviceclassmanager.dll
+file=ABI_DIR\BUILD_DIR\javacaptain_ext_config.dll                           SHARED_LIB_DIR\javacaptain_ext_config.dll
+file=ABI_DIR\BUILD_DIR\javacaptain_ext_ondemand_2.dll                       SHARED_LIB_DIR\javacaptain_ext_ondemand_2.dll
+file=ABI_DIR\BUILD_DIR\javacaptain_ext_ondemand_7.dll                       SHARED_LIB_DIR\javacaptain_ext_ondemand_7.dll
+file=ABI_DIR\BUILD_DIR\javacaptain_ext_preinstallerstarter.dll              SHARED_LIB_DIR\javacaptain_ext_preinstallerstarter.dll
+file=ABI_DIR\BUILD_DIR\javacaptain_ext_pushregistryplugin.dll               SHARED_LIB_DIR\javacaptain_ext_pushregistryplugin.dll
+file=ABI_DIR\BUILD_DIR\javacaptain_ext_storageserverplugin.dll              SHARED_LIB_DIR\javacaptain_ext_storageserverplugin.dll
+file=ABI_DIR\BUILD_DIR\javacaptain.exe                                      PROGRAMS_DIR\javacaptain.exe
+
+// Registry
+file=ABI_DIR\BUILD_DIR\javaregistryclient.dll                               SHARED_LIB_DIR\javaregistryclient.dll
+file=ABI_DIR\BUILD_DIR\javasizehelperclient.dll                             SHARED_LIB_DIR\javasizehelperclient.dll
+file=ABI_DIR\BUILD_DIR\javasizehelperserver.dll                             SHARED_LIB_DIR\javasizehelperserver.dll
+
+// Installer
+ECOM_PLUGIN(ifeui.dll,ifeui.rsc)
+data=ZRESOURCE\plugins\ifeui.rsc                                            ECOM_RESOURCE_DIR\ifeui.rsc
+data=ZPRIVATE\10003a3f\apps\javainstaller_reg.rsc                           \private\10003a3f\import\apps\javainstaller_reg.rsc
+data=ZRESOURCE\apps\javainstaller_loc.rsc                                   APP_RESOURCE_DIR\javainstaller_loc.rsc
+data=ZRESOURCE\apps\javainstaller_icon.mif                                  APP_BITMAP_DIR\javainstaller_icon.mif
+file=ABI_DIR\BUILD_DIR\javainstaller.dll                                    SHARED_LIB_DIR\javainstaller.dll
+data=JAVA_VM_RES_BLD\javainstallerui.odc                                    JAVA_VM_RES_IMG\javainstallerui.odc
+file=ABI_DIR\BUILD_DIR\javainstallerui.dll                                  SHARED_LIB_DIR\javainstallerui.dll
+data=JAVA_VM_RES_BLD\javainstaller.odc                                      JAVA_VM_RES_IMG\javainstaller.odc
+file=ABI_DIR\BUILD_DIR\javainstallerstarter.dll                             PROGRAMS_DIR\javainstallerstarter.dll
+file=ABI_DIR\BUILD_DIR\javapreinstaller.dll                                 PROGRAMS_DIR\javapreinstaller.dll
+data=ZRESOURCE\java\java_app_92.mif                                         JAVA_RES_IMG\java_app.mif
+data=ZRESOURCE\java\java_trusted.png                                        JAVA_RES_IMG\java_trusted.png
+data=ZRESOURCE\java\java_untrusted.png                                      JAVA_RES_IMG\java_untrusted.png
+data=DATAZ_\private\102033E6\installer\inst_plugins.cfg           	    \private\102033E6\installer\inst_plugins.cfg
+
+// Launchers
+file=ABI_DIR\BUILD_DIR\javalauncher.exe                                     PROGRAMS_DIR\javalauncher.exe
+ECOM_PLUGIN(javaappschemeplugin.dll,javaappschemeplugin.rsc)
+data=ZRESOURCE\plugins\javaappschemeplugin.rsc                              ECOM_RESOURCE_DIR\javaappschemeplugin.rsc
+
+// SID Checker
+ECOM_PLUGIN(javasidchecker.dll,10281FBE.rsc)
+data=ZRESOURCE\plugins\javasidchecker.rsc                                   ECOM_RESOURCE_DIR\javasidchecker.rsc
+
+// Recognizers
+ECOM_PLUGIN(recjar.dll, 102031FB.rsc)
+data=ZRESOURCE\plugins\recjar.rsc                                           ECOM_RESOURCE_DIR\recjar.rsc
+
+// Backup & Restore
+file=ABI_DIR\BUILD_DIR\javabackup.exe                                       PROGRAMS_DIR\javabackup.exe
+ECOM_PLUGIN(midp2backupplugin.dll,10282474.rsc)
+data=ZRESOURCE\plugins\midp2backupplugin.rsc                                ECOM_RESOURCE_DIR\midp2backupplugin.rsc
+data=DATAZ_\private\1028246F\backup_registration.xml                        \private\1028246F\backup_registration.xml
+data=DATAZ_\private\102033E6\backup_registration.xml                        \private\102033E6\backup_registration.xml
+
+
+/////////////////////////
+// Java UIs collection //
+/////////////////////////
+
+// CoreUi
+file=ABI_DIR\BUILD_DIR\javacoreui.dll                                       SHARED_LIB_DIR\javacoreui.dll
+data=JAVA_VM_RES_BLD\javacoreui.odc                                         JAVA_VM_RES_IMG\javacoreui.odc
+
+// eSWT
+file=ABI_DIR\BUILD_DIR\eswt.dll                                             SHARED_LIB_DIR\eswt.dll
+data=JAVA_VM_RES_BLD\eswt.odc                                               JAVA_VM_RES_IMG\eswt.odc
+file=ABI_DIR\BUILD_DIR\eswtphysics.dll                                      SHARED_LIB_DIR\eswtphysics.dll
+file=ABI_DIR\BUILD_DIR\eswtapifacade.dll                                    SHARED_LIB_DIR\eswtapifacade.dll
+file=ABI_DIR\BUILD_DIR\eswtdirectcontent.dll                                SHARED_LIB_DIR\eswtdirectcontent.dll
+data=JAVA_VM_RES_BLD\eswtdirectcontent.odc                                  JAVA_VM_RES_IMG\eswtdirectcontent.odc
+data=ZPRIVATE\10003a3f\apps\eswt_reg.rsc                                    \private\10003a3f\import\apps\eswt_reg.rsc
+
+// LCDUI
+file=ABI_DIR\BUILD_DIR\javalcdui.dll                                        SHARED_LIB_DIR\javalcdui.dll
+data=JAVA_VM_RES_BLD\javalcdui.odc                                          JAVA_VM_RES_IMG\javalcdui.odc
+file=ABI_DIR\BUILD_DIR\lcdui.dll                                            SHARED_LIB_DIR\lcdui.dll
+file=ABI_DIR\BUILD_DIR\lcdgr.dll                                            SHARED_LIB_DIR\lcdgr.dll
+file=ABI_DIR\BUILD_DIR\lcdgdrv.dll                                          SHARED_LIB_DIR\lcdgdrv.dll
+file=ABI_DIR\BUILD_DIR\lcdgdrvi.dll                                         SHARED_LIB_DIR\lcdgdrvi.dll
+file=ABI_DIR\BUILD_DIR\lcduiphysicswrap.dll                                 SHARED_LIB_DIR\lcduiphysicswrap.dll
+ECOM_PLUGIN(LCDC4K.dll, 10208164.rsc)
+ECOM_PLUGIN(LCDC64K.dll, 10208162.rsc)
+ECOM_PLUGIN(LCDC16MU.dll, 10208166.rsc)
+ECOM_PLUGIN(LCDC16MA.dll, 10208168.rsc)
+data=ZRESOURCE\java\lcdgr.rsc                                               JAVA_RES_IMG\lcdgr.rsc
+data=ZPRIVATE\10003a3f\apps\lcdui_reg.rsc                                   \private\10003a3f\import\apps\lcdui_reg.rsc
+
+SCALABLE_IMAGE(APP_BITMAP_DIR,APP_BITMAP_DIR,lcdui)
+
+// AMMS API
+file=ABI_DIR\BUILD_DIR\javaamms.dll                                         SHARED_LIB_DIR\javaamms.dll
+data=JAVA_VM_RES_BLD\javaamms.odc                                           JAVA_VM_RES_IMG\javaamms.odc
+
+// Mobile Media API
+file=ABI_DIR\BUILD_DIR\javamobilemedia.dll                                  SHARED_LIB_DIR\javamobilemedia.dll
+data=JAVA_VM_RES_BLD\javamobilemedia.odc                                    JAVA_VM_RES_IMG\javamobilemedia.odc
+data=ABI_DIR\BUILD_DIR\z\system\sounds\digital\CamcorderJavaCapture.wav     \System\Sounds\Digital\CamcorderJavaCapture.wav
+data=ABI_DIR\BUILD_DIR\z\system\sounds\digital\CamcorderJavaStart.wav       \System\Sounds\Digital\CamcorderJavaStart.wav
+
+// MobInfo API
+file=ABI_DIR\BUILD_DIR\javamobinfo.dll                                      SHARED_LIB_DIR\javamobinfo.dll
+data=JAVA_VM_RES_BLD\javamobinfo.odc                                        JAVA_VM_RES_IMG\javamobinfo.odc
+
+// GlobalIndicators API
+file=ABI_DIR\BUILD_DIR\javaglobalindicators.dll                             SHARED_LIB_DIR\javaglobalindicators.dll
+data=JAVA_VM_RES_BLD\javaglobalindicators.odc                               JAVA_VM_RES_IMG\javaglobalindicators.odc
+
+// SoftNotification API
+file=ABI_DIR\BUILD_DIR\javasoftnotification.dll                             SHARED_LIB_DIR\javasoftnotification.dll
+data=JAVA_VM_RES_BLD\javasoftnotification.odc                               JAVA_VM_RES_IMG\javasoftnotification.odc
+
+// 2G API
+file=ABI_DIR\BUILD_DIR\javam2g.dll                                          SHARED_LIB_DIR\javam2g.dll
+data=JAVA_VM_RES_BLD\javam2g.odc                                            JAVA_VM_RES_IMG\javam2g.odc
+
+// 3G API
+file=ABI_DIR\BUILD_DIR\javam3g.dll                                          SHARED_LIB_DIR\javam3g.dll
+data=JAVA_VM_RES_BLD\javam3g.odc                                            JAVA_VM_RES_IMG\javam3g.odc
+
+// Nokia Sound API
+file=ABI_DIR\BUILD_DIR\javanokiasound.dll                                   SHARED_LIB_DIR\javanokiasound.dll
+data=JAVA_VM_RES_BLD\javanokiasound.odc                                     JAVA_VM_RES_IMG\javanokiasound.odc
+
+// Remote Connection Observer
+file=ABI_DIR\BUILD_DIR\javaremconobserver.dll                               SHARED_LIB_DIR\javaremconobserver.dll
+
+// Legacy utilities
+file=ABI_DIR\BUILD_DIR\javalegacyutils.dll                                  SHARED_LIB_DIR\javalegacyutils.dll
+data=JAVA_VM_RES_BLD\javalegacyutils.odc                                    JAVA_VM_RES_IMG\javalegacyutils.odc
+
+
+/////////////////////////////
+// Java Runtimes collection //
+/////////////////////////////
+
+// Runtime utilities
+file=ABI_DIR\BUILD_DIR\javaruntimeui.dll                                    SHARED_LIB_DIR\javaruntimeui.dll
+data=JAVA_VM_RES_BLD\javaruntimeui.odc                                      JAVA_VM_RES_IMG\javaruntimeui.odc
+file=ABI_DIR\BUILD_DIR\javaruntimestarterutils.dll                          SHARED_LIB_DIR\javaruntimestarterutils.dll
+
+// MIDP runtime
+file=ABI_DIR\BUILD_DIR\javamidp.exe                                         PROGRAMS_DIR\javamidp.exe
+file=ABI_DIR\BUILD_DIR\javamidpstarter.dll                                  SHARED_LIB_DIR\javamidpstarter.dll
+file=ABI_DIR\BUILD_DIR\javamidpruntime.dll                                  SHARED_LIB_DIR\javamidpruntime.dll
+data=JAVA_VM_RES_BLD\javamidpruntime.odc                                    JAVA_VM_RES_IMG\javamidpruntime.odc
+
+// An empty JVM argument modifier (to prevent 3rd parties from installing a DLL with this name)
+// To enable JVM argument modifier - comment 1st line below and uncomment 2nd line below
+file=ABI_DIR\BUILD_DIR\javajvmargsmodifier.dll                              SHARED_LIB_DIR\javajvmargsmodifier.dll
+//file=ABI_DIR\BUILD_DIR\javajvmargsmodifierfile.dll                        SHARED_LIB_DIR\javajvmargsmodifier.dll
+
+
+/////////////////////////////
+// Java Commons collection //
+/////////////////////////////
+
+// J9 JVM
+file=ABI_DIR\BUILD_DIR\j9.dll                                               SHARED_LIB_DIR\j9.dll
+file=ABI_DIR\BUILD_DIR\j9vmall23.dll                                        SHARED_LIB_DIR\j9vmall23.dll
+file=ABI_DIR\BUILD_DIR\j9mjit23.dll                                         SHARED_LIB_DIR\j9mjit23.dll
+file=ABI_DIR\BUILD_DIR\jclcldc11_23.dll                                     SHARED_LIB_DIR\jclcldc11_23.dll
+file=ABI_DIR\BUILD_DIR\jclcdc11_23.dll                                      SHARED_LIB_DIR\jclcdc11_23.dll
+file=ABI_DIR\BUILD_DIR\j9fdm23.dll                                          SHARED_LIB_DIR\j9fdm23.dll
+file=ABI_DIR\BUILD_DIR\JvmNativePort.dll                                    SHARED_LIB_DIR\JvmNativePort.dll
+data=JAVA_RES_BLD\jvm\bin\java.properties                                   JAVA_RES_IMG\jvm\bin\java.properties
+data=JAVA_RES_BLD\jvm\lib\security\java.policy                              JAVA_RES_IMG\jvm\lib\security\java.policy
+data=JAVA_RES_BLD\jvm\lib\security\java.security                            JAVA_RES_IMG\jvm\lib\security\java.security
+
+// Utilities
+file=ABI_DIR\BUILD_DIR\javautils.dll                                        SHARED_LIB_DIR\javautils.dll
+data=JAVA_VM_RES_BLD\javautils.odc                                          JAVA_VM_RES_IMG\javautils.odc
+file=ABI_DIR\BUILD_DIR\javacomms.dll                                        SHARED_LIB_DIR\javacomms.dll
+data=JAVA_VM_RES_BLD\javacomms.odc                                          JAVA_VM_RES_IMG\javacomms.odc
+file=ABI_DIR\BUILD_DIR\javaipc.dll                                          SHARED_LIB_DIR\javaipc.dll
+file=ABI_DIR\BUILD_DIR\javafileutils.dll                                    SHARED_LIB_DIR\javafileutils.dll
+data=JAVA_VM_RES_BLD\javafileutils.odc                                      JAVA_VM_RES_IMG\javafileutils.odc
+file=ABI_DIR\BUILD_DIR\javadebugapi.dll                                     SHARED_LIB_DIR\javadebugapi.dll
+
+// Security dlls
+file=ABI_DIR\BUILD_DIR\javasecurity.dll                                     SHARED_LIB_DIR\javasecurity.dll
+data=JAVA_VM_RES_BLD\javasecurity.odc                                       JAVA_VM_RES_IMG\javasecurity.odc
+ECOM_PLUGIN(javaunicertstoreplugin.dll,200213A3.rsc)
+data=ZRESOURCE\plugins\javaunicertstoreplugin.rsc                           ECOM_RESOURCE_DIR\javaunicertstoreplugin.rsc
+
+// Security certs & policies
+data=JAVA_POLICY_BLD\s60_manufacturer.ser                                   JAVA_POLICY_IMG\s60_manufacturer.ser
+data=JAVA_POLICY_BLD\s60_operator.ser                                       JAVA_POLICY_IMG\s60_operator.ser
+data=JAVA_POLICY_BLD\s60_trustedthirdparty.ser                              JAVA_POLICY_IMG\s60_trustedthirdparty.ser
+data=JAVA_POLICY_BLD\s60_untrusted.ser                                      JAVA_POLICY_IMG\s60_untrusted.ser
+data=JAVA_POLICY_BLD\msa_manufacturer.ser                                   JAVA_POLICY_IMG\msa_manufacturer.ser
+data=JAVA_POLICY_BLD\msa_operator.ser                                       JAVA_POLICY_IMG\msa_operator.ser
+data=JAVA_POLICY_BLD\msa_trustedthirdparty.ser                              JAVA_POLICY_IMG\msa_trustedthirdparty.ser
+data=JAVA_POLICY_BLD\msa_untrusted.ser                                      JAVA_POLICY_IMG\msa_untrusted.ser
+data=JAVA_POLICY_BLD\att_manufacturer.ser                                   JAVA_POLICY_IMG\att_manufacturer.ser
+data=JAVA_POLICY_BLD\att_operator.ser                                       JAVA_POLICY_IMG\att_operator.ser
+data=JAVA_POLICY_BLD\att_operatorextra.ser                                  JAVA_POLICY_IMG\att_operatorextra.ser
+data=JAVA_POLICY_BLD\att_trustedthirdparty.ser                              JAVA_POLICY_IMG\att_trustedthirdparty.ser
+data=JAVA_POLICY_BLD\att_untrusted.ser                                      JAVA_POLICY_IMG\att_untrusted.ser
+data=JAVA_POLICY_BLD\all.ser                                                JAVA_POLICY_IMG\all.ser
+
+
+// Java environment info
+file=ABI_DIR\BUILD_DIR\javaenvinfo.dll                                      SHARED_LIB_DIR\javaenvinfo.dll
+data=ABI_DIR\BUILD_DIR\Z\Resource\versions\java.txt                         RESOURCE_FILES_DIR\versions\java.txt
+
+// Storage
+file=ABI_DIR\BUILD_DIR\javastorage.dll                                      SHARED_LIB_DIR\javastorage.dll
+data=JAVA_VM_RES_BLD\javastorage.odc                                        JAVA_VM_RES_IMG\javastorage.odc
+
+// GCF base
+file=ABI_DIR\BUILD_DIR\javagcf.dll                                          SHARED_LIB_DIR\javagcf.dll
+data=JAVA_VM_RES_BLD\javagcf.odc                                            JAVA_VM_RES_IMG\javagcf.odc
+
+// Connection Manager
+file=ABI_DIR\BUILD_DIR\javaconnectionmanager.dll                            SHARED_LIB_DIR\javaconnectionmanager.dll
+data=JAVA_VM_RES_BLD\javaconnectionmanager.odc                              JAVA_VM_RES_IMG\javaconnectionmanager.odc
+
+// Http & https protocols
+file=ABI_DIR\BUILD_DIR\javahttp.dll                                         SHARED_LIB_DIR\javahttp.dll
+file=ABI_DIR\BUILD_DIR\javahttps.dll                                        SHARED_LIB_DIR\javahttps.dll
+data=JAVA_VM_RES_BLD\javahttp.odc                                           JAVA_VM_RES_IMG\javahttp.odc
+data=JAVA_VM_RES_BLD\javahttps.odc                                          JAVA_VM_RES_IMG\javahttps.odc
+
+// Socket protocol
+file=ABI_DIR\BUILD_DIR\javasocket.dll                                       SHARED_LIB_DIR\javasocket.dll
+file=ABI_DIR\BUILD_DIR\javasocketscplugin.dll                               SHARED_LIB_DIR\javasocketscplugin.dll
+data=JAVA_VM_RES_BLD\javasocket.odc                                         JAVA_VM_RES_IMG\javasocket.odc
+
+// Secure socket protocol
+file=ABI_DIR\BUILD_DIR\javassl.dll                                          SHARED_LIB_DIR\javassl.dll
+data=JAVA_VM_RES_BLD\javassl.odc                                            JAVA_VM_RES_IMG\javassl.odc
+
+
+////////////////////////////////
+// Java Extensions collection //
+////////////////////////////////
+
+// Push
+file=ABI_DIR\BUILD_DIR\javapushcontroller.dll                               SHARED_LIB_DIR\javapushcontroller.dll
+file=ABI_DIR\BUILD_DIR\javapushregistry.dll                                 SHARED_LIB_DIR\javapushregistry.dll
+data=JAVA_VM_RES_BLD\javapushregistry.odc                                   JAVA_VM_RES_IMG\javapushregistry.odc
+
+// Bluetooth
+file=ABI_DIR\BUILD_DIR\javabluecove.dll                                     SHARED_LIB_DIR\javabluecove.dll
+file=ABI_DIR\BUILD_DIR\javabluetooth.dll                                    SHARED_LIB_DIR\javabluetooth.dll
+file=ABI_DIR\BUILD_DIR\javabluetoothcommons.dll                             SHARED_LIB_DIR\javabluetoothcommons.dll
+file=ABI_DIR\BUILD_DIR\javabtgoepscplugin.dll                               SHARED_LIB_DIR\javabtgoepscplugin.dll
+file=ABI_DIR\BUILD_DIR\javabtl2capscplugin.dll                              SHARED_LIB_DIR\javabtl2capscplugin.dll
+file=ABI_DIR\BUILD_DIR\javabtsppscplugin.dll                                SHARED_LIB_DIR\javabtsppscplugin.dll
+data=JAVA_VM_RES_BLD\javabluecove.odc                                       JAVA_VM_RES_IMG\javabluecove.odc
+data=JAVA_VM_RES_BLD\javabluetooth.odc                                      JAVA_VM_RES_IMG\javabluetooth.odc
+data=JAVA_VM_RES_BLD\javabluetoothcommons.odc                               JAVA_VM_RES_IMG\javabluetoothcommons.odc
+
+// WMA
+file=ABI_DIR\BUILD_DIR\javawma.dll                                          SHARED_LIB_DIR\javawma.dll
+file=ABI_DIR\BUILD_DIR\javawmamms.dll                                       SHARED_LIB_DIR\javawmamms.dll
+file=ABI_DIR\BUILD_DIR\javacbsscplugin.dll                                  SHARED_LIB_DIR\javacbsscplugin.dll
+file=ABI_DIR\BUILD_DIR\javammsscplugin.dll                                  SHARED_LIB_DIR\javammsscplugin.dll
+file=ABI_DIR\BUILD_DIR\javasmsscplugin.dll                                  SHARED_LIB_DIR\javasmsscplugin.dll
+data=JAVA_VM_RES_BLD\javawma.odc                                            JAVA_VM_RES_IMG\javawma.odc
+data=JAVA_VM_RES_BLD\javawmamms.odc                                         JAVA_VM_RES_IMG\javawmamms.odc
+
+// Comm
+file=ABI_DIR\BUILD_DIR\javacomm.dll                                         SHARED_LIB_DIR\javacomm.dll
+data=JAVA_VM_RES_BLD\javacomm.odc                                           JAVA_VM_RES_IMG\javacomm.odc
+
+// Datagram
+file=ABI_DIR\BUILD_DIR\javadatagram.dll                                     SHARED_LIB_DIR\javadatagram.dll
+file=ABI_DIR\BUILD_DIR\javadatagramscplugin.dll                             SHARED_LIB_DIR\javadatagramscplugin.dll
+data=JAVA_VM_RES_BLD\javadatagram.odc                                       JAVA_VM_RES_IMG\javadatagram.odc
+
+// Location API
+file=ABI_DIR\BUILD_DIR\javalocation.dll                                     SHARED_LIB_DIR\javalocation.dll
+data=JAVA_VM_RES_BLD\javalocation.odc                                       JAVA_VM_RES_IMG\javalocation.odc
+
+// Sensor API
+file=ABI_DIR\BUILD_DIR\javasensor.dll                                       SHARED_LIB_DIR\javasensor.dll
+data=JAVA_VM_RES_BLD\javasensor.odc                                         JAVA_VM_RES_IMG\javasensor.odc
+
+// Web services API
+file=ABI_DIR\BUILD_DIR\javawebservices.dll                                  SHARED_LIB_DIR\javawebservices.dll
+data=JAVA_VM_RES_BLD\javawebservices.odc                                    JAVA_VM_RES_IMG\javawebservices.odc
+
+// PIM API
+file=ABI_DIR\BUILD_DIR\javapim.dll                                          SHARED_LIB_DIR\javapim.dll
+data=JAVA_VM_RES_BLD\javapim.odc                                            JAVA_VM_RES_IMG\javapim.odc
+
+// RMS API
+file=ABI_DIR\BUILD_DIR\javarms.dll                                          SHARED_LIB_DIR\javarms.dll
+data=JAVA_VM_RES_BLD\javarms.odc                                            JAVA_VM_RES_IMG\javarms.odc
+
+// SATSA API
+file=ABI_DIR\BUILD_DIR\javasatsa.dll                                        SHARED_LIB_DIR\javasatsa.dll
+data=JAVA_VM_RES_BLD\javasatsa.odc                                          JAVA_VM_RES_IMG\javasatsa.odc
+
+// File API
+file=ABI_DIR\BUILD_DIR\javafile.dll                                         SHARED_LIB_DIR\javafile.dll
+data=JAVA_VM_RES_BLD\javafile.odc                                           JAVA_VM_RES_IMG\javafile.odc
+
+// IAP Info API
+file=ABI_DIR\BUILD_DIR\javaiapinfo.dll                                      SHARED_LIB_DIR\javaiapinfo.dll
+data=JAVA_VM_RES_BLD\javaiapinfo.odc                                        JAVA_VM_RES_IMG\javaiapinfo.odc
+
+
+///////////////////
+// Miscellaneous //
+///////////////////
+
+// Generated localization file resources
+data=JAVA_VM_RES_BLD\resources.jar                                          JAVA_VM_RES_IMG\resources.jar
+
+// ODC list files
+data=ZRESOURCE\java\midpOdcList                                             JAVA_RES_IMG\midpodclist
+data=ZRESOURCE\java\installerOdcList                                        JAVA_RES_IMG\installerodclist
+data=ZRESOURCE\java\tckRunnerOdcList                                        JAVA_RES_IMG\tckrunnerodclist
+data=ZRESOURCE\java\javacontrolpanelodclist                                 JAVA_RES_IMG\javacontrolpanelodclist
+
+// trust roots list
+data=ZRESOURCE\java\security\trustroots\midprootslist                       JAVA_RES_IMG\security\trustroots\midprootslist
+
+#endif
--- a/rom/java_3_1.iby	Fri Jun 11 13:33:44 2010 +0300
+++ b/rom/java_3_1.iby	Wed Jun 23 18:07:10 2010 +0300
@@ -41,6 +41,7 @@
 data=DATAZ_\resource\qt\plugins\appsettings\javaapplicationsettingsview.qtplugin 		resource\qt\plugins\appsettings\javaapplicationsettingsview.qtplugin
 
 // Captain
+file=ABI_DIR\BUILD_DIR\javacaptain_ext_autostarter.dll             	        SHARED_LIB_DIR\javacaptain_ext_autostarter.dll
 file=ABI_DIR\BUILD_DIR\javacaptain_ext_btdeviceclassmanager.dll             SHARED_LIB_DIR\javacaptain_ext_btdeviceclassmanager.dll
 file=ABI_DIR\BUILD_DIR\javacaptain_ext_config.dll                           SHARED_LIB_DIR\javacaptain_ext_config.dll
 file=ABI_DIR\BUILD_DIR\javacaptain_ext_ondemand_2.dll                       SHARED_LIB_DIR\javacaptain_ext_ondemand_2.dll
@@ -78,10 +79,6 @@
 ECOM_PLUGIN(javaappschemeplugin.dll,javaappschemeplugin.rsc)
 data=ZRESOURCE\plugins\javaappschemeplugin.rsc                              ECOM_RESOURCE_DIR\javaappschemeplugin.rsc
 
-// SID Checker
-ECOM_PLUGIN(javasidchecker.dll,javasidchecker.rsc)
-data=ZRESOURCE\plugins\javasidchecker.rsc                                   ECOM_RESOURCE_DIR\javasidchecker.rsc
-
 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
 // Usif installer plugin
 ECOM_PLUGIN(javasifplugin.dll,javasifplugin.rsc)
@@ -119,18 +116,7 @@
 // LCDUI
 file=ABI_DIR\BUILD_DIR\openlcdui.dll                                        SHARED_LIB_DIR\openlcdui.dll
 data=JAVA_VM_RES_BLD\openlcdui.odc                                          JAVA_VM_RES_IMG\openlcdui.odc
-// AMMS API
-/*
-file=ABI_DIR\BUILD_DIR\javaamms.dll                                         SHARED_LIB_DIR\javaamms.dll
-data=JAVA_VM_RES_BLD\javaamms.odc                                           JAVA_VM_RES_IMG\javaamms.odc
-*/
-// Mobile Media API
-/*
-file=ABI_DIR\BUILD_DIR\javamobilemedia.dll                                  SHARED_LIB_DIR\javamobilemedia.dll
-data=JAVA_VM_RES_BLD\javamobilemedia.odc                                    JAVA_VM_RES_IMG\javamobilemedia.odc
-data=ABI_DIR\BUILD_DIR\z\system\sounds\digital\CamcorderJavaCapture.wav     \System\Sounds\Digital\CamcorderJavaCapture.wav
-data=ABI_DIR\BUILD_DIR\z\system\sounds\digital\CamcorderJavaStart.wav       \System\Sounds\Digital\CamcorderJavaStart.wav
-*/
+
 // MobInfo API
 file=ABI_DIR\BUILD_DIR\javamobinfo.dll                                      SHARED_LIB_DIR\javamobinfo.dll
 data=JAVA_VM_RES_BLD\javamobinfo.odc                                        JAVA_VM_RES_IMG\javamobinfo.odc
@@ -341,6 +327,15 @@
 file=ABI_DIR\BUILD_DIR\javaiapinfo.dll                                      SHARED_LIB_DIR\javaiapinfo.dll
 data=JAVA_VM_RES_BLD\javaiapinfo.odc                                        JAVA_VM_RES_IMG\javaiapinfo.odc
 
+// MMAPI
+file=ABI_DIR\BUILD_DIR\javamobilemedia.dll                                      SHARED_LIB_DIR\javamobilemedia.dll
+data=JAVA_VM_RES_BLD\javamobilemedia.odc                                        JAVA_VM_RES_IMG\javamobilemedia.odc
+data=ABI_DIR\BUILD_DIR\z\system\sounds\digital\CamcorderJavaCapture.wav     \System\Sounds\Digital\CamcorderJavaCapture.wav
+data=ABI_DIR\BUILD_DIR\z\system\sounds\digital\CamcorderJavaStart.wav       \System\Sounds\Digital\CamcorderJavaStart.wav
+
+// AMMS
+file=ABI_DIR\BUILD_DIR\javaamms.dll                                      SHARED_LIB_DIR\javaamms.dll
+data=JAVA_VM_RES_BLD\javaamms.odc                                        JAVA_VM_RES_IMG\javaamms.odc
 
 ///////////////////
 // Miscellaneous //